Architecture is something that is evolved not designed up-front
- Timely decision making should be tied to making decisions that are appropriate to the goals of the Architecture of the system.
- Decision should be made at the last responsible moment, this gives us the opportunity to gather as much data as possible to put into decision making.
- Create systems that are easy to change by paying attention to cohesion and coupling. Breaking systems down into smaller business capabilities can also aid in keeping systems easy to evolve.
- Evolving also means experimenting. By having continuous delivery practices in place, small changes can be tested, improved or entirely removed if it's not working. This means not being afraid to make mistakes but instead learning from those, which means creating an environment where it is safe to make mistakes.
- With limited information, doing the safe but suboptimal implementation delivers the value needed while pushing the decision out until a time as when enough data is available to make a optimal decision. This allows us to spend as little time/money as possible to get the information we need to make a decision.
We believe that architecture is the result of deliberate incremental change over time. This is because technology and requirements are constantly evolving so focusing on creating systems that are easy to change allows us to quickly respond.