In my programming experience working in large projects (100+ developers), it's virtually impossible to Do it right the first time - I mean the overall project. We always have had to iterate towards the solution...but for smaller stuff it could work.
Small pieces, loosely joined, as they say.