Skip to main content

Design

Designing the high-level structure of the software.

Also Known As

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 ApproachDescriptionReference
Big Design Up FrontComprehensive design before implementation begins.BDUF, Wikipedia
Emergent DesignDesign evolves incrementally as the system is built.Emergent Design, Wikipedia
Domain-Driven DesignModelling software around business domain concepts.Domain-Driven Design, Wikipedia

Used By

DevOps

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.

Uses:
  • Microservices Architecture
  • Service Discovery
Extreme Programming

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.

Uses:
  • Simple Design
  • Metaphor
Lean Software Development

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.

Uses:
  • Set-Based Concurrent Engineering
Waterfall Development

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.

Uses:
  • System Design