Don't write spec documents, throw away any you have near you, they're next to useless anyway. It might seem like a hearsay to some but it's true and deep down even the most most anal planner in all of us knows it. Two of the biggest reasons for this are:
  • size and scope: In order to address every aspect of your project a full specification document has to, well address every aspect of your project and it's going to be huge as a result.
  • lack of vision: For most people relating what's written on paper to a vision of a design in their heads is difficult if not impossible.
Loose documents don't work well either, because leaving the obvious unsaid just leads to problems, chiefly not everything is obvious to everyone. The devil is in the details and avoiding them until the end of a project is just going to cause trouble. "Why haven't we implemented x, that should have been obvious!"

create the interfaces

Prototype the interfaces and use them as your spec. Working this way has so many benefits, try it once and I promise you'll be converted. Before you write a single line of backend code, sit down and work out your interfaces. Build each screen, put all the buttons, fields and elements on the page I normally start with index cards and write a few simple requirements for each screen or page - just a few simple sentences listing what the page is expected to achieve. My next step is to turn those requirements into interfaces.

in HTML, not photoshop

Photoshop is great, but let's face it it's no better for trying to work out a functional interface prototype than some paper and a pencil. It's very easy to focus on making things look pretty over making them functional and you risk missing something important out. The best way to avoid both of these traps is to write your interfaces in HTML, mark them up semantically as they will be marked up in the release and use them as your working spec.

I know good design but I'm no designer

Another benefit of coding up your interfaces in HTML before you start writing code is you can hand them off to designers so they can make them look pretty as you're working on making them work. I have a pretty basic idea of design principals and the tools - but I find it hard work. So with interface first development I don't have to think about it.

let the testing begin

Another thing which is made infinitely easier with interface first development is functional testing, because your testers don't have to wait for a release before they can start developing a test suite. You are using an automated test suite aren't you? By generating interfaces as developers add functionality testers can already have been through the interfaces and written a whole series of failing tests.

updating later

The great thing about using HTML as your design and communication tool is that when it comes to making a change to a page you have the most up to date working copy there ready to modify in the form of your site. Just save the page, add the change to the HTML and you've got your interfaces ready for discussion and later implementation. What could be easier, faster or more clear for everyone?

it's not a panacea

There have been times when I've been working with notoriously difficult individuals where nothing was going to satisfy. An exmaple that springs to mind is a multi month project where we produced an interface design early in the project. The design was a set of PDF images not HTML (see above), but the delivered product was a pixel perfect implementation of it. Only once the project was delivered was there any input on the design or functioning of the project - I'm not just talking things that a PDF can't show you like what clicking a link looks like. I'm taking basic things like colours, layout and the size of elements! Would a HTML mock up have made any difference, I actually doubt it. I take blame for miscommunication and resulting mistakes when it's my fault but in this case even after the site was fully developed and deployed to a staging area for testing none of these issues were highlighted. It was only after the site was put into production that these "critical issues" were discovered.