I’ve often likened programming, and in particular web-development, to making a jigsaw puzzle. In the old days of ASP it used to feel like that; assembling all the separate pieces to create one complete piece. However, most jigsaw puzzles come with a picture providing help with the assembly. Requirements, user-stories, acceptance tests should form the picture to help the programmer.
All too often this part of the process seems to be lacking and the poor development team gets the blame. Stories and requirements change and quite often during the development phase. For me one of the strengths of Agile is its ability to cope with this. Instead of assembling one huge 8,000 piece jigsaw, the development team assembles lots of small pictures, or components if you will, gradually fitting them together to form the larger structure.