Almost 20 years ago, Frederick Brooks wrote in his "No Silver Bullet: Essence and Accidents of Software Engineering" essay that enterprise systems needed to be grown, not architected.
The building metaphor has outlived its usefulness. It is time to change again. If, as I believe, the conceptual structures we construct today are too complicated to be specified accurately in advance, and too complex to be built faultlessly, then we must take a radically different approach.
Let us turn nature and study complexity in living things, instead of just the dead works of man. Here we find constructs whose complexities thrill us with awe. The brain alone is intricate beyond mapping, powerful beyond imitation, rich in diversity, self-protecting, and selfrenewing. The secret is that it is grown, not built.
So it must be with our software-systems. Some years ago Harlan Mills proposed that any software system should be grown by incremental development.  That is, the system should first be made to run, even if it does nothing useful except call the proper set of dummy subprograms. Then, bit by bit, it should be fleshed out, with the subprograms in turn being developed--into actions or calls to empty stubs in the level below.
And to think, I used to groan when my Computer Science course made me read some boring essay instead of writing cool programs.
Oh and by the way, when talking about incrementally developing a system, the idea actually traces back to 1971. An idea that's 34 years old and counting.