Software development is the process of designing a product, implementation, unit testing, and debugging of successive versions, testing by focus groups of both behavior and usability, and finally support, debugging, and maintenance.
Here is a completely fictional but humorous account by someone who's never professionally developed software:
- design - What is the program's purpose, what is required in order to fill it, how will the customer use the result? Companies do not have a good reputation for involving programmers in this process.
- programming - The manager is charged with keeping the programmers on task. The first two steps below occur in a cycle, with the third only applying when a module fails one of its unit tests. Yet the descriptions are written as if the steps were not intertwined, for simplicity.
- implementation - You write several broken versions of the software, moving to the other two steps within this phase as appropriate. Finally you discover that something about the design is absurd. You appeal to the manager to have it redrawn, and a week later you start over on the project.
- unit testing - Your team developed tests for each module per the design specs. A bug is detected in your code but can't be found. Finally you discover a small bug (they're always small) in the unit test.
- debugging - This is the only part of programming the company doesn't interfere with. You catch several bugs including some of your own.
- focus groups - You move on to the next project while the designers expose some of the target demographic to your software. They find a few bugs, but insist that advanced features be removed and the lamest ones made easier. Back to implementation...
- long-term - Your relation to this project never ends, no matter how much you wish it would.
- support - You have to handle the bug reports and slightly difficult support questions.
- maintenance - When a bug report turns out to be legitimate, you are in charge of patching and testing.