Multi-dimensional Seniority
Posted by Uncle Bob on 01/20/2009
I was at a meeting of the Chicago Software Craftsmanship group last night. Dave Hoover and Paul Pagel were talking about the different apprenticeship models at Obtiva and 8thLight.
The 8thLight model uses a 90 day probation period during which an “apprentice” has an appointed mentor who guides the apprentice to learn enough to become a “craftsman”.
The Obtiva model is less structured, but there’s no probationary period. Once an apprentice had delivered something meaningful for a client, and had been recognized by the others, he/she would become a “consultant”, and eventually a “senior consultant”
Both speakers used the term “journeyman” but neither defined it. Both speakers agreed that 90 days, or a year, or even two years was insufficient for an apprentice to become a true journeyman.
After the talk I started to ponder this question of seniority. What makes a software developer senior? Certainly the amount of time spent in a career is a big factor. Someone with 15 years of experience is certainly senior.
However, there’s that old joke about the guy who had 15 years of experience, the same year fifteen times in a row. That’s a real concern. It is perfectly possible to work for 15 years and dig yourself into a rut you can’t get out of. Think of all those Cobol programmers who never learned anything else.
Both Paul and Dave talked about how they planned for their apprentices to grow with the company. They both lamented apprentices that had left the company to do other things.
This made me think about the apprentices we’ve had at Object Mentor. (Paul was one of them. Dave was almost another.) Over the years we’ve had seven or so apprentices. Today, we have none. Not a single apprentice has stayed at Object Mentor. Is this bad?
It hasn’t been bad for the apprentices. Two went on to form their own company (8thLight). Others have made names for themselves in the community. More than one has written a book. Nearly all are passionate craftsmen who care about their profession, and who are making an impact.
It wasn’t bad for Object Mentor either. The apprentices moved on when it was a good time for them to move on, and we have kept good relationships with them. More than one customer has come our way because of referrals from past apprentices.
So at the end of the meeting, when everyone had milled away from the central area, I went to the whiteboard and scratched out a simple diagram. It was an graph with Seniority on the horizontal axis, and Journey on the vertical axis.
Then I drew a nearly horizontal line starting from the origin and hugging the Seniority axis. This is the career path of the guy who has the same year of experience 15 times in a row. Let’s call him Sam. Then I drew another line which was a stair-step that went towards the upper right at something less then a 45 degree angle. This is the career path of a developer who changes jobs a few times during his/her career. Let’s call her Jasmine.
I don’t think there is a vertical path. The only way to go on a journey is to spend some time at it, and that drives you horizontally.
OK, now maybe I’ve just spent a dozen paragraphs explaining the obvious. To-wit: A journeyman is a journeyman because he/she’s gone on a journey. Does that journey have to involve changing employers? I think it probably does. You see, there’s a problem.
The student/teacher relationship is persistent. At least in my experience it is. The only way for a teacher and student to ever consider themselves to be peers is for the relationship to break and then reform later in a new context.
Sam, has remained an apprentice, even though he’s got lots of experience. Why? Because he still works with his original mentors who consider him to be their student. Jasmine, on the other hand, has seen the world, experienced many different situations in many different places. She could become a master.
OK, ok. I’m belaboring the point. So let me conclude. If you are considering an apprenticeship program it seems to me that the most important aspect of that program is that the relationship is temporary, and results in a journey. In other words, don’t expect to hold on to your apprentices for very long.
Comments
JMiller 31 minutes later:
“Does that journey have to involve changing employers? I think it probably does.”
I disagree on that specific point. Given a large enough employer, you do not have to leave your employer to break the teacher/student relationship—you just have to leave your teacher. Consider: How many different groups are doing software development that a developer could switch between at any of Microsoft, Google, Yahoo, SAP, etc? While sticking with one larger employer may (too many variables to conclude) reduce learning opportunities, it also reduces the opportunity cost of pursuing new experience.
Other than that, the conclusion seems accurate enough to me.
Corey Haines about 2 hours later:
While I think that there are certain companies large enough to be suitable for intra-company journeyman tours, I don’t think the majority of larger companies support nor encourage the idea.
Personally, what I’m finding, both in my own experiences and in talking to others, is that a strict ‘changing of teachers’ isn’t enough. In fact, I’m starting to think that the standard ‘change jobs every few years’ or the ‘change teacher every so often’ is an important step towards the end of apprenticeship.
Having several teachers through your apprenticeship allows you to build up a rudimentary foundation of principles and techniques that form the basis for your move into journeyman phase.
There are some related ideas in a post I wrote not too long ago:http://programmingtour.blogspot.com/2008/12/on-being-apprentice.html
Rebecca Wirfs-Brock about 2 hours later:
To me, moving around in the same company is roughly equivalent to changing employers, especially if the company is big enough…and I did several job shifts in my 13 years at Tektronix…I, however, was someone who always liked to finish the first something (product or whatever) then move on to the next experience. Not everyone did like that change. Apprenticeship is much harder when you are in longterm maintenance mode.
Michael Feathers about 3 hours later:
Reminds me of this: http://c2.com/cgi/wiki?JazzProgrammer
Re stickiness. I don’t think that teacher/student roles have to be sticky, I’ve seen a number of cases of people joining teams as newbies, gaining technical skill and then eventually leading. Usually, it happens in rather dynamic companies.
I wonder.. is there a chance that stickiness be accentuated by having a designated apprentice role? And if that’s the case, is it something worth getting over or is it better to just accept it? I think it’s an important open question.
Paul about 9 hours later:
Interesting article. I started my career as a mechanical apprentice in the UK. It was pretty much expected that you move on 6-12months after finishing your apprenticeship. You were being trained for the industry. Companies didn’t lose the talent, they gave it to the industry and as such were entitled to take some back. If you were really good, then after you’d cut your teeth for a few years you might get approached to come back to your original company (or just apply for a position), at which point you’d lost the mantle of apprentice (and the one being sent to stores for left handed nails or a long weight!)
Kevin Taylor about 16 hours later:
Great post.
You’ve illustrated in your graph what we (as developers) all realize after a few years in the industry: seniority isn’t a sufficient condition for attainment of journeyman or master level competence.
Regarding apprentices and journeys (promotion to journeyman), specifically with Obtiva, we’ve had 1 apprentice leave in the middle of his apprenticeship (about 10 months into it). We’ve had two others graduate out of apprenticeship and decide our environment still serves their needs.
Ultimately, though, whether an apprenticeship period lasts for a very structured 3 months at 8thLight or a less structured 12-18 months at Obtiva, those are both such short periods of time in a software career. There is still much to learn and by keeping the focus on learning and then giving back, there is less immediate onus for non-apprentices to leave for professional development reasons.
The problem of staleness arises when the team and/or environment is not sufficiently dynamic, the opportunity to “be the worst” is no longer present, and what earlier might have been interesting challenges to overcome have become rote implementations.
Now, the question for all of us is, how do craftsmanship-oriented companies support journeyman tours in a way that doesn’t make it feel like a loss to one party and a gain to another? I.e. how can it be a win-win for both the individual companies and the journeymen?
(Thanks go to Corey Haines for jump starting the conversation on journeyman tours with his recent pair programming tour.)
Daniel Meyer about 20 hours later:
I don’t think the forever-an-apprentice problem is unavoidable. I’m almost to four years with my current employer and I feel I have been able to continue to gain trust and responsibility during my time here—there are still ways I can grow here that I haven’t gotten to yet (though it could be I’m just a slow grower!)
I do think Uncle Bob brings up an important issue: in many ways it’s easier to continue growing by changing companies. But what about a person like me who wants to grow, but also wants to stay with my company—besides the forever-an-apprentice issue, what other blockers are there to this goal? I elaborate on this question in How do you stay AND grow?.
If a company desperately wanted to do whatever they needed to to keep their developers growing without having to leave the company, what would that company need to do?
Mike Hadlow 5 days later:
I’m in agreement with Uncle Bob here. I started my software career working for two years at a small consultancy company. They hired me out to various clients for typically a few month at a time. It was a steep and demanding learning curve, and I learnt a huge amount about commercial software development.
My next job was working for a huge multinational financial company. It turned out to be a very different experience. I was expected to maintain existing systems, doing the same mind-numbing checks on statuses and file transfers day in, day out. I was told that in a few years I would be promoted to senior developer and given more interesting work, but I couldn’t wait and left after five months.
Since then I’ve worked as a freelancer, sometimes working with a single client for a year or more, sometimes just for a month or so. Being able to see how software is written in such a wide variety of environments gives a unique insight into the range of practices out there.
A common observation I’ve made is that, of the permanent staff in my client’s development teams, the ‘lifers’ are often the least willing to try new practices and the least productive. I would encourage any young developer to get out there and see what the world has to offer. Staying with a single company for your entire career can give you blinkers.
an outside opinion about 1 month later:
I think Corey Haines has hit the nail on the head:
1) Pick a line of work
2) Wake up one morning and call yourself a crasftman in that line of work
3) Don’t proceed quietly, honing your craft every day to the satisfaction of what you claim to truly be interested in, rather (see #3)
3) Begin travelling around and meeting with others who want to hear you pontificate. Once they have been in your presence, call them crafstmen too. (It gets better, see #4)
4) Pontificate to everyone by blogging about the pontificating you’ve done with the person you just crowned as craftsman.
Brilliant!
The best thing is this… let’s start doing this in other areas of science/business/arts/technology.
Maybe for Doctors? Carpenters? Architects? Firemen? Astronauts?
Maybe people in all of these fields do not really need to contribute other than by travelling to other people’s houses, pontificating, then granting them the title of crafstman as well.
Awesome… I am healed and enlightened by Corey Haines.
Adam Lowe 2 months later:
re: an outside opinion
Wow posting hyper critical remarks anonymously. Always a super awesome toolbag move.
re: the post
I think this the apprenticeship model is very interesting and one lost in our business these days. Many employers talk about wanting “the best talent” and want them to be loyal but few are willing to help develop talent or even give their employees time/resources to develop talent beyond access to a web based training module or two. I have seen a few clients/friends’ companies that have seen great benefit from intern models for bringing on new talent and see a lot of potential for success with a more focused true apprenticeship program. Quality and passion for one’s craft seem to be ever scarcer these days and I believe that having true craftsmen taking on apprentices is definitely one solid way to start addressing the problem.
Hid Kit about 1 year later:
I’m in agreement with Uncle Bob here. I started my software career working for two years at a small consultancy company. They hired me out to various clients for typically a few month at a time. It was a steep and demanding learning curve, and I learnt a huge amount about commercial software development.
My next job was working for a huge multinational financial company. It turned out to be a very different experience. I was expected to maintain existing systems, doing the same mind-numbing checks on statuses and file transfers day in, day out. I was told that in a few years I would be promoted to senior developer and given more interesting work, but I couldn’t wait and left after five months.
Since then I’ve worked as a freelancer, sometimes working with a single client for a year or more, sometimes just for a month or so. Being able to see how software is written in such a wide variety of environments gives a unique insight into the range of practices out there.
A common observation I’ve made is that, of the permanent staff in my client’s development teams, the ‘lifers’ are often the least willing to try new practices and the least productive. I would encourage any young developer to get out there and see what the world has to offer. Staying with a single company for your entire career can give you blinkers.
BTscene torrents about 1 year later:
I started my software career working for two years at a small consultancy company. They hired me out to various clients for typically a few month at a time. It was a steep and demanding learning curve, and I learnt a huge amount about commercial software development.
Movies torrents about 1 year later:
If you are considering an apprenticeship program it seems to me that the most important aspect of that program is that the relationship is temporary, and results in a journey. In other words, don’t expect to hold on to your apprentices for very long.