(This is the second in a series of Software Engineering Maxims Which May or May Not Be True, developed over the last few years of working at Google. Your mileage may vary. Use only as directed. Past performance is not a predictor of future results. Etc.)
By far the best way to improve engineering productivity is to have people working on something which they are genuinely enthused about. It is beneficial in many ways:
- the quality of the product will benefit from the care and attention
- people don’t let themselves get blocked by something else when they are eager to see the end result
- they’ll come up with ways to make the product even better, by way of their own resourcefulness
- people are simply happier, which has numerous benefits in morale and working environment.
There are usually way more tasks on the project wish list than can realistically be delivered. Some of those tasks will be more important than others, but it is rarely the case that there is a strict priority order in the task list. More often we have broad buckets of tasks:
- crucial, can’t have the product without it
- nice to have
- won’t do yet: too much crazy, or get to it eventually, or something
The crucial tasks have to be done, even the ones which no-one particularly wants to do.
In my mind, when selecting from the (lengthy) list of nice-to-have tasks, the enthusiasm of the engineering team should be a factor in the choices. The team will deliver more if they can work on things they are genuinely interested in doing.