DDIA | Chapter 1 | Reliable, Scalable, And Maintainable Applications – Maintainability

so far we have seen Reliability and Scalability aspect of data systems, this post looks into maintainability.

It is well known that majority of cost of system is in its maintenance, eg, fixing bugs, adding new functionality and so on. Depending on the complexity of the system, maintenance could be easy or difficult. So we should strive to design and develop the system in a way that it minimizes system’s maintenance. For this, we should try to follow the following three principles – 

  1. Operability – Make it easy for operations teams to keep the system running smoothly. It means making routine tasks easy for operations team so they can focus on high value tasks. To make routine tasks easy, we could – 
    • Add good coverage of metrics and monitoring so operations team has good visibility into system.
    • integrate system with current tools and automate few tasks.
    • avoiding dependency on single machine.
    • provide good documentation.
    • provide good default behavior with freedom to the operations team to change as needed.
  2. Simplicity – Make it easy for new engineers to understand the system, by removing as much complexity as possible from the system. When a system is initially designed, it is simple, but with each new feature, if not designed and implemented properly, system’s complexity increases. We should use tools like abstraction to avoid implementing complex systems. Abstractions provide good facade to the underlying complex system, thereby making integration with system easy. eg – SQL is an abstraction that hides complex on-disk and in-memory data structures, concurrent requests from other clients, and inconsistencies after crashes.
  3. Evolvability – Make it easy for engineers to make changes to the system in the future, adapting it for unanticipated use cases as requirements change. A very well designed system would make sure the system is adaptable and can be changed easily for new requirements.

Thanks for stopping by! Hope this gives you a brief overview in to maintainability aspect of data systems. Eager to hear your thoughts and chat, please leave comments below and we can discuss.