On software maintenance and maintainability
Maintenance in the software world has long been a controversial subject. So I wanted to write a small piece on it. Those who work with me know that I am a big fan of analogies, so bear with me.
Maintenance
Everything in life needs maintenance, let's name a few things:
- Your car
- Your house
- Your health - both physical and mental
- Your marriage - yes that needs maintenance too ;)
- Your other relationships - friends, professional network
- Your career - once in while
In the list above I purposely named a few tangible and also intangible concepts. Maintenance on a car and house are quite obvious. Maintenance on the other parts may not be as obvious, but we do know and understand that it is necessary. At least I do believe most people do.
Sometimes the statement is made: "Software rots". Now that is not in the sense as if software is rotting like wood or rusting like iron. But software can be less prepared for the future if left untouched. Similarly software left untouched can have big security consequences as the world around it evolves.
Not touching software is not always a bad thing. A temporary solution that stays around for 6 to 12 months might never need any attention after the first deployment. However you know what they say about those: "Nothing is as permanent as a temporary solution".
Maintainability
Now that we have maintenance out of the way let's look at maintainability. Say you have a car; a lot of people do. And as we established earlier, your car needs maintenance. If we look at what kind of maintenance, you could think of changing your tires, replacing oil and even more simple: providing it with fuel.
Now your car has an easy way to perform the simple task of adding fuel to your car. You drive to the gas station, you remove the fuel cap and you can add the fuel. Afterwards you put the cap back on and drive away.
But what if you would not have this nifty fuel cap? What if your fuel tank is only connected to the engine and still embedded deep inside your car? And every time you need to add fuel you would need to extract the fuel tank from your car to add fuel to it? Your car would be far less useful to you. I would really need to think how to do it.
It is similar, if not as obvious, in software maintainability. Software tends to need change over time. Maintainability in software involves being able to adapt to the changing environment and requirements. What works fine today might not be as useful tomorrow. Software that is not maintainable is very hard or time consuming to change. So the cost of change is very high.
Therefore it is quite important for software to be maintainable. There are several ways to arrange this. That, however, is a subject for another time.
To see past events: https://www.youtube.com/SogetiNLJava
Link to the meetup! https://www.meetup.com/sogeti-java-community-meetup/events/278139618/