I was watching a program where a person was sculpting a car out of clay. I don’t think he had any executives come up to him and say lets give it a spin. Open the clay door, start the clay car and lets drive away. The equivalent in software development is mocked up pages. The mocked up pages are essentially like the clay car. There is no engine, the doors are just a dream, there is no fuel system, electrical system. Nothing functions.
Yet managers, especially those that don’t know code, especially salesmen, expect immediate delivery.
Lets get in the clay car and drive around the track. Can we ship tomorrow?
Once the clay model is developed, decisions have to be made. The fuel type, diesel, gasoline, methane, alcohol, battery, compressed gas, or maybe the car eats cake. Who knows. Someone has to make decisions and these have an effect on the components that go into the car.
Putting a nuclear reactor in the car would weigh it down with too much shielding, unless you like radiation exposure.
Engineering is when someone takes the pipe dream and converts it into reality.
There are certain givens that a car maker must assume. It should be able to move. It should be able to be controlled to reach a destination. It should be able to traverse the terrain it is meant to traverse.
Purpose drives this. Race car, sports car, touring vehicle, utility vehicle, battle vehicle, all of these things change the design.
A clear purpose drives the process of building the product.
All of this is true in software development. What is the context of the application? Who is using it and for what? Multi user, single user, embedded system, distributed system, data storage, and many more decisions are driven by the purpose.
Is it done yet?