96-838-Silicon Valley Campus - Carnegie Mellon University

96-838-Silicon Valley Campus - Carnegie Mellon University

96-838 Special Topics Seminar: Craft of Software Development

Credit units: 12

Students pursuing software engineering as a profession resonate with the need to improve their own craft. This course provides an opportunity for students to identity and improve upon an aspect of their craft, and perhaps more importantly, trains students with practical skills in self directed learning.

Each student picks a personal learning focus in an area of known software development weakness for that student. Through a “maiden speech” they asked their class community for help in creating a learning plan to address their area of weakness. Learning plans typically incorporated known apprenticeship patterns such as “Find a Coach,” “Breakable Toys,” and “Practice, Practice, Practice.” After creating their learning plan, students identified metrics to track their progress towards their goal. While executing their individual learning plans, the class performed programming katas which are specific programming exercises to work on issues relevant for the entire class.

The process of identifying an area of weakness, creating a plan, and tracking metrics is useful for any software developer on their journey to become software expert.

It has been conjectured that in order to become an expert, practitioners need to spend roughly 10,000 hours or 10 years of deliberate practice and coaching. While incorporating practice into one’s routine is good, “not all practice makes perfect.” People tend to practice activities at which they are proficient, which is more enjoyable than working on weaknesses. In contrast, in deliberate practice, a coach guides a practitioner through specific activities for a task that the practitioner wants to improve or can’t even do today.

Early in the journey, a coach gives the practitioner specific exercises that address known weaknesses. Eventually the practitioner will outgrow the expertise of the coach and will need to find a new coach. When the practitioner nears mastery and there are no more advanced coaches, then the role of the coach is to teach the practitioner how to be their own coach. For the craft of software development, the ideal coach has progressed through their own journeyman adventure, can identify areas of improvement, and can suggest appropriate activities for the practitioner to do. One path of deliberate practice is for the practitioner to find a coach, identify an area to improve upon, create a plan, implement the plan, collect metrics for assessment, and reflect upon the experience.

The goals of this course are to

  1. identify a learning focus (an area of weakness) and create a learning plan to achieve that goal using known apprenticeship patterns
  2. determine metrics to see if they are achieving their goal
  3. find a coach or mentor
  4. incorporate deliberate practice into their routine
  5. improve self-directed learning skills


  • 96-700: Foundations of Software Engineering, or
  • 96-821: Introduction to Software Engineering, or
  • by consent of the instructor

return to course catalog