One of the hallmarks of a software craftsman is the desire to improve and hone one’s abilities. Certainly, this is one of the reasons that I am attending Software Craftsmanship North America (SCNA) this year. As a leader in an engineering organization, however, I am also curious about how to grow an engineering organization that is focused on not only delivering value, but doing so in a way that values well-crafted software.
The population of people who are already craftsmen (outside of conferences such as this) is somewhat limited, so hiring solely craftsmen is not likely to be scalable. At the SCNA mixer last night, I heard two basic approaches to developing a team of craftsmen.
8th Light uses an apprenticeship model. 8th Light hires people in as an apprentice: there is a clear understanding that an apprentice is learning about the craft and how they work at 8th Light. There is a good ratio of craftsmen to apprentices and everyone is invested in teaching and learning. During the apprentice period, the apprentice may be unpaid or paid at below-market rates as they finish training/learning. (I’m sure this is done in a fair way and everyone gets value from the arrangement.) What was surprising to me was that not only do they hire in experienced developers (who have self-selected as being interested in improving/learning), but they hire people with aptitude but relatively little programming experience. Over the course of a year, these true apprentices grow into journeymen and craftsmen. It appears one successful model is to budget time and money into training up your own pipeline of craftsmen.
A second approach I heard about was through injection of a leader/manager who drove craftsmanship into the organization. I spoke with people at a financial services company and at a publishing company; in both cases, about a year ago, someone was brought in who drove the engineers in the direction of craftsmanship. Today, those teams practice TDD/BDD, watch Clean Coders videos to learn, and attend conferences like SCNA.
I hope over the next few days, and through continuing conversations afterwards, to get more insight into organizations that successfully balance the need for delivery with training its team to deliver high quality code, and what principles and tactics they use to transition to a high productivity state.
If you have any thoughts, please share them!