I posted this on my blog on August 22, 2007. This call to action is aimed at the people who have the power to hire apprentices and establish apprenticeship programs. Even if you don’t currently possess this power, I hope that you can keep these words in mind as you move beyond your apprenticeship years.
At Agile 2007 last week, I snuck into the last 30 minutes of Uncle Bob’s talk about Craftsmanship and Professionalism. When Uncle Bob talks about Craftsmanship he is generally talking about nitty-gritty details of the craft, such as specific practices and tools, but he did have one slide on apprenticeship. He ranted a bit about how most universities do not equip graduates with sufficient skills to allow them to deliver quality software from day one. (Not to mention the significant number of people who come into software development from other fields and have never even received the inadequate computer science education that Bob was referring to.) Bob asserted that we need to apprentice these young people, these graduates and newcomers. He asserted that the most effective learning situation is one where a small number of apprentices work alongside an even smaller number of journeymen, who are receiving guidance from a master craftsman. It was music to my ears until Bob polled the audience for anyone who was working in that environment.
I proudly raised my hand, but my heart sank as I looked around and realized I was the only one raising my hand.
For the rest of the conference, I felt a sense of pride at the revelation that Obtiva’s Software Studio is such a unique phenomenon. But I also struggled with a sense of sadness and frustration at the lack of apprenticeship opportunities our industry is providing to graduates and newcomers. My biggest point of frustration is with small companies (1–20 people) made up entirely of super-experienced, world-class developers, coaches, and trainers. I understand your compulsion to only hire people with over 5 years of professional experience who have established reputations, but I believe you’re hurting the industry by implicitly refusing to take on the responsibility to apprentice a few people along the way.
Where do graduates and newcomers go when they’re looking for their first gig? They go where people are hiring entry level people. This is where we lose some of our greatest potential, because people who had the potential for greatness lose heart sitting at the bottom of mediocre, bloated, bureaucratic development organizations. Imagine if young Nathaniel Talbott, too inexperienced and unqualified to do much of anything interesting, had found an “entry level” position, rather than becoming the first apprentice of RoleModel Software. Sure, someone else would have probably written test/unit for Ruby. And Nathaniel would probably still have become a good software developer. But I am convinced that Nathaniel’s apprenticeship made an impact on our industry, and we’re better because of it.
Apprenticeship is more than simply hiring entry level people. Apprenticeship is coupling an apprentice to a journeyman. That doesn’t mean they’re pair programming all the time, but it does mean that the journeyman is overseeing the apprentice’s progress and that the apprentice has an experienced developer in close physical proximity to turn to for guidance.
Furthermore, apprentices are not necessarily entry level people. Our first apprentices generally had a year or two of experience under their belt. Some are in the middle of college degrees. Some had recently graduated. One is re-booting his IT career later in life. Apprentices are people who are willing to take on a junior role that maximizes their learning opportunities, as opposed to people who try to climb as quickly as they can into roles that maximize their financial opportunities. In my experience, if the apprentice has talent and the right attitude, their financial success will inevitably follow their learning success.
 “Red Squirrel Reflections.” Available at: http://redsquirrel.com/cgi-bin/dave/craftsmanship/a.call.for.apprenticeship.html.