There is a group within the organisation I'm currently working with who are interested in the concept of prototypes as specifications. They cite the Silicon Valley Product Group's blog entry High-Fidelity Prototypes as a good example of this thinking and from which I draw one of the stated benefits:
A high-fidelity prototype provides the engineers and QA organization with a rich, interactive description of the product's intended functionality and design to be used as a reference basis for implementation and test.
Whenever this subject is raised my thoughts turn immediately to XForms. For the client side of web applications, XForms provides descriptions for the data model, its bindings to the view (form controls), business rules/logic, data submission, user interactions and error handling. All that is left is structure and presentation, which can be handled by the host document (e.g. XHTML or SVG) and CSS respectively.
The fact that XForms is not natively supported within browsers, and therefore slightly more problematic to deploy across the web, does not mean that your prototyping efforts are going to be wasted. The advantage of prototyping with XForms is that it is quick, declarative, readable and well defined. The good separation of concerns helps concentrate the mind wonderfully. Gone are the good-old days of Photoshop layered walkthroughs, nasty hacked-together DHTML, or the even more esoteric Director demos that I've encountered.
XForms allows you to start simple, working with static instance data to test-out the basics. Then look at the customer's requirements for constraints, validation and logic. Once you feel you're on the right track you can retrieve the data from a server and start working on you RESTful web services. Presentation can be layered on top without affecting the underlying data bindings or business logic. It's easy to see how you can be very Agile when working with XForms.
How you go on to deploy the final application is up to you. You can keep it XForms and look at a variety of server-side and client-side implementations. If there are specific customer requirements/constraints that mean you need to look at either an XHTML/AJAX application or maybe Flash/Flex then the details of the design, as described by the mark-up in your prototype will aid that transition, and after all of that, when XForms becomes main-stream, and it surely will, the knowledge you'll have built-up with your XForms prototyping will put you in a commanding position in the advanced web application sector.
In a series of up-coming posts I will be illustrating how XForms can be used to prototype an Atom Publishing Protocol (AtomPub) client.