System Design 1O1: System Maintainability
What is system maintainability and why it’s crucial?
None of us is perfect, we evolve, adapt, and improve; the same goes with our software systems. No matter how meticulously they’re designed and built, they’ll never be perfect. This is why you keep getting regular updates for your favorite app. This is why well-established software companies keep hiring engineers. This is why the software industry pays you.
We can never make perfect software systems but what we can do, and we should do, is to design and build software systems in a way that allows them to evolve, adapt, and improve over-time. In short, we should design and build maintainable systems.
System Maintainability — The ability of a software system to evolve and maintain itself with changing technologies, engineers, customers, and the market.
How to measure system maintainability?
If you go by the above definition closely, you’ll quickly realize that any software system you know of can be evolved, can be updated and improved. But, how can one measure the maintainability? When can one say a software system is more maintainable than the other system? What defines high maintainability?
High maintainability — Ability of a software system to not just evolve, but to evolve fast and with minimal cost and efforts.
In contrast, a software system low on maintainability evolves, but with a higher cost, time, and efforts.
How to design and build highly maintainable software systems?
Building a highly maintainable software system is closely linked with its simplicity and operability.
As the size of the software system grows, its complexity grows as well, both at a high level and at a low level. At a high level, the system architecture becomes more complex, and at a low level, the codebase grows, increasing its complexity. If these complexities are not handled well, it will not take long for a software system to turn into a big pile of mess, hindering the overall maintainability.
Avoiding un-necessary complexities and managing them well allows for much simpler system design and implementation overall. This in turn allows for engineers to quickly and easily implement changes in the system. It also allows new engineers to onboard quickly and easily. In short, it makes everyone’s lives easy. Thus, striving for simplicity is paramount to achieve high system maintainability.
Operability in software development involves the automation of routine tasks required to ensure smooth and expected operation of the system. Tasks such as deploying the required infrastructure, configuring it, testing the system before deployment, monitoring the deployed system, etc. count as routine tasks. Automation of these tasks enables developers to build, test, and release software faster and more reliably. Thus, good operability ensures high maintainability of the overall software system.
Managing complexities well and ensuring good operability are, to a great extent, enough to ensure high maintainability in today’s software systems. There sure can be other factors, but these two will always impact maintainability the most.
That’s it for today. This was a high-level overview of system maintainability; it’s vast enough to have books published on it. I hope you got to learn something new in this article.
Liked this article? leave a clap, and let me know your thoughts, queries, or suggestions in the comments section below.