November 8th, 2024

Ease of maintenance is a feature

The article stresses that ease of maintenance is vital in software development, advocating for sustainable design to ensure resilience against team changes and to minimize operational friction.

Read original articleLink Icon
Ease of maintenance is a feature

The article emphasizes the importance of ease of maintenance in software development, arguing that it should be considered a key feature alongside scalability and speed. The author, Ronak Gothi, outlines the typical steps involved in maintaining software, such as cloning the source code, setting up the codebase, making changes, and deploying updates. He suggests that if these processes take more than an hour, the software may be overly complex and difficult to manage. Gothi highlights the need for software to be resilient against various challenges, including changes in ownership, developer turnover, and potential financial crises that could affect the availability of original authors. He warns that high maintenance demands can create friction, especially in teams that may be downsized or lack the necessary expertise. Ultimately, the article advocates for building software that is sustainable and easy to maintain over the long term.

- Ease of maintenance is crucial in software development.

- Complex software can hinder quick updates and changes.

- Software should be designed to withstand changes in team structure and expertise.

- High maintenance demands can create operational friction.

- Building sustainable software is essential for long-term success.

Link Icon 13 comments
By @cglan - 13 days
Super true. One of the best tests of this is setting up a new laptop. Some of the best experiences are when you get a new laptop, and just clone the codebase and everything works as it did before, no special magic. Golang with vendored dependencies seems to be wonderful for this but I've had relatively decent experiences with newer java projects.

My worst experiences universally have always been python projects. I don't think I've had a single time where I cloned a python project and had it just work.

Beyond just the code, I've had lots of mixed experiences with CI/CD being smooth. I unfortunately don't think I've been in a single shop where deployments or ci have been a good experience. They often feel very fragile and undocumented and hard for newcomers.

By @uludag - 13 days
I was reflecting on this article, thinking about what software tools and languages I use that reflect this property, and a weird realization came to mind: Emacs lisp is by far the best language I use in this regard. I literally copy-pasted 20+ year code, eval it, and every time it just works. Then if I want to debug it: C-u C-M-x, and I'm instantly stepping through the code.

Something this old shouldn't have this property. Nothing "modern" even comes close. Look at the top languages, Python, JavaScript, and Java, and you don't even have to consider too much how abysmal these languages are in this regards.

By @sethammons - 13 days
As a principal software engineer, my life is moving larger orgs closer to this model. I have lived it when it works. It is critical to so many things. I feel like Plato's Cave when I couple this stuff with structured logs, metrics, dashboards, and alerts. So many shops don't understand that this stuff gives you wings.
By @aaronblohowiak - 13 days
I like this. Couple things to add:

Fast setup and revision are important but incomplete list of maintenance tasks; are metrics/logs predictably named and accessed? Can you perform manual experimentation without hard-to-configure client (ir: hit the server with a browser or run a cli)?

Also, "cycle time" or "revision time" are soo important, but I havent found a good way to do that with AI model development :( any tips here?

By @anonyfox - 13 days
Nowadays i come to my conclusion that "ease of maintenance" is the most important feature to have in a project. More critical is only that the project in itself is valuable enough, so many engineers optimize things that shouldn't exist in the first place.

Easy to maintain is not only about keeping something alive with minimal effort over longer periods of time. It also plays a pivotal role for scalability in any direction. Adding more engineers/teams, adding more unforseeable features, iterating quickly in general, surviving more traffic/load, removing technical bottlenecks, ... everything is so much easier when the project is easy to work with and maintainable.

By @chanux - 13 days
Cannot be overstated! I've spent countless hours trying to understand systems built by others (dozens of others of various skill levels) to try and bring the code to a more maintainable posture. Sometimes it feels like a thankless job but it's a rather selfish endeavor because first and foremost, I want to save my future self from suffering.
By @stevepike - 13 days
I think the kind of application here matters a lot, specifically whether you're trying to make a change to a web app or if you're hacking on library code.

In ruby, for example, I can pretty trivially clone any open source gem and run the specs in < 5 minutes. Patching something and opening a PR in under an hour is definitely standard.

On the other hand, getting a development environment running for a company's proprietary web app is often a hassle. Mostly though this isn't because of the language or dependencies, it's because of:

  - Getting all the dependent services up and running (postgres version X, redis Y, whatever else) with appropriate seed data. 
  - Getting access to development secrets
My company (infield.ai) upgrades legacy apps, so we deal with setting up a lot of these. We run them in individual siloed remote developer environments using devcontainers. It works OK once we've configured the service containers.
By @afiodorov - 13 days
More software is written than kept. It's harder to write useful software than to configure CI/CD. The latter is a problem that has been solved before, whilst chances of any software codebase being useful enough that it is even worth maintaining are very low.
By @godshatter - 13 days
Based on the subject I thought this would go in a different direction: document well, take the simple approach where possible instead of the most clever one, modularize well, etc.
By @megamix - 13 days
This is so important. It's the most practical and future-proof way forward.
By @braza - 13 days
For the folks that wants a structured reference around maintenance, this book [1] it's one of the best of the topic.

[1] - The Innovation Delusion: How Our Obsession with the New Has Disrupted the Work That Matters Most - https://a.co/d/eInjwZD