A number of years ago I was part of a team that developed a workflow application for a company to replace a paper based process. The new workflow app was quite a success in testing and training, so we felt fairly optimistic about the rollout. On a Monday we stood in a bullpen area in the company’s Manhattan headquarters and watched the application go live. One woman used the application to fill out a form and then, rather than hitting submit and sending it on its merry workflow way, printed it out and put it in her outbox.
I’m sure most people involved in systems development have experienced this sort of infuriating situation — I’ve seen enough "DO NOT PRINT THIS FORM!!!" messages on the bottoms of pages to know I’m not alone. No matter how much testing and training is done, some people can’t get their heads around a new way of doing things. They remind me of those stories of the industrial age, when new machines were introduced into traditional ways of doing things, often to comical results.
In order to avoid being stuck in the past like this, you have to remember why you do things in the first place and continually question if they are sensible or necessary. I remember when I started designing what now would be called web applications back in 1994 or so. Stateless searching and reporting was easy to do, but the major challenge came in chopping up your application into different "pages", retaining state across several page loads and dealing with the "Back" button, a sort of rogue "Undo" function that didn’t play nice with the application design. You ended up doing lots of kludgy things that you wouldn’t do in a GUI or command line application. You had to think differently in order to build successful web apps.
As I review the various web application frameworks, most of which have the page based concept at their core, I have an uneasy feeling that we’re missing an opportunity to rethink how we build webapps. Isn’t it time to discard the page model and go back to a component model that has been so successful and productive on the desktop? Imagine undo functions that don’t depend on the "Back" button, Browser specific code that is concentrated in a few classes, powerful, rich client applications in a fraction of the code. Let’s rethink and DO NOT PRINT THIS FORM.
