http://www.perlmonks.org?node_id=50520


in reply to Planning your software before writing

Here's my take on things, (follow the link in neophyte's post for better reasoning and more cogent analysis): I'm not saying that design isn't important. I'm just saying that spending a couple of weeks at the start of a project doing nothing but design is not (in my experience) going to pay off in six months, when the specifications have changed, the original design didn't work, and no one wants to update a few dozen CASE diagrams or pages of UML.

Certain industries where accuracy and reliability need to be mathematically proven may have different requirements.

XP practitioners try to 'code by intent', where they write a test case for the feature they're about to add, let the test fail, then write code to make the test pass. That's design in the small.

For design in the large, they write stories about the features the software needs. The customer arranges them by their value in the shipped product, and the team tackles them in that order. Design is done as-you-go, with a little up front investment in the basic architecture (the simplest that could possibly work), breaking a story down into programmer-afternoon-sized-tasks, and continually refactoring.

That may or may not work for you, and it may or may not work for my latest project. We'll see.