Many of us have noticed that designing software is surprisingly hard but many don’t know why that is. The simple answer: Design is the art to balance contradicting goals.
Let’s design a public garbage bin together.
What do we want?
- Big enough so it never spills
- Easy to clean
- Nice to look at
- Robust enough to withstand riots
- Soft enough to cushion the impact of car
- Long lifetime
It’s easy to see that “cheap” contradicts almost anything else. “Nice to look at” means an (expensive) artist has to build the form. Big garbage bins ain’t cheap. Easy to clean and robust mean high quality materials for hinges and locks. Easy to clean and long lifetime involve expensive surface materials and finishing.
It should be easy to lift for the cleaning crew but not for rioters. When a car hits it, the bin should give way. So these contradict each other as well.
Still not convinced? Look at my elevator example.