DEV Community

Cover image for System Design : Maintainability
DevByJESUS
DevByJESUS

Posted on

System Design : Maintainability

Hello πŸ˜„
Today we are going to present an important concepts in system design which is Maintainability . It is a small introduction we will go deeper in others posts.

What is Maintainability ?

There is not a single definition but in the context of system design , a system is maintainable when maintainance operations are done with no pain . Saying that you can ask to me but how to build a system and keep in mind maintainability ? There is three core concepts Operability , Simplicity , Evolvability.

So How to achieve these three concepts ? πŸ˜₯

1. Operability

β€œTHE MOST AMAZING ABSTRACTIONS, CLEANEST CODE, OR BEAUTIFUL ALGORITHMS ARE MEANINGLESS IF YOUR CODE DOESN’T RUN WELL ON PRODUCTION.”

DAVID COPELAND

Here it is about operate on unplanned interventions , for example when there is a problem in our system , ho much time does it take us to make the system running normally ?
this is why we talk about minimizing time and effort when there is a bugs or error in the system . if this time decrease every time our system become more operable .

Clearly said:

A highly operable software system is one that minimizes the time and effort needed for unplanned interventions (whether manual or automated) in order to keep the system running; similarly, a software system with good operability will make diagnosis and anticipation of errors straightforward.

2. Simplicity

Make a system simple , it is one of the hardest thing possible because make something simple is much harder than making it difficult. So The simplicity is important for the maintainability because it aims to push us doing things not only for us but also for the others persons that will integrate and work on our system . Google or Facebook are here for many years now how have they make their system simple to understand for the newest person that will work with them . The response is Abstraction , it is the tool that breaks large system in small components.

look what M. Kleppmann says

One of the best tools we have for removing accidental complexity is abstraction. A good abstraction can hide a great deal of implementation detail behind a clean,
simple-to-understand façade. A good abstraction can also be used for a wide range of different applications. Not only is this reuse more efficient than re-implementing a similar thing multiple times, but it also leads to higher-quality software, as quality improvements in the abstracted component benefit all applications that use it.

3. Evolvability

This simply means making change easy , and we know how much it is important in a system . Evolvability is highly link to Simplicity more a system is simple more we can modify it as simple as that . In the agile community to make a software evolve there is the so called TDD . But what are the tools to helps us achieve evolvability at the Data System Level ? πŸ˜‰ stay tuned we will respond to that question.

Thanks for Reading 😊
If you want to talk to me , email me at devbyjesus@gmail.com
See you next time by the grace of JESUS.

Top comments (0)