And whatsoever you do, do it heartily, as to the Lord, and not unto men (Colossians 3:23)
I believe that we developers should strive to be replaceable.
What is a “replaceable developer,” in my opinion? One that:
- puts team cohesion and goals over own goals
- continuously hands over knowledge to his team (organically)
- continuously learns from their peers (through code reviews, discussions, pair coding, etc.)
- helps colleagues grow towards becoming replaceable developers (for example, through feedback and guidance)
Consequently, a “replaceable developer” continuously increases the team’s bus factor, avoiding “knowledge silos.”
And from an individual contributor’s point of view, a replaceable developer:
- writes clean code
- ensure his code has high code coverage and high scenario coverage in test automation
- writes minimal, essential documentation when needed
Points a-c are necessary for any sane developer, for their own sake, not only their team’s.
Thus a replaceable developer brings high value to any team and company. If a “replaceable developer” is sick, takes a sabbatical, or leaves the company, there would be no delivery problem for the team. Consequently, everyone should want and keep “replaceable developers” in their group.
I am aware that agile methodologies are supposed to ensure by design that “nobody on the team is indispensable.” And the desire to be replaceable fits very well within the agile mindset. However, replaceability is more than applying a methodology; it is a working principle.
Becoming a replaceable developer takes time, effort, perseverance, and a healthy work environment. And I believe it is worth it!
Thanks to Liviu, Ghennadi, and Paul for reading drafts of this.