The ideas here are those that have I taken away from a presentation given at NET-A-PORTER by Johan Lindstrom
In programming, details matter. The machine does exactly what you say. Whether given software designs from the design team to implement; whether prototyping, or just poking around the code in your Agile team; when programming, the details matter. To design and document a solution upfront so thoroughly that no decision was left to the programmer would be to create something so complex that it would be as difficult as programming, likely to contain more bugs, and likely to take more time. Designs may map out code structure, data structures and interactions, but they are fundamentally confined to the higher levels. The truth is that the people who churn out the software are making a lot of tiny decisions for the company, and all of those decisions add up.