The Importance and Best Practice of Using Software Design Documents

23 Jan 2019

 

For a quick refresher, the software design document does as its name implies. It spells out the software’s architecture, interface, and data designs in a written and structured format. These documents are important because they set the expectations. The software provider should mandate software design documents are created with every client. Without such documents, the client/provider relationship is headed for trouble. It opens the door wide open to disputes about what functionalities were promised and then not delivered. The most basic elements of the documents include a description of the application, how it will be completed, and the various milestones achieved to reach the finished state.

When a provider has design documents in hand they’re much more likely to satisfy their clients. Documentation removes ambiguity about the software design and its intended purpose. It makes it much easier to set completion dates and stay on track for completion.

Software design documents typically begin with an “Objective” section. It details what exactly the software is intended to do. Which programs it interoperates with, its stack, codebase, and other considerations. It provides the document writer with a chance to accurately describe the key elements of the software.

The documentation might then include a “Rationale” paragraph. This provides the “why” to the “what” described previously. Perhaps the software is intended to replace an outdated solution. Or it’s needed to improve performance or stability. This section is important because it provides everyone involved with some higher-level context. It can include thoughts on how the project fits into the client’s overall technical or product strategy, and what problems are addressed by the solution. Next is more of the “guts” of the actual software. The staging process, testing, milestones, deployment, and any security considerations.

Here are some of the key parts of software design documentation along with some best practices.

The User Interface

Few elements of the design documents are as troublesome as the user interface. It’s a frequent source of frustration and misunderstandings. In many instances the client will provide an illustration of the UI, but it won’t include the programming side. It doesn’t spell out the control states of the various buttons, what happens when a button is pressed, and any related animations.

The UI section should include detailed wireframes of screen layouts. This takes time on the front end, but it prevents client misunderstandings and mountains of work if code changes need to be completed. Account for different screen dimensions and watch that any client-supplied graphics are built to the right aspect ratios. The documents for UI must feature all of the necessary elements, including:

  • Any state changes for controls
  • Appearance of transitions between states and views
  • Input controls such as boxes, toggles, date fields, text fields, etc.
  • Navigational tools
  • Informational components such as progress bars, message boxes, and notifications
  • Containers
  • Error handling details

Of course the UI itself should be streamlined and simple, but the documentation must be extremely detailed.

Functionalities

The application design document should answer several questions about the actual functions of the software. This section should explicitly detail what the user will accomplish with the application and what are the limitations.

Key elements for the functionalities section of design documents include:

  • An explanation of what exactly the application perform, and the speed it’s expected to complete the action(s).
  • What represents “failure?” How is that state managed?
  • How can users create entries?
  • After installation are there various one-time operations completed?

Milestones towards Completion

Quality document templates will include milestones throughout the content. Ideally, the plan will feature milestones that are equally spaced apart. Set milestones for various functions and components. Each milestone will be a part of a list of steps, including optimizations, beta releases, and full-function releases. The documentation should include estimations of the work involved to reach the milestones as well as the approvals from the customer they might be necessary for milestone passing.

Best Practices for Success

Here are several tips for producing design documents that keep you on track and allow the team to work with agility:

  • Utilize a technical writer. Complex software projects require concise yet detailed documentation. Utilize an in-house or freelance technical writer that understands how to present the information for maximum readability and organization.
  • Remember it’s not “one size fits all.” Every project worthy of documentation deserves a unique set of fresh content. You can follow an overall repeatable structure, but every project has its own documentation needs.
  • Keep a file of “lessons learned” after project completion. Was the documentation complete? What could be changed for future projects and documents? Focus on improvement over time to ensure deadlines are met and clients are satisfied

Adhering to an agile method of development means collaboratively building quality documentation. Involve multiple groups in the document process. It should be a dynamic exercise, there you write some content, and then review it with the team for feedback. Encourage the developers, programmers and testers to share their insights and suggestions. Talk to the team to see what they’re working on, any stumbling blocks, and how their work compares to the documentation (it should perfectly align).

Involving more people will ensure items are not overlooked and the final documentation aligns as closely as possible with the client’s expressed wishes. And remember you’re never really “done” with the documentation. Set a schedule for a systematic update process to keep track of every change.