The Value and Danger of Use Cases in Software Design

Use cases are essential for defining scope, communicating requirements and creating test cases. The danger begins when they become a substitute for architectural modelling rather than an input to it.

Introduction

Use cases are among the most effective tools for communicating requirements from the project owner to the project delivery organization. They provide a shared description of what the solution must support and establish a practical link between business expectations, design, implementation and testing.

The Solution Architect has a central role in this process. The architect must ensure that individual requirements are not merely implemented, but are translated into a coherent solution that fits the existing architecture and remains sustainable over time.

The role of use cases

A use case should describe the expected behavior of the solution from a business or user perspective. It helps clarify who needs the capability, what must happen, under which conditions and what constitutes a successful outcome.

A typical delivery process follows these stages:

01
Requirements discoveryIdentify the business needs, objectives, constraints and stakeholders.
02
Scoping and use-case definitionTranslate requirements into agreed scenarios and establish the functional boundary of the project.
03
High-level designDefine the data model, interfaces and APIs, processes, integrations and overall solution structure.
04
Low-level designSpecify the detailed components, configurations, logic and technical implementation.
05
Implementation and unit testingBuild the solution and verify the individual components.

Use cases are therefore not isolated documents. They provide traceability from the original requirement through architecture, implementation and acceptance.

Scope, testing and acceptance

The most important contribution of use cases is scope definition. An approved set of use cases creates a clear agreement about what the project is expected to deliver.

In parallel with design and implementation, the use cases should be used to define the test cases. Each use case should have corresponding tests that verify whether the required behavior has been implemented successfully.

  • Use cases define the agreed functional scope.
  • Test cases verify that the implementation meets that scope.
  • Requirements not covered by an approved use case are outside the agreed scope.
  • New or changed requirements should be handled as controlled scope and design changes.

When all agreed test cases have been completed successfully, the solution can proceed to project sign-off, production go-live and a defined hypercare period.

Successful test execution demonstrates that the agreed use cases have been delivered. It does not, by itself, demonstrate that the solution has been designed well.

The hidden danger

The danger appears when an implementation takes each use case directly into low-level design and development, skipping the architectural modelling within the high-level design phase.

This approach can produce a solution that passes every test case. Each scenario may work exactly as requested, but only in isolation. The implementation has not necessarily been integrated into the existing design, data model, process model or integration architecture.

Over time, this creates a collection of individually successful functions rather than a coherent system. Typical symptoms include:

  • Duplicated logic and overlapping services
  • Inconsistent data definitions and processing
  • Point-to-point integrations that are difficult to change
  • Business rules embedded in individual implementations
  • Increasing maintenance effort and technical debt
  • Changes that solve one use case while breaking another

The system may continue to meet its original acceptance criteria, while its overall integrity and ability to evolve gradually deteriorate.

Why architectural modelling matters

The high-level design phase is where the architect looks across the use cases and identifies the common concepts, reusable services, shared information and architectural patterns needed by the complete solution.

This includes modelling:

  • The information and data structures used across scenarios
  • The ownership and lifecycle of that information
  • The business processes and their interaction
  • The interfaces, APIs and integration boundaries
  • The common services that should be reused
  • The relationship between new capabilities and the existing platform

The architect should therefore not ask only, “How do we implement this use case?” The more important question is, “How does this use case fit into the overall solution model?”

Use cases describe what the solution must support.
Architecture determines how those requirements can coexist in a coherent, maintainable and extensible system.

Conclusion

Use cases are essential tools for communicating requirements, defining scope and establishing the basis for testing and acceptance. They create a clear contract between project ownership and project delivery concerning what must be delivered.

But use cases are not architecture.

If they are translated directly into implementation without architectural modelling, a project can deliver every requested function and still weaken the system as a whole. The strongest solutions use use cases to provide direction and control, while the architecture ensures that each capability becomes an integrated part of a sustainable design.