Well, not really three bears, but it makes a good title.
I’ve been thinking about the history of Web Application Development…
From my perspective, web UI development has traditionally been split into three camps:
(Hmmm… they all start with P. Maybe it should have been the three little pigs.)
Each of these camps has a set of requirements and a set of constraints. The constraints of one camp are often offset against the needs of another, causing compromises to have to be reached before an application can be built.
In the beginning, the Plumbing group formatted data into html designed by the Presentation folks and passed it to the browser. Browser interaction was limited to basic population and submission of form elements, much to the chagrin of the Presentation and Process folks.
Porridge 1.0. Yum yum, ho hum.
This porridge was too gloopy and didn’t flow nicely.
Some Remote Procedure Call (RPC) capability was introduced in the form of Remote Scripting. This allowed the Presentation group to interact with the Plumbing group to get information from the server and remove the page-refresh constraint from a data perspective, but they still didn’t have enough control of re-rendering the page in place to do much without forcing a visit to the server to rebuild a new page. This caused the Process folks to have to change their single-page flow designs to stretch over multiple wizard-style pages, a necessary but bletcherous compromise.
This porridge was better but still a bit lumpy.
Once DOM-based browsers came along, the elements were in place to satisfy the Presentation group (full manipulation of the rendered page) and the Process group (RPC + UI control). The plumbing guys weren’t happy though, because Remote Scripting either required a client-side Java applet, a non-standard XMLHTTP ActiveX object, or some acrobatic cross-browser hacks using iframes or cookies.
Many people started to build very useful apps based on these elements. These were the people who decided they could live with a browser-specific implementation. Many enterprise apps fell into this scenario, but not many public applications.
This porridge was fairly tasty and getting warm but didn’t have full confidence among the groups.
When IE built XMLHTTP into IE (rather than as an external control) and Mozilla baked its XMLHTTP implementation into its browser, the time was ripe. It wasn’t long until development groups started building rich applications that used it all together.
When Jesse came along and gave it all a name, everyone decided this porridge was ready for eating.
Now we have a zillion flavours of porridge.
With Ajax, the Process, Plumbing and Presentation groups are able to work together with much less friction. Each group’s needs can be met while imposing less constraints on the other groups than before. Many rich applications are being developed which serve as testament to this new ability for the three groups to interact smoothly.
I think some of the most significant advances we will continue to see from here are in the building of abstraction layers that allow modular building of highly interactive apps. The marshaling of complex object data from client to server and back via various serlialization techniques (XML, JSON, etc) has been by and large limited to corporate intranet applications due to performance considerations. With demonstrated tools and techniques that overcome these concerns, newly unified multi-dimensional development groups are already starting to make some very compelling apps that are spilling out of the intranet into the wider Web.