- 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.
create the interfacesPrototype 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 photoshopPhotoshop 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 designerAnother 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 beginAnother 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.
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?