Skip to main content

This is a new service – your feedback (opens in a new tab) will help us to improve it.

Design for success

Last updated: 9 June 2023
Relates to (tags): Software design

Systems and applications should be designed so that they can be efficiently maintained, developed and deliver their intended value for users. Use success criteria to measure your designs against user needs, business and governance direction, and non-functional requirements such as reliability and security.


Rationale

A clear understanding and focus on meeting user and business needs is vital for delivering value for money when designing software solutions. Meeting non-functional requirements at the right time (often earlier) reduces the effort and cost of building secure and performant applications.

Ensuring that there are pragmatic and timely success criteria for what is to be built makes testing and assurance of design easier, allows for better management of technical debt and carries through to more maintainable solutions.


Applications and Implications

There are a number of things that you can do to improve the chances of success with your design:

  • Engage with and understand the needs of your users and stakeholders. Get their feedback regularly to be assured that you are delivering value (for example using user research, using prototyping and fast feedback)
  • Actively manage technical debt and design your implementation so the solution is the right size at the right time
  • Build or leverage reusable components and patterns where appropriate
  • Design for the minimal team - consider existing engineering capabilities when making technology choices (use languages and frameworks that the Home Office or the team already has experience in where appropriate) so that iteration and support are achievable without unnecessary overhead. Remember that developers are users too.
  • Pick the times when you need to be innovative or ‘get something off the shelf’. Wardley maps help you do that more confidently
  • Keep it simple, but think about extensibility - will your design allow for delivery of potential future needs? Can you use a simpler framework that will allow you to deliver more quickly?