Apprenticeship

The way to learn a craft

Rob Drimmie
Rob’s Dream Company
3 min readAug 27, 2013

--

I believe that software development is a craft. I believe the proper way to learn a craft is by practicing, with guidance provided by an experienced practitioner.

At Rob’s Dream Company, new employees are partnered with an experienced practitioner. Always. An apparent assumption here is that any new employees are also new developers, but that is not always the case. In the case of an experienced developer, they too would begin as an apprentice, with the expectation that it is a much shorter cycle until they are training others.

Being an apprentice is not a negative thing. Someone with extensive Javascript knowledge may be apprenticed to a database developer, or Objective-C developer, for some period of time. One of my favourite things to do is to talk with someone who is amazing at what they do, and I do feel it’s the best way to learn.

In theory, I am a fan of Paired Programming, though in practice I am not very good at it, nor can I put up with it for a very long period of time. In any pairing, the style of working would be something that is worked out between the two. My expectation is that most would pair occasionally, while working through a challenging problem or while helping a partner understand a concept or section of an application.

If a pair were to want to Pair Program constantly, that would be great. If they didn’t ever want to sit at the same keyboard, that would… well, it would not be great. I don’t feel it’s possible to learn without watching other people, but it’s not something that would need to occur with high frequency. As the need arises would be great.

The ideal here is a power of two system. I start off taking an apprentice. At some point, the apprentice can work with greater independence and take on an apprentice of their own, freeing me up to take an apprentice. And grow, and grow, and grow as time, finances and abilities permit.

There is an implicit assumption in this system that the people hired will be good partners for new developers. This is not always the case, but that’s okay. By the time a developer is ready to take on an apprentice they will be well on their way to becoming a great developer in their own right and in all likelihood be very employable.

There is no expectation that an employee of Rob’s Dream Company is always an employee of Rob’s Dream Company. People will leave for any number of reasons. The ideal is that they are leaving to create their own thing, which is an easter egg definition of “Rob’s Dream Company” in that I am facilitating others’ dreams — so long as they mirror my own, of creating a software development company.

There’s an explicit mechanism for this, to be discussed later.

Some will leave because they do not want to be developers. My hope is that their talents and interests will lend themselves to non-development roles in the organization, but my expectation is that will not occur in most cases.

Unfortunately, identifying The Mindset is extremely far from a reproducible or even remotely scientific process. Some, as a result of my errors in this process, will leave when we discover they cannot be great developers.

Some will leave because they are hired away. I’m quite excited by this notion, for a great many reasons. One, it will be evidence that I am right, that these people without previous opportunity are great developers, and are recognizable as such by people outside of Rob’s Dream Company. Two, it will be helping to solve the talent problem. Three, these people will to some degree or another be indoctrinated into my way of thinking. They will be advocates for creating opportunities for others to become great programmers. Crassly, having disciples infecting the world with my way of thinking on any particular topic is quite attractive.

He said, fingers touching tip-to-tip, laughing.

Some will leave because they cannot work with apprentices. That’s unfortunate, but helping people learn is of fundamental importance here. Some will leave because they cannot be an apprentice within our structure.

Most, I hope, will stay. They will have their learning experience fresh in mind, and will still be on their way to great programmer status while helping others along the way. “The best way to learn is to teach”, said Oppenheimer and I am strongly in agreement.

--

--

Rob Drimmie
Rob’s Dream Company

I am lucky. I have an amazing wife and two awesome kids. I get to ride my bike almost every single day and could play my guitar almost as often, but don’t.