My biggest concern of the application has been solved to my satisfaction; I won't go into any more detail on my code spike because I'll reuse some of this code later once it's been tidied up.
I moved on to working out the role of controllers in this application. What user-initiated events will we need to handle?
The user can perform two main actions: completing the questionnaire itself and navigating between pages. It's the navigation that the controller will concern itself with.
At this point, I felt fairly confident that I'd fleshed out most of the tricky parts of the application. In the role of an architect, each of the diagrams and interactions that I sketched need to be turned into formal documentation in order to provide a point of reference for developers. Here's what I came up with for the UI:
There's no point in duplicating the work I've already shown you, so I won't go through each of these formalized diagrams, but it should be stressed that this isn't a step that can be skipped. As a developer, it's essential that there's a solid design document to refer back to when writing code and also to keep the architect accountable. The next step in the process is to move from pencil and paper back to the computer and start to write the code for our questionnaire component.