Robert Martin wrote a post yesterday titled Multi-dimensional Seniority in which he suggests that for a journeyman programmer to continue making progress toward mastering his or her craft, he or she will likely need to make a practice of changing employers.
I have seen developers I respect do well with this. They’re off at their new jobs, learning and growing… Ah, learning and growing – this is an important one. Let’s note it as our first requirement:
Requirement #1: Keep Learning and Growing
I don’t want to stop growing, but I also don’t want to make a practice of changing employers regularly. I would like to put down roots with a company and stay there and grow.
We’ll note this requirement as:
Requirement #2: Stay With My Company
What things about fulfilling requirement #2 tend to weaken the fulfillment of requirement #1? I bet they’re things that a savvy organization could work to counter.
Example: One benefit of moving on that I’ve seen mentioned is that you continue to be exposed to new perspectives by working with different people. So, can a company find ways to expose its developers to new perspectives by working with different people so that they don’t have to leave the company to get that?
Interestingly to me, in the apprentice…journeyman…master system, an apprentice worked under the tutelage of one master craftsman (am I thinking correctly?), not many. What is different about software development that makes interaction with different people necessary to continue to improve one’s craft? What are the characteristics of such interaction that make it so helpful? (Daily face-to-face interactions in the office? Working on the same project together? Reading and commenting on articles written? Participating in a conference and speaking to the person afterward?) Or is it the change in corporate context that is helpful (so that if a company could somehow find a way to make major adjustments in its environment every so often, it might provide the developers that sense of working at a different company, while remaining at the same one)?
Tougher example: Can a company foster an environment where its developers get exposed to different technologies, development environments, languages, etc. so they don’t have to leave the company to do that?
This one is tougher because for efficiency’s sake a company tends to want to standardize on one set of technologies, not continually be dabbling in others, so it appears that developers’ continuing professional development and the company’s needs might naturally be at odds here…
I bet a willing, world-class company could make it a core competency to always be looking for ways to bridge that gap between loyalty and progress on the journey toward being a master craftsman.
Let me put that same thought a different way:
If a company desperately wanted to do whatever it needed to to keep their developers growing without having to leave the company, what would that company need to do?
Surely we’re not saying “There’s nothing such a company can do. Developers must always leave to grow”…are we?
What are some other difficulties that appear to be inherent in staying with one’s company while continuing to learn and grow?