It’s 2018. Nowadays we are used to striving for agility and we exploit automation to stay responsive in our ability to adapt to change. We write tons of unit, integration and system tests as equal part of our production code, to ensure functional correctness. We make use of powerful linters to get and retain a high level of internal code quality. We let continuous integration servers execute those tests and checks on every single commit, to get a fast feedback for our highly iterative development process.
That’s really cool, isn‘t it?
Not quite. What about architecture? The layers? The component model? The dependency rules? The 10,000 ft birds view?
We often don’t care and, even more often, don’t check those very relevant, structural aspects of extensibility and maintainability.
In a perfect world we’d have architectural tests, that can be easily defined, executed and integrated in our continuous integration process along with all the other automatic tests and checks we know and love.