Software Design Document – Justification After Development

designdocumentationisosoftware

I'm currently working on my graduation for my "Software Development" studies, in which I have to develop complex software individually in an external company. This all needs to be done in a structured manner, creating all corresponding documents.

For this project I have chosen to work with the IEEE standard documents: Software Requirements Document (SRS), Software Architecture Documents (SAD) and Software Design Document (SDD). Although taught otherwise in school, for this project I've chosen to create the SDD after development (instead of before). My reasoning is:

The company at which I do my internship has given me the instruction to create a complex piece of software, satisfying a certain set of requirements, in a experimental manner. Because of the amount of freedom which they have given me in the project definition, almost nothing is certain beforehand, and can best be encountered while experimenting in the development process. Additionally, I'm creating the software in an individual manner, it would have no benefit to anyone else in the company for me to make this Software Design beforehand. Doing it beforehand will just cost me a lot of time to change it later on, as I can be certain that with the uncertainties in the project, the design which I make beforehand will have to be changed a lot. This feels counterproductive to me.

Is this a good justification to create the SDD after development? If not, would there be any good justification for that?

Edit: The reason to create the SDD afterwards would be for future developers to continue on the project. I'm not going to be able to finish the whole project in my graduation period, so other developers will have to continue on the current codebase.

Best Answer

In IEEE Std 1016 Section 3.1 Software design in context, you can find this paragraph:

An SDD can be prepared and used in a variety of design situations. Typically, an SDD is prepared to support the development of a software item to solve a problem, where this problem has been expressed in terms of a set of requirements. The contents of the SDD can then be traced to these requirements. In other cases, an SDD is prepared to understand an existing system lacking design documentation. In such cases, an SDD is prepared such that information of interest is captured, organized, presented and disseminated to all interested parties. This information of interest can be used for planning, analysis, implementation and evolution of the software system, by identifying and addressing essential design concerns.

The authors of IEEE Std 1016 recognize that a SDD may not be created up-front. One may be created after the software system exists in order to capture information for interested parties.

Section 1.1 Scope also provides some interesting information:

This standard does not prescribe specific methodologies for design, configuration management, or quality assurance.

In the context of this questions, the key words are "configuration management". Configuration management not only applies to the software system being created, but any associated documentation.

In your personal situation, and in many situations, creating an SDD up front is a waste. David Arno's answer is close to being what I would consider the right answer. The true design of your software system is the code. However, you "create the SDD before" or "create the SDD after" are not your only options. You have a third option - evolve the SDD with the software system.

If you're following a standard such as IEEE Std 1016, you have requirements for an SDD. Specifically, Section 4 of this standard defines the content that you have. As you work through design decisions, begin to create the different viewpoints, views, and overlays. As you make decisions, capture the design rationale for them.

This will allow interested parties to follow the evolution of the software design without needing to dig into the code. Of course, people may have comments or suggestions. If you are updating the SDD, they can track your progress and give feedback on the approach early, which you can then incorporate into the product as well as the SDD. When you transition off the project, if the software code and the SDD are in sync, someone should be able to easily onboard and pick up the work.

Related Topic