← back

Maintainable software

Not all software needs to be maintainable: throwaway prototypes, temporary tools/scripts, proof of concepts, benchmarks, etc.

But if software is a product, which is continuously used by users, it will likely need fixes and improvements along the way. In other words, the software will need to be maintained.

What makes software maintainable? There are many competing ideas regarding this. But I have only one requirement: you have to understand the software. There cannot be stuff like "I think", "I guess", "it seems like". You have to understand what is happening and for what purpose.

When you understand the software, changes are boring: you know where the change goes, what it touches and how to verify it. When you don't, every change is a gamble, and you find out the odds in production.

This is also why the usual maintainability advice works only sometimes. Tests, types, docs, patterns, clean code - they help exactly as much as they help you understand the software. Applied without that goal, they are just more stuff to maintain.

← back