Vivek Haldar

Shitty legacy maintenance

Software engineers often complain that they are stuck doing shitty legacy maintenance work. This is one of the major naive beliefs of new engineers. It is interesting to look at what exactly “legacy maintenance” consists of, why it is considered “shitty”, and by whom, and then, what kind of work is not legacy maintenance.

The work of engineers

Start by asking yourself what you signed up for when you said you wanted to become an engineer, of software or any other kind.

Engineers are supposed to build real-world solutions to real-world problems within externally specified time and financial constraints.

This often means using stable, established technologies. Mature engineers understand that they have a limited risk budget. Almost always, that risk budget gets used up by uncertainties in time and money, which leaves little or no risk to be spent trying out cool and new, but unproved, technologies.

Out of time, money and experimenting with cool new stuff, they get to choose any two. This is why when a project that wants to push the envelope of the underlying technologies themselves, that is made (or at least, should be) explicit at the outset, and they are given a lot of slack with either money or time.


The narrative of technology is told in terms of invention and innovation. But if you look closer, innovation is made up of a thousand small, incremental steps on existing technologies.

Others have argued that looking at the history of technology through a use-based rather than innovation-based narrative paints a more accurate portrait of how prevalent and significant old technologies are, and what a central role maintenance plays. Things would simply fall apart if they were not maintained.

New Stuff, Interesting Stuff

Unfortunately, the dominant narrative of the progress of technology is the chronocentric one centered on innovation. That’s not a big surprise, because news needs to be, well, new. Everything reported in the tech news is significant and useful to a vanishingly small fraction of the population. The overwhelming majority uses boring, old, mature, dependable technologies.

The side-effect of this is that engineering graduates come into the job market with an expectation of always working on shiny, new, cutting-edge, greenfield projects. And then they’re dejected when that expectation is not met by the real world. There is simply not that much new stuff to go around.

But it is a mistake to think that working on an existing system, or maintaining it, is a crappy job. For a fresh grad, it might actually be a good thing. It is a gentle ramp up. It gives them a chance to observe the operation of a real system. If they take it upon themselves to dig deeper and learn about it and see why it was built the way it was built (as opposed to complaining about it), they can learn some valuable lessons. And if what they learn truly does not make sense, they’ve just found an opportunity for improving things!