…It’s better than being a time waster.
I’m going to pull a number completely out of you-know-where and estimate that a full 20% of time in software companies is wasted on completing tasks to avoid the appearance of flakiness.
Product managers are pretty guilty of this, but they’re by no means the only offenders (and when product managers do this, it’s often because of a corporate culture that encourages it, such as bonuses being dependent on the % of your features that are completed and released.)
Here’s what happens:
- a need is identified – a new feature, a bug report, an inefficiency
- requirements are written and agreed upon
- work begins
— but then something happens.
Maybe further customer interviews reveal that the new feature isn’t really that valuable after all. Maybe watching your usage metrics shows that the bug – as much as it may irk you – is not affecting your customers’ use of the product. Maybe that improved database query really isn’t needed at current usage levels.
Whatever the reason, the conclusion should be clear: we should stop working on this.
But we don’t.
“We should just finish it – It’s bad for engineers’ morale to have a half-finished feature sitting around.” No — it’s worse for morale to have a fully-finished feature released but still just sitting around (and probably cluttering up the UI and generating more customer support costs.)
“We may as well do it now even though we don’t need it yet.” No — when you DO need it, it’s almost certain that your needs will have changed and this thing you built months ago will need more hacking to shape it into a still barely workable solution.
“We shouldn’t interrupt development ‘flow’ to start on something totally different.” No — ‘flow’ is not valuable by itself! There’s no sense in building the wrong thing fast.
These all boil down to: I thought this was important -> If I admit that it isn’t, I will lose credibility and look like a flake.
And don’t do the weaselly version, either, where you silently lower the priority on tasks and hope people will forget about them.
Make an announcement: “We are no longer working on X. Here’s why: we thought it was going to solve Problem Y, but [it actually won’t/problem Y isn’t actually much of a problem/it will, but problem Z came out of nowhere and we’ve got to tackle that.] I’m sorry that we already invested time in this, but I’d rather change course than have us waste more time on something that is not needed.”
I say, flake proudly. Don’t keep working on dumb stuff.