jml's notebook
Cost of cruft
Our main product at work has grown quite a few features over the years, and from time to time we the engineers point to an unmaintained feature and ask, "can we kill it please?"
The answer to the question is almost always equivocal, partly because it's hard for us to quantify or even communicate the cost of maintaining a single feature.
Here, I just want to rattle off a few of the costs in my head:
- explaining it to new team members
- if it uses a particular technology that's not widely used elsewhere, maintaining that technology and training people in that technology
- it interacts with other features, making the product complexity roughly quadratic with number of features
- explaining why you aren't going to fix its bugs
- responding to production incidents involving it
- apologising to customer support for temporarily disabling it in order to prevent more widespread damage
- keeping the versions of libraries it uses up to date to prevent security issues
- compile time / test run time cost, paid with every single change to the app
- user confusion with a feature being present on one platform but not others
- keeping the visuals in line with the latest branding style guidelines
- localising it when expanding to new languages
- remembering to delete & report on the user data in the feature for GDPR compliance
- increased difficulty of making app-wide architectural changes
- updating the feature when the underlying platform deprecates an API you were relying on
A lot of these problems can be mitigated by having enough money, and spending that money on awesome platform and internal tools teams.
Most of these costs are small enough at the time of incurring the cost that one can never make a rational argument for deleting the feature, especially because deleting is never free, but always involves planning, comms, public relations, data export, etc.
I think it was Alex Gaynor who first told me that "subscription" is the only valid business model for software, because there's an ongoing cost of keeping it running (Apologies if I'm misrepresenting you, Alex). I kind of wish it were easier to quantify with features. I feel like we're okay at estimating how much effort it will take to build something, but not how much to maintain it. It would be great to have planning conversations like we we could say something like, "it will take five engineers three months to build this, and then another 0.5 FTE for ongoing costs".