“No one makes bad software on purpose. No benevolent programmer has ever sat down, planning out weeks of work, with the intention of frustrating people and making them cry. Bad software, or bad anything, happens because making things is hard, making good things doubly so.
The three things that make it difficult are:
- Possessing the diverse skills needed not to suck.
- Understanding who you’re making the thing for.
- Orchestrating the interplay of skills, egos and constraints over the course of the time required to make the thing.
Individually these challenges are significant, but combined they create a wall of suck so high that few people can see the top, much less throw anything over to the other side…”