Iteration is not design
Todd Olson

I have been developing software for over 40 years. During this time, I have seen many software engineering “processes-du jour” come and go.

In my experience, success in delivering a product is entirely dependent on the experience and insight of the development team, and has almost nothing to do with the process used to develop it. Certainly, effective processes can help a good team stay organized and focused, but no amount of process can take an mediocre team and turn them into wizards.

This is particularly true when it comes to design. Design, is by its very nature, a highly creative and innovative undertaking. There is no process that can suddenly imbue a designer with an intimate understanding of the customer, domain, and available relevant technology. Acquiring the intuition that makes for effective design requires a lot of time and trial and error. It is a rare bird indeed that can design a great software system out of the gate without having walked across the burning coals of failure.

So, in my opinion, what the author calls “Design Darwinism” is virtually unavoidable, and is actually a normal part of the design process. It is perfectly reasonable to expect getting the design right to be iterative in nature. What those iterations need to look like, well again, that depends entirely on the intuition of the designer. If that designer is omniscient, then hallelujah!, no design iteration is needed, and one is left with the far easier task of implementation. I have yet to meet such a designer.