Managing software projects

The hardest single part of building a software system is deciding 
precisely what to build. No other part of the conceptual work is 
as difficult as establishing the detailed technical requirements, 
including all the interfaces to people, to machines, and to other 
software systems. No other part of the work so cripples the 
resulting system if done wrong. No other part is more difficult to 
rectify later. Frederick P. Brooks (1987)