Such an approach might work well when writing code for a well-understood feature set. While a lot of software has this characteristic, the problems I personally like to work on have a large number of unknowns. It is only the process of building a complex system do you fully spec it out.