Recording at GOTO 2022 Amsterdam, this is an excellent discussion between James Lewis of Thoughtworks and Kelvin Henney about the impact of complex systems on our software architecture and delivery. One thing this underlines for me is the importance of systems thinking and Conway’s Law in getting to the heart of the matter of software complexity.
It also touches on Domain Driven Design and using diagrams to represent domain ideas rather than just sketches that developers use to reflect architectures.
The toolkits and patterns and frameworks that we use in our day-to-day work are essentially just ‘normal noise’ that we have to navigate. These technical patterns and architectures come and go. Domain knowledge, relationships and legacy systems move more slowly and remain.
Likewise, while labelling movements in software development is helpful as a common language, this discussion also encompasses how labels (such as ‘Agile’ and ‘DevOps’) become cargo cults, and the meaning or intention becomes even lost or inverted over time. As so often the case, Martin Fowler said it first and said it best with his concept of semantic inversion.
Kelvin also makes an important point towards the end around Agile Methodologies and scaling – scaling means to scale up, but often we should look to scale down.
Overall, it’s tempting (while in the spirit of creativity) to overcomplicate or overthink solutions in an effort to show off our knowledge. We can jump to conclusions around domain models in an effort to seem productive. While we have many methodologies, frameworks and toolkits at our disposal to build more and more complex systems, we should avoid the temptation to think we need them all the time.
And when you choose architecture, don’t forget the time dimension. Someone will support your system in the future, and it’s 100% guaranteed to be not you.