
‘Maintainability’ quality attribute of any software system is an important design quality which is often ignored by architects. It plays an important role especially when a system is built using open source technologies.
I want to share my recent experience of how I have arrived at a design solution by keeping ‘Maintainability’ architecture quality attribute as prime focus.
I cannot share details of the system so I tried to generalise the context and depict solution options in the form of diagrams.
Quick Context:
System is built on open source technologies and is already live.
A major enhancement is required to be developed. After RnD and several rounds of evaluations we found that a tool exists in community edition form which could be used for our requirement. Now, we have two independent components from different sources and our system needs both components.
In future, we should be able to upgrade components independently, make changes to the system with minimal effort and do not degrade present user experience
Architecture is always a trade-off. An architect has to first decide the order of precedence of quality attributes that the architecture must address and then proceed with the design of the system.
Two quality attributes I have in mind when I design this solution are:
Maintainability – Ability of the system to accommodate changes and upgrades which will impact several components and features
Usability – System is intuitive and easy to use for end users resulting in good user experience
Below are solution approaches:
Option 1:

Low user experience
Components are independent
Option 2:

Better user experience
Components are not independent
Option 3:

Better user experience
Components are independent
I have chosen option 3 which addresses my two key target quality attributes – Maintainability and Usability. There is little more effort involved in building the integration module but it helps to maintain the components decoupled so that in future upgrades and enhancements can be done independently and this option does not disturb existing user experience.
Several studies have shown that 50% to 70% of the total life cycle cost of a software system is spent after initial development. Software systems are developed with quality attributes like Performance, Reliability, Scalability and Usability. However, Maintainability requirements are never stated and often take back step as other quality attributes take precedence. Software architects must consider this important quality attribute while designing the system.