I was planning to write something about differences between agile approach to software development and more classical one (waterfall-alike) style, but I didn’t really want to repeat the obvious banalities you can easily find on Google. That’s why I decided to present it more like “top-down” versus “bottom-up” approach holy war, mainly because I’ve noticed how hard it is to cooperate with someone who’s devoted to opposing style of software design.

Personally, I appreciate value of KISS (Keep it Simple Stupid) and YAGNI (You Ain’t Gonna Need It) principles, but my keywords are: “generic”, “re-usable” and “design patterns” - so yes, I’m the one who always prepares a design up-front. What is more, as low-level details may sabotage larger idea of general design (as they can “follow spreading paths”), I always start with overall model that fits all the requirements, so low-level details will fit their slots later. Some may call it difficult, but I’m always up for the challenge.

I totally realize, that many other people are not that crazy about pure and coherent architectures (some of them even tend to call them “gold plating”, just please let me skip commenting that…). Some just don’t want to risk taking responsibility for overall complex design and some just want to deliver the functionality without looking forward for maintainability (hopefully they know what does “technical debt” stand for…). I could write here several pages-long dissertation regarding pros and cons of both approaches (as it’s clear that agile has its pros as well and there are many people who make it work smoothly on their projects), but I’ll let an expert to do this for me - here’s an article by Martin Fowler, written in May 2004 (yes! this is almost 8 years long!):

"Is Design Dead?" (http://martinfowler.com/articles/designDead.html)

Believe me or not, I’ve found it just recently in some TDD-related materials. Enjoy the reading.