Using functional decomposition to build a house
When designing software, Functional decomposition is the most natural procedure. It’s the most common practice, because it’s the easiest practice.
But it’s terribly bad in the long run and results in software systems getting remade instead of reused.
Here’s an analogy of building a house using functional decomposition.
Identify the functions
- Eating
- Sleeping
- Resting
- Learning
- Cooking
- Drinking
- Washing
- Bathing
Start implementing cooking
We need to start somewhere. Let’s start with cooking.
You imagine you start with a flat square of dirt and clear blue sky.
- You place down a microwave on the ground.
- Pull a cable from the nearest elecricity pole.
- You start microwaving some food.
Done! Cooking fills its requirements!
Requirements change
The customers actually wanted to be able to bake bread in their house.
No problem you add a small bench, place an oven on the ground, and call it a day.
Nothing is built like this
This is madness. No house arcitect would simply start with the microwave. That’s a detail. You don’t even start with the kitchen table. That’s also a detail.
References
- J. Löwy (January 27, 2021), “Righting Software - System Design” [Workshop], NDC London 2021.