The Publication of Apprenticeship Patterns
Now that I’ve had the pleasure of holding my book in my hands I feel like it’s time to (re-)tell the story of how this book was born.
In the Spring of 2002, I worked at a big, old (bloated) non-profit organization in Chicago. My boss (IT manager) handed me a book that had been given to him by some local consultants. He had seen my accelerating appetite for software development books and figured I might be interested. I was skeptical of a book coming from my boss, but I knew the consulting firm had some respected software developers, so I took a look at it. The name of the book was Software Craftsmanship: The New Imperative. I read the back cover, set it on the shelf, and went back to reading yet another book on Extreme Programming.
Toward the end of that summer, I took some time off up in Ontario with my wife and some friends. Since I’d finished reading all the available XP books, I thoughtlessly grabbed Software Craftsmanship on my way out on my last day of work. Later that night, we were hurtling northward on the overnight road trip to Ontario. I had already put in my time as driver and everyone (except the driver) was asleep so I figured I’d try to get some sleep too. Naturally, I couldn’t, so I pulled out the book and started reading (with a flashlight). I read almost all of Software Craftsmanship that night. It was one of those “right book, right time” moments for me. Although the target audience for the book was managers and leaders, and I had been programming for less than 2 years, I was old enough (28) to understand what Pete was getting at despite my inexperience. When I put the book down, I had a direction for my career. The context that Pete had set in his book gave me a (albeit vaguely defined) path to follow, and showed me where I was on that path: I was an apprentice.
A few years later, I had switched employers and was working at ThoughtWorks. One of the main advantages of working at ThoughtWorks (2004-2006) was the doors it opened for me. After working on the dream team for my first gig, I gained a lot of confidence (and some competence) and started trying to make some waves. So, I rolled onto my second ThoughtWorks gig and started explaining how I had pair programmed with Dave, Obie, and Aslak. I realized it would be nice to have a name for the style of pairing we practiced. And so I wrote a blog post that helped name the practice of “Ping Pong Programming”. After I wrote this I felt compelled to email Brian Marick to see if the blog post might make sense to publish in Better Software. It apparently didn’t, but it did end up on StickyMinds (thanks to Brian). As a result of that article, I got a call from a StickyMinds editor who told me she just signed up the Prags to write about Software Craftsmanship and asked if I would like to write a column on the same topic. (The Prags didn’t really write much about craftsmanship, it was more a precursor to Andy’s excellent Pragmatic Thinking and Learning.) Whoa! Cool! I immediately agreed to write the column. But then I had to ask myself, what was I, an apprentice, qualified to write about?
The only aspect of Software Craftsmanship that I was qualified to write about in 2005 was developing one’s own apprenticeship. And then it dawned on me that there was a gaping hole between Pete’s Software Craftsmanship: The New Imperative and The Pragmatic Programmer: Journeyman to Master. Where does someone learn how to become a journeyman? And so, in March of 2005, I let my tiny corner of the blogosphere know what I was hoping to do. Earlier that month, a blog post by Chris Morris planted a seed that quickly grew into the first apprenticeship pattern: Be the Worst. Not surprisingly, Chris’s blog post inspired another aspiring author, Chad Fowler, who included a section on “Be the Worst” in his My Job Went to India book (now rewritten as the excellent Passionate Programmer). But I digress. A small pattern language started forming in my mind and I quickly dumped it into a private wiki so I could access it from anywhere (like, say, the hedge fund where I was consulting at that time, hey, the build took a long time!).
The pattern language format felt like a natural fit for the material that I was imagining, mostly because I had been profoundly inspired by A Pattern Language when I read it in 2003. For a while there, all I could “see” were pattern languages. One of the advantages of using the language format was that it connected me to the patterns community, who provided us with excellent feedback and encouragement when Ade and I presented at PLoP. But I’m getting ahead of myself! Who is this Ade character?
A month or two after I had started writing Apprenticeship Patterns, I contacted the Prags about having it published through their new publishing company. Andy had a look at my wiki and asked me to write him a sample chapter (they later passed on the book). This was just the sort of push I needed to get me out of wiki-land and into book-writing land. I soon realized that the book wasn’t going to work if it was just “the stuff that worked for Dave”, and I knew enough about patterns that they needed to be tried-and-true solutions to common problems. So I set out to test the Apprenticeship Patterns against the experiences of other software developers and look for new patterns in their stories. I started interviewing both experienced (Ron Jeffries, Norm Kerth) and less experienced (Desi McAdam, Micah Martin) developers. Working at ThoughtWorks made it easy for me to connect to a worldwide network of excellent developers which helped this process a ton. The most enthusiastic participant in these interviews was Adewale Oshineye. His responses were so well thought out and well written that after a few interchanges, I felt compelled to ask for his help.
Ade and I cranked out a bunch of solid work on the pattern language in 2005, but even before we met at PLoP, I had lost my momentum. It was getting to be late 2005 and I had just spent the better part of the year writing about learning, and I was missing out on actual learning. This was the year when Ajax hit the mainstream and Ruby on Rails exploded. I couldn’t not take advantage of the opportunities I saw, so I set Apprenticeship Patterns aside and started reusing the patterns I had been writing about to learn these new techologies. I ended up leaving ThoughtWorks to join Obtiva, which at the time was a 6-month-old 3-person software development consultancy. A year later, in 2007, we started Obtiva’s Software Studio so that we could more easily take on end-to-end Rails projects and bring on our first Apprentice.
Later in 2007, I was contacted by an editor at Manning who saw our patterns online. (We always kept our most “polished” patterns online to elicit feedback.) The editor from Manning encouraged me to finish the book. And then I remembered Mary Treseler from O’Reilly, who found our patterns back in 2005, encouraged us to continue, and even did some pro-bono editing for us. Before I proceeded with Manning, I wanted to talk to Mary. Once I contacted her, publication was immediately assumed and a contract was signed before the end of the year. Cool! They even gave Ade and me some advance money as we progressed through the milestones toward publication. And progressing we were!
Throughout this little story, I’ve been referring to the book as Apprenticeship Patterns, but up until March 2008, I had usually referred to the book as Software Craftsmanship: Apprentice to Journeyman. The name was a mashup of our inspirations from Pete’s book and the subtitle of The Pragmatic Programmer (Journeyman to Master). To be honest, I still like Apprentice to Journeyman quite a bit, but a couple things happened (some painful) in March 2008 that convinced me we should change the title to Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman.
Obtiva grew a ton in 2007 and 2008, and madmimi.com launched in mid-2008, so my life got crazy busy. I started missing deadlines, a lot of deadlines. We were supposed to be finished by mid-2008. We didn’t actually finish until mid-2009. We did a huge push in December 2008, and that was basically the end of my work on the book. After that push, it turned out there was still more work to do, so I asked Ade to see the book through to publication, and if he could make it happen, we’d alter our royalty split from 75:25 to 50:50. Obviously, Ade got it done. He added a bunch of content and polish, and oversaw a ton of details that I would have missed. Along the way, I asked Ward Cunningham to write the foreword and I was surprised that he not only accepted, but wrote an excellent little story about him and Kent back in the old days to provide an introduction to the concept of an apprenticeship pattern.
And so, our little pattern language got printed. I hope you were able to learn something (or at least laughed a bit) from reading this story. More importantly, I hope that you have a look at the patterns and give a few of them a try. Let us know what happens!