
Every failed software project has a confession buried somewhere in its post-mortem. It usually reads something like this: we didn't really understand what the users needed. Or: the requirements kept changing. Or, most damningly of all: we built exactly what...