(Note: There are at least two separate cases where the Three P’s (Philosophy, Politics, and Programming) would be in the same entry. You can probably guess the other ones.)
In software design, there is something known as the Spiral Model of development. This, furthermore, is based on a previous design, known as the Waterfall Model, (which I use here because it has a nicer diagram and more straightforward explanation):The questions: (1) What does this all mean? (2) Why does this have anything to do with government?
Designing software
Designing a piece of software is a difficult process precisely because it requires us to be bilingual.
The language of the customer is requirements: I need my program to do this; I need it to make these calculations and then e-mail them off to the person who uses the numbers; I need it to make sure that no one else can log in without the correct password. The language of the programmer is code: Make this thing appear on screen, connect to this computer, send this message in a format the other computers will understand, load this data from this file.
Connecting these two is the job of the software designer. The Waterfall Model is a model which codifies the steps required for good software:
- First, we get requirements. The customer tells us what he or she wants and we write it down. This is what decides what the product will be.
- Second, we design the system from a top-down perspective. We ask, how should we make this product? This may involve the interface design. Should we have the user click on menus or type in their input? Should we even make the user input anything at all?
- Third, we implement the design. This involves the programmers taking the vision the designer came up with and turning it into actual code.
- Finally, we verify that this design works and meets the customer requirements, as well as maintain the product. This is often the most costly step in terms of time and resources, interestingly enough.
-http://en.wikipedia.org/wiki/Waterfall_model
And that, in a nutshell, is software design.
