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)