What is it?
Once you build a system, it is important to ensure that the system is up and running - keeping the lights on - adding new functionality, fixing bugs, keeping dependencies up to date, and overall keep the system running smooth. This is what is known as maintainability. Sounds pretty fluffy, right?
In software engineering they are related to the evolvability, modifiability, technical debt and code smells. There is even something called the maintainability index.
Maintainability of distributed systems
Apparently maintainability can be further divided into a few underlying aspects.
Operability
Ease with which we can ensure the system is smooth and operational running under normal circumstances.
Lucidity
This is more about the code and its simplicity and comprehensibility.
Modifiability
Ability to make changes easily to the system without having to learn too much about the system.
How do you measure it?
It is the probability that a service will restore its function within a specified time of fault occurrence.
In other words, it is Mean Time to Repair which we discussed earlier. This is (total time taken to repair a problem in the service) / total number of repairs.
The only real difference between reliability and maintainability is that the maintainability focusses on time to repair, whereas reliability is concerned about any fault/failure that could cause the system to go down.