Designing the System
Designing the System refers to the strategic practices involved in planning and implementing the software architecture. This includes choosing appropriate patterns, practices, and technologies to create a scalable, maintainable, and efficient system.
Purpose
The purpose of designing a system is to ensure the software architecture supports both the current and future needs of the product, facilitates easy maintenance and scalability, and optimises performance.
Context
Industry Context
Products are never done. They are always evolving, and the pace of change is accelerating. This means that the architecture of the software must be flexible and adaptable to meet the changing needs of the business and its customers.
ZeroBlockers Context
Teams are autonomous from idea to satisfied customer so they need to own the architecture for their part of the product because they are the ones who will be maintaining and evolving it.
Practices
Element | Description | Examples |
---|---|---|
Architectural Styles | The fundamental structural choices that determine the system's overall design and behaviour. |
|
Communication Protocols | The rules and mechanisms (connectors) that enable components and services to communicate and exchange data. |
|
Integration Infrastructure | Practices for achieving seamless system interoperability, emphasising adaptability and extensibility. |
|
Data Persistence Strategies | Methods for efficiently storing, retrieving, manipulating, and persisting data across various storage solutions. |
|
Embedding Security Best Practices | Ongoing security practices such as regular audits, threat modeling, and adopting a security-first design philosophy. |
|
Fitness Functions | Automated tests and checks that ensure the system meets its non-functional requirements. |
|
Anti-patterns
- Big Ball of Mud: A haphazardly structured system that lacks a perceivable architecture, making it difficult to maintain and extend.
- Overengineering: Adding unnecessary complexity to the architecture, including features or layers that are not required, making the system harder to understand and maintain.
- Cargo Cult Programming: Blindly following practices, patterns, or tools without understanding their purposes or considering the context, leading to inappropriate or ineffective solutions.
- Not Invented Here (NIH) Syndrome: Rejecting external solutions in favour of internally developed solutions, even when the external solutions are more efficient or suitable.
- Ivory Tower Architecture: Designing the architecture without considering practical constraints or the input of the development team, leading to a disconnect between design and implementation.
Case Studies
Enhancing Team Efficiency with Modern Security Practices
How Dashlane improved team efficiency and product quality by implementing modern security practices.
Dashlane
Planning Agile Architecture for Enhanced Agility
How Monzo Bank improved its agility and responsiveness by planning and implementing an agile architecture.
Monzo Bank
Navigating the Shift to Microservices Architecture
How GitHub successfully transitioned to a microservices architecture, addressing challenges and avoiding common pitfalls.
Github
Transforming System Architecture with Experience Design Principles
How ExxonMobil transformed its system architecture by incorporating experience design principles, leading to improved efficiency and user satisfaction.
ExxonMobil
Empowering Teams through Fitness Functions and Evolutionary Architecture
How ThoughtWorks empowered teams to manage their own architecture using fitness functions within an evolutionary architecture framework.
Thoughtworks
Micro-frontends
Exploring how DAZN accelerated innovation and team autonomy by removing blockers from their teams through the adoption of micro frontends, transforming their development process and scalability.
DAZN