Mike Hepburn
Ilaria Doria
Emerging architecture is the practice of having just enough of an architecture so that the product developments keep moving forward, but is flexible enough that architecture changes can be made as more information becomes available.
Architecture is a critical concern when building software systems. Flexibility, adaptability, and the willingness to change are key to success in dynamic environments. Emerging Architecture means experimenting and adapting the architecture as business, customer, or regulatory needs change.
Software architecture has to work well from multiple perspectives, not just from the
design and build viewpoint. Different teams/personas will have different perspectives,
for example, deployment, testing, and operational management. A good software
architecture will try to address as many of these concerns as possible.
Getting it right is a continuous balancing act of reviewing current and potential future requirements and assessing how the architecture fits those requirements.\
A certain degree of upfront architecture and design work is always needed, and it
should be accompanied by flexibility and honesty to ensure that the initial architecture
can change as answers to uncertain questions are discovered and more information is
added to the collective understanding of the problems at hand. The ability to constantly
improve the architecture throughout the product life cycle is another important goal.
The idea behind emerging architecture is that we get just enough knowledge and shared understanding of a business domain with just enough understanding of the logical architecture needed to deliver high-business value features. The major architectural approaches can be decided at this stage, such as decoupled services, event-driven architecture, APIs, and streaming applications – and subsequently, this will be refined in the following iterations.\
By taking an emerging architecture approach, we do not invest time in building a comprehensive architecture that is not yet going to add business value. It may be that the future direction of the product or re-prioritization of features means that this architecture is actually never used and therefore time is not wasted.
When technical leaders set direction rather than provide descriptions of what to do, the team can seek the information they need to get started, and collaborate to iterate.
One way to help achieve this is an exercise in parallel thinking, whereby everyone contributes their ideas collaboratively and at the same time, rather than just following the one way of thinking from the most senior in the team. The emphasis is on what can be, not what is, helps everyone design a way forward. It is not about who is right and who is wrong.
In knowledge-based work, humans are usually the most expensive resource. So, it makes sense to strive to reduce toil or undifferentiated manual work. This is a never- ending trend to automate all the things, which allows much better quality and feedback for our products.
In tech, we are flooded with data. But do we make the best use of all the data available in our applications and systems? When architecting, we have to consider carefully the quantity and quality of data available within our applications and infrastructure. Often, engineering decisions and trade-offs must be made that move data processing nearer edge devices just because sending all that data back to a central processing core is not physically possible because of bandwidth or latency restrictions, or it is just too costly to move all that data around (think cloud!).
We often forget to think about how much data is lost – the lost data can be a massive
source of lost opportunity for our business. This happens in cloud, IoT, industrial, and
even mobile web use cases with processing data on our mobile phones.
See Event Storming and Big Picture for more detail on how to adopt an Emerging Architecture practice.
Check out these great links which can help you dive a little deeper into running the Emerging Architecture practice with your team, customers or stakeholders.