Imagine this: You’re the manager of a development team and you normally give your developers a fair amount of autonomy. There’s a shared backlog of tasks and developers are free to select whatever they like. Your expectation is that they’ll work on a mix of bugs, features, and general product quality improvements – but you’ve noticed some of your mid-level developers are exclusively working on new features, and never on bug fixes or improving quality of existing features.
Quietly chatting it over with one of your most senior developers, the pair of you quickly realise they’re trying to maximize their visibility in the hope of making the threshold for promotion.
Promotion Driven Development is when a developer works on the things that will get them promoted, rather than on the things the product (or the product group) needs.
The most obvious example of this is when someone exclusively works on new product features. It can also show up as someone who always spends their time working directly with important customers already using the product instead of the wider market of potential customers.
The problem here is a mismatch between the needs of the product group and the way that promotions are managed.
If your senior executives need to sign off on promotions, developers will be incentivised to work on projects that have visibility at that level.
If promotion requires delivery of new customer facing features, don’t be surprised when other factors, such as product reliability, ease of testing, developer productivity, build performance and so on are ignored (or left to juniors who have no choice).
Turning the problem around can be an effective way to gauge what’s going on.
If one of your developers wanted to introduce a change that would reduce the number of code defects by 50%, would they be rewarded? What if they could improve the reliability of your integration tests by addressing the causes of flaky tests? Who gets rewarded – the developer who spearheaded a new feature, worked on it for six months and moved their attention somewhere else, or the developer who picked up that new feature and spent six months making it reliable, performant and super easy to use?