Skip to main content

Design

Designing the high-level structure of the software.

Also Known As

Related

Addresses / Mitigates

  • Conceptual Integrity 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.

Attendant Risks

  • Boundary Risk: Design decisions can create boundaries that limit flexibility and adaptability.
  • Software Dependency Risk: Creates dependencies on software components and design patterns.
  • Feature Fit Risk: Too much design up-front can create problems meeting feature requirements.

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. Each structure comprises software elements, relations among them, and properties of both elements and relations." - Software architecture, Wikipedia

Architecture / Design in software development involves creating the high-level structure of the system. This practice defines the components, their relationships, and how they interact to achieve the desired functionality. Effective architecture and design provide a blueprint for development, ensuring that the system is scalable, maintainable, and meets the requirements.

Discussion

Design is what you do every time you think of an action to mitigate a risk. And Big Design Up Front is where you do a lot of it in one go, for example:

  • Where you think about the design of all (or a set of) the requirements in one go, in advance.
  • Where you consider a set of Attendant Risks all at the same time.

Compare with "little" design, where we consider just the next requirement, or the most pressing risk.

Although it's fallen out of favour in Agile methodologies, there are benefits to doing this sometimes.

How It Works

As we saw in Meet Reality, "Navigating the Risk Landscape", meant going from a position of high risk, to a position of lower risk. Agile Design is much like Gradient Descent: each day, one small step after another downwards in risk on the Risk Landscape.

But the problem with this is you can get trapped in a Local Minima, where there are no easy steps to take to get you to where you want to be.

In these cases, you have to widen your horizon and look at where you want to go: and this is the process of design. You're not necessarily now taking steps on the Risk Landscape, but imagining a place on the Risk Landscape where you want to be, and checking it against your Internal Model for validity.

See Also

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.

Extreme Programming

An Agile software development methodology that emphasizes customer satisfaction, teamwork, and frequent delivery of small, functional software increments.

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.

Waterfall Development

A traditional linear and sequential development methodology where each phase must be completed before moving on to the next.