On Architecture of Real-World Systems
In Building Microservices: Designing Fine-Grained Systems, Sam Newman writes:
The architecture of a real-world running system is never clean or pristine. If you want a “clean” architecture, by all means laminate a printout of an idealized version of the system architecture you might have had, if only you had perfect foresight and limitless funds. Real system architecture is a constantly evolving thing that must adapt as needs and knowledge change. The skill is in getting used to this idea.
Experience motivates the design and maintenance of software that adapts easily to change. And, sometimes experience allows us to be okay with putting things on the technical credit card when faced with demanding schedules. The implementation may be sub-optimal but functional for now, but with thought out interfaces, these implementations can be improved later without dependents knowing.