The Apprentice

I am busy reading Software Craftmanship by Pete McBreen. The book introduces some very interesting concepts which differ from the concepts we are used to in normal software development.One of the main concepts of software craftmanship is the concept of apprenticeship. In craftmanship, like traditional blacksmiths, you would have a very experienced master who would transfer his knowledge to an apprentice. This apprentice will then learn by doing some basic tasks at first, and in working with the master, will be entrusted to doing more advanced tasks. This is in contrast to how we deliver developers in these modern times. Software developers would come out of university and would then be thrown into the deep end and left to fend for themselves.

I had an experience this week which indicated to me exactly how well the craftmanship idea could work with software development. At the moment we are working on a very large and complicated system. On Friday, we divided up into teams of two. Each team was expected to write a vertical slice of part of the system. I was paired with a much more experienced developer than myself. We were working together on only one machine and we discussed just about everything we did. This greatly increased my understanding of previous ‘dark’ parts of the system. I also learnt a few new tricks and also understand some of the technologies we are using much better now. And I am sure that the other more experienced developer also learnt some new things, even if it is only the different perspective I had on some of the topics.

I would really recommend this to any team. It might seam to be a waste of time, but I assure you that this exercise have possibly saved me a lot of headache that I would have had in the following weeks and in doing so, also saved me a lot of hours, if not days. I would also say that where I could previously only work on certain parts of the system, I am now competent to work and contribute to the whole system.

I think that this concept of apprenticeship could be very useful when new developers start working on a system or team. It does not only help them to understand the system better, but also helps them to be productive much quicker than usual. It also helps your team to understand each other better, increases communication between team members, and helps the team to function as a whole.

Software Craftmanship is a very good read and I would recommend you make some time, it might just change the way you think of software development.