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 known as maintainability.

In software engineering this is related to the evolvability, modifiability, technical debt and code smells. There is also a metric called the maintainability index. In certain contexts, maintainability is referred to as Serviceability. This is slightly different from thinking of maintainability of a codebase.

Serviceability is the simplicity and speed with which a system can be repaired. But maintainability on the other hand is how quickly and easily one can keep modifying and operating the system.

Maintainability of distributed systems

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?

There is no single metric that can accurately capture the notion of maintainability of an application.

When it comes to serviceability, the best way to measure it is Mean Time to Repair which we discussed earlier. This is the (total time taken to repair a problem in the service) / total number of repairs.

The only real difference between reliability and serviceability is that the serviceability focusses on time to repair, whereas reliability is concerned about any fault/failure that could cause the system to go down.