In my opinion it should start and end with the user interface. This is the only part of the entire system that the user will see and will use so the user interface should drive everything else. Now, this doesn’t mean that the UI needs to be nailed down and signed off before you start working on the model or the DB, but it means that in any iteration, the work being done should be driven by the state of the UI for that iteration and should be ultimately verified according to the UI.
So, to put this more simply, create a screen(s) and then work to make the screen(s) function. Then go back to the screen(s) and ensure that what is happening and the data you are getting back based on what you are entering is correct.
As much as the rest of the application is important, your users don’t care if there is a database or you are using comma separated flat files.