In software development, software design has traditionally been considered as a previous, distinct and separate part from the programming stage. But,… what is really a design?
For instance, a bridge design: before such a design is actually built the engineers do structural analysis; they build computer models and run simulations; they build scale models and test them in wind tunnels or other ways. In short, the designers do everything they could think of to make sure the design is a good design before it is built.
When the design effort is complete, the design documentation is turned over to the manufacturing team. This is a completely different group with completely different skills from the design team. Then, the manufacturing team can proceed to build the product. In fact, they can proceed to build lots of the product, all without any further intervention of the designers.
If we review in detail the software development life cycle, we can conclude that the only software documentation that actually seems to satisfy the criteria of an engineering design is the source code listings:
- The source code is created before it is built
- In software engineering, building software is done by compilers and linkers
In software, even the smallest piece of code is likely to be revised or completely rewritten during testing and debugging. We accept this sort of refinement during a creative process like design, not as part of a manufacturing process. No one expects an engineer to create a perfect design the first time. Even if she does, it must still be put through the refinement process just to prove that it was perfect.
Therefore, the software design is not complete until it has been coded and tested; it means that final source code is the real software design. Final source code is the design documentation that is turned over to the compilers and linkers (the manufacturing process) to build the software.
Summing-up: Software may be cheap to build (it is made by the compilers and linkers), but it is incredibly expensive to design (to create a working code). Software is so complex that there are plenty of different design aspects and their resulting design views.
- The post What Is Software Design?, by Jack W. Reeves.