The most important, yet trickiest part of a software project is the design. Requirements are useful and development gets you producing something, but the design in the middle is where all the parts missing from the requirements are discovered and ensure that the development isn't a waste of time.
In developing Puzil, i have had the opportunity to create a process that works for me. This isn't based on my sole experiences, it is things i have learned over projects through the years. I recently starting using and developing Visio stencils for rapid prototype development which can easily be fired out as a basic functional web site. The place i have found this most useful is at after the technical design stories have been created from your initial requirements document and before you start creating your UML diagrams.
The prototype has been extremely useful in understanding what the software is supposed to do - something that is often overlooked when taking requirements to UML directly as most places tend to do. Sure, wireframes are created on many ocassions, but they're usually so basic as to only get the main points across which are those you already understand anyway!!
Spend some real time creating the prototype. You can use all the design patterns and advanced OO programming techniques you like, but if they don't do the job then whats the point. Let's face it, few users think in terms of powerful computer algorithms and advanved design patterns - they just point, click and expect something predictable to happen. Most places i have been in just do not design properly and instead formalize everything in strict processes rather than useful a simple, dynamic feedback mechanism which a functional prototype gives you.
I'm just pleased i finally found a real use for Visio!