AppendixÂ C.Â A Retrospective on the First Year of Obtivaâs Apprenticeship Program
I posted this on my blog on March 23, 2008. After my call to action the previous year, this was my attempt to lead by example and share the hits and misses in my own attempt to establish an apprenticeship program at Obtiva. Since writing this retrospective, we have taken on two new apprentices after promoting two of our existing apprentices.
One year ago I stopped doing full-time on-site consulting. I started on-site consulting in 2004 when I joined ThoughtWorks, and continued through my first client at Obtiva. I have done a few multi-day, local stints since Spring 2007, but the vast majority of my days have been spent in a smallish office about a mile from my house in Wheaton, Illinois, USA. It was a risk to start Obtivaâs Craftsmanship Studio and subsequent Apprenticeship Program, but after a ton of hard work, frequent mistakes, and mismanagement, I can confidently say these last 12 months have paid off and the future is brilliant. Let me try to explain what Iâm talking about, and why Iâm confident about our first yearâs success. (And thank you to Michael Hunger for asking for more information on this topic.)
What is a Craftsmanship Studio? I should rephrase that to âWhat is Obtivaâs Craftsmanship Studio?â because I can only speak with authority on that. First, what does âCraftsmanshipâ mean in this context? My best answer to that question is to advise you to go read Part 3 of Software Craftsmanship by Pete McBreen. Being a self-taught programmer, and coming from a right-brained background, the concept of craftsmanship immediately resonated with me. It should come as no surprise that when I had the opportunity to create my own practice within Obtiva, I tried to model it after the ideals that inspired me in Pete McBreenâs book.
Second, what is a âStudioâ in this context? The dictionary tells us that a studio is âan artistâs workroomâ or âan establishment where an art is taught or studiedâ. That sounded right to me, and it is supported by the fact that Computer Programming as an Art has been a strong theme among the leaders in our field for a long time.
The above ideas basically summed up the vision for our Craftsmanship Studio: a place where programming newcomers can come to learn the craft of software development on real-world projects working closely with experienced developers. Reality was much messier than our vision, and there were too many times when apprentices were isolated or working together without much oversight. This messiness can be attributed to the fact that I am a journeyman, not a master craftsman, and therefore this year was filled with mistakes as I learned (by trial-and-error) about project management, customer relations, capacity planning, and recruiting. Thankfully we have had about 50 retrospectives during that time and have adapted our agile principles into a process that continues to improve each week.
This describes the need and the relationship, but in reality, who are these people, these supposed newcomers? My working definition for someone in an apprenticeship is: a person who is looking to maximize their learning opportunities, even at the cost of other opportunities. Often this means purposely putting yourself into a Be The Worst situation, which is exactly what I did when I joined ThoughtWorks. For Obtiva, this means weâre looking at potential and attitude rather than credentials. These people could probably make more money somewhere else in the short-term, but they are making an investment in learning that will pay off in the long-term.
I would like to see our Apprenticeship Program mature into a more formal apprenticeship with better feedback mechanisms and milestones. That said, I can say that the four apprentices who have participated in our Craftsmanship Studio have been very successful despite my shortcomings as a manager. This year reinforced for me what I learned when I was an apprentice: your apprenticeship is what you make of it. We had a Perl web developer come to us, learn Ruby and Rails and Java, and leave us writing a multi-threaded Ruby/JRuby/Java/JNI application that leveraged a 16 core machine for a local hedge fund. We had someone come to us to reboot his career, learn Unix, MySQL, Perl, Ruby and Rails and is now both managing and developing e-commerce deliveries for the Studioâs largest client. We had someone come to us from a local Rails sweatshop, learn technologies like Sphinx, rSpec, god, ActiveMerchant, CruiseControl.rb, along with Perl, who is now introducing Git into the team and will soon be technical lead on his third Rails e-commerce project. We had a network administrator come to us, who after rapidly delivering several different Rails projects, is now wrangling a large, chaotic Rails codebase under control via rSpec better than many experienced developers I know.
What do I attribute our success to?
Co-location: Nothing beats face-to-face teamwork
Pair programming: Nothing beats side-by-side development
Test-driven development: Nothing beats ping pong programming with tiny feedback loops
Agile principles: Constantly re-evaluating our reality with the principles we hold and readjusting our process accordingly
Respecting our customers: We work directly with the Goal Donor (often the same person as the Gold Owner) and use their language to build user stories
Great tools: We use Macs with extra flatscreens and regularly bring in new technologies to boost productivity
Hard work: Staying focused on our deliveries despite tough conditions
Culture: Nothing beats an impromptu team snowball fight in the parking lot to get those creative juices flowing
All of these have added up to an ever-increasing demand for our services, which we are getting gradually better at managing, which combined, keeps everything chugging along at a sustainable pace. This pace is the critical piece because it means we also have lives outside the office that can energize us for our next day of teamwork.
 âRed Squirrel Reflections.â Available at: http://redsquirrel.com/cgi-bin/dave/obtiva/apprenticeship.program.first.year.html.