Jeremy Miller writes,
The metaphor of software development as construction is common, but horribly wrong. Approaching software development as constructing a structure on top of a foundation, then adding the finishing trim can be a slow, painful path to project failure.
Time and time again I’ve learned or observed that projects go much smoother when you build vertically instead of horizontally. What I mean by this is that you build a new system by creating a feature at a time with the entire stack of UI, business logic, and database work to make the feature fully functional. As you build new features you religiously eliminate duplication to avoid creating a Stovepipe anti-pattern and harvest reusable code.
... and I totally agree, even though I don't know what a “Stovepipe anti-pattern” is. Go forth and read this article. It's a good one!