Design
Also Known As
- Architecture
- Design Patterns
- Metaphor (in Extreme Programming)
- Microservices Architecture (in DevOps)
- Research and Design
- Service Discovery (in DevOps)
- Set-Based Concurrent Engineering (in Lean Software Development)
- Simple Design (in Extreme Programming)
- Software Architecture
- System Design
- System Design (in Waterfall Development)
Related
Addresses / Mitigates
- Communication Risk: Provides a clear structure and organization, making the system easier to understand and use.
- Implementation Risk: Guides the development process, ensuring that the system meets requirements and design specifications.
- Operational Risk: Ensures that the system architecture supports operational requirements and scalability.
- Market Risk: (Research and) design allows you to leapfrog competitors and provide new sources of value.
Attendant Risks
- Lock-In Risk: Design decisions can create boundaries that limit flexibility and adaptability.
- Reliability Risk: Creates dependencies on software components and design patterns.
- Feature Fit Risk: Too much design up-front can create problems meeting feature requirements.
- Funding Risk: Design can be an expensive bet that doesn't lead to improved software.
Used By
- DevOps: DevOps emphasizes microservices architecture and service discovery to improve scalability and reliability.
- Extreme Programming: XP Emphasizes the simplest design that works, avoiding unnecessary complexity.
- Lean Software Development: Lean uses set-based concurrent engineering to explore multiple design options and narrow down to the best solution.
- Waterfall Development: The system design phase in Waterfall includes both high-level and low-level design to create a blueprint for the implementation phase.
Description
"Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems." - Software architecture, Wikipedia
Design involves creating the high-level structure of the system—defining components, their relationships, and interactions. While Big Design Up Front considers all requirements at once, incremental design tackles one risk at a time like Gradient Descent. Incremental design can get trapped in local minima; sometimes you need to step back and imagine where you want to be on the Risk Landscape.
Variations
| Design Approach | Description | Reference |
|---|---|---|
| Big Design Up Front | Comprehensive design before implementation begins. | BDUF, Wikipedia |
| Emergent Design | Design evolves incrementally as the system is built. | Emergent Design, Wikipedia |
| Domain-Driven Design | Modelling software around business domain concepts. | Domain-Driven Design, Wikipedia |
Used By
DevOps
A set of practices that combines software development (Dev) and IT operations (Ops) to shorten the development lifecycle and provide continuous delivery with high software quality.
Why: DevOps emphasizes microservices architecture and service discovery to improve scalability and reliability.
- Microservices Architecture
- Service Discovery
Extreme Programming
An Agile software development methodology that emphasizes customer satisfaction, teamwork, and frequent delivery of small, functional software increments.
Why: XP Emphasizes the simplest design that works, avoiding unnecessary complexity.
- Simple Design
- Metaphor
Lean Software Development
An Agile software development methodology that emphasizes eliminating waste, building quality in, creating knowledge, deferring commitment, delivering fast, respecting people, and optimizing the whole.
Why: Lean uses set-based concurrent engineering to explore multiple design options and narrow down to the best solution.
- Set-Based Concurrent Engineering
Waterfall Development
A traditional linear and sequential development methodology where each phase must be completed before moving on to the next.
Why: The system design phase in Waterfall includes both high-level and low-level design to create a blueprint for the implementation phase.
- System Design