Software developers are always learning new languages, frameworks, techniques and practices, and they are always getting better at those they have already started to learn. Such continual growth is made possible, as well as necessary, by the unremitting pace of growth in the field. In essence, there is no such thing as staying in the same place for very long – if you are not growing, then you are falling behind.
This idea of continual growth may at first sound like an empty platitude, but it actually leads directly to a number of critical insights.
First, it further explains why Software Developers are not Interchangeable.
Second, it provides an avenue for developers to pursue mastery, one of the three essential elements for developer engagement. (if you have a developer who is not growing, but is simply doing the same things they have been doing for some time, and doing them at the same level, then that is a problem that needs to be corrected, for this invariably means that such a developer has disengaged from his or her craft.)
Third, if we accept the Dreyfus Model of Skill Acquisition, this idea helps us understand why developers at different levels have completely different needs and tolerances for prescriptive organizational rules. For more on this topic, see the Pagan Tuna post, “The Dreyfus Model of Skill Acquisition.”
Fourth, and perhaps most profoundly, the implication for an organization is that the purpose of each new work assignment is not just to get the work done, but to help the assigned developers further their growth. In essence, this means that, for each development project, you have two goals to think about: a new or improved piece of software, and an improved set of software developers.
In order to ensure that developers are growing, it’s important for leadership to allow them adequate time to explore, learn and try new things, which means finding an appropriate balance between short-term productivity and longer terms goals of organizational growth. In general, it’s reasonable to expect that developers will spend 5 - 20% of their time – day after day, week after week – in some form of learning not directly required by their immediate job assignments.
Another important element of developer growth is to form teams with diverse skill sets and levels of expertise, so that developers can learn from one another as part of their work assignments.