- Add new functionality
- Modify your existing functionality
- Remove existing functionality
- Fix a bug
When the information system is less than a month old, making a new feature or modifying an old one is cheap. When the system is months or years old, the cost of adding functionality can be multiple compared to the beginning. The weaker maintainability is, the more expensive those functions are.
It is also important to note that the information system has many areas where maintenance is more important than in other areas. These important areas are usually core domains (http://blog.jonathhanoliver.com/ddd-strategic-design-core-supporting-and-generic-subdomains/), whose functionality is usually complex and often changing / extending. Then, there are supporting domains that are once made and are hardly touched then their maintainability is not as important as the core domain.
In practice, it is too expensive to make a perfectly maintainable system. We do not want to do architectural choices that increase the complexity of the system, unless they are necessary. Over time, the developer team will begin to understand the customer’s business better and understand where to put that extra effort to make a code and structure almost perfect. Also, as time goes on, the scalability and availability of information systems often change so much that a variety of architectural styles are needed to meet new needs. That’s why big companies such as eBay, Netflix, Twitter and Amazon have rebuilt their architectures many times over during their lifetime (http://highscalability.com/blog/2015/12/1/deep-lessons-from-google-and-ebay-on -building-ecosystems-of.html). Thinking “Make it right at the first time” may be more expensive than what one might expect to assume. In these cases, the high price would have been caused by over-engineering, as Albert Einstein said, “Make things as simple as possible, but not simpler”
Building a computer system is a learning journey and if you do not have to change architecture at any point, you probably have spent too much time creating architecture beforehand and probably the architecture is too complex as well.