I’ll be dead soon. I’ve been out in the cold rain for three hours. Hypothermia is setting in.
You try to sell me a mansion. You show me the plot plan and the floor plan; you did a lot of planning up front. You brag about the foundation, firm and solid, ready to last centuries. The infrastructure is excellent: all the best wiring, plumbing, heat, and air conditioning. Twelve bedrooms, six bathrooms, servants’ quarters. Hot tubs. Pool. Very impressive. Well done.
But I just died. All I needed was shelter.
“Building software is like building a house. You start with a strong foundation. Then you build one floor at a time–you can’t build the second floor without the first floor. You need excellent infrastructure–things like plumbing and wiring. Finally, you need a solid roof.”
Building software is best done iteratively and incrementally. Fill a need, get it done, and give it to your customer. Fill another need, make it better, get it done, and give it to your customer again.
The “it’s like building a house” metaphor is broken. Building a house can be done as incrementally as software:
- I need protection from hypothermia. Build me a lean-to to keep me dry and protected from the wind. Done.
- I need something a little more durable and warmer. Build (or buy) me a tent. Done.
- I need a place to stay for the summer. Build me a cabin. Maybe with a sauna. Done.
- I’ll be staying for the winter. Build me a brick house with a fireplace. Done.
- I’ll be working in the city. Build me a townhouse with modern facilities. Done.