By Peter Bell

How to Build a Web Application

I've been doing a *lot* of thinking about the most efficient and elegant way to design and build a web application. Here's my best thinking to date. Any input appreciated . . .

Business Intent
Why bother building the website? What is it going to do for your clients? I know some clients just want you to "build this", but I've consistently found that if we don't agree the organizational objectives upfront, it comes back to bite us later when we're discussing the UI or the functionality as we don't have a frame of reference for the discussion. Also, a lack of clear business intent tends to encourage scope creep. When we know the exact business problem we're building this project to solve it's easier to decide whether we *really* need a HR benefits portal as part of the sales extranet we're developing.

This is also your chance to maximize the value and the quality of the project for a very small investment of time. If the business intent is to "increase traffic", ask why. Chances are the goal is really to increase sales or leads, so at the very least you should consider measuring and improving conversions before bringing yet more prospects to an uninviting and confusing landing page.

Essential Tasks (Essential Use Cases)
What tasks must users be able to achieve via the site for it to achieve the business intent(s)? When a client just wants to take about their website, it may seem like an extra effort to describe everything in terms of use cases and to relate them back to the business intent that they're designed to solve, but it's worth burning an extra hour or two to help the client to think WHY they want a store locator or what the purpose of the "about us" page is, and when you get to the custom document exchange or workflow system or job tracking dashboard, without use cases you're extremely unlikely to build a system that achieves the business intent. It's a simple approach, but it really helps with traceability between functional requirements and their underlying business intent. Of course, having a catalog of re-usable use cases for common requirements that can be customized is often a great way to make this process more efficient for the objectives that aren't completely unique to the client.

Screens and Actions
I've tried a lot of different ways of specifying applications, but in my experience, until I have at the very least a complete list of screens and controller actions for each use case (including optional and error flows) I have no idea of the scope of a project. Of course, if someone wants a "with a twist" project, you may well be able to just select packages and allow them to customize the screens and actions to meet any custom requirements, but in my experience, until you have a complete list of screens and actions you don't really have a sense of how much work a project is going to be.

The biggest challenge I have with screens and actions is that most of my clients really don't want to think about them. They throw out a paragraph or two about the problem they're trying to solve, expect a fixed bid based on that and are often insulted that you are so stupid that you can't figure out exactly what it'll cost to build their application based upon what to them is a very clear two paragraph spec! Of course, as you start to ask questions about the app it is clear that even THEY have no real idea of how the app would work, how many screens it'd require or even what use cases are necessary. It still amazes me how many clients who at this point can't believe you won't just give them a number and sort out the scope of the project after you've agreed how much it is going to cost (*boggle*).

These days, depending upon the complexity of the app I either make up a list of screens and actions that wouldn't be a horrible implementation and provide a fixed bid for that or (if I can't do that in under three hours) just recommend an hourly discovery phase with a 20 hour initial undertaking. I also send over a document to clients who "know exactly what they want and don't need a discovery phase" describing the information I need them to send me about every single screen and controller action for each of their use cases. I don't really expect that they'll fill it out, but you never know - it might happen one day. It's also a fairly polite way to blow off someone who wouldn't be worth working with anyway. Of course, if anyone actually HAS a magical way of providing an accurate fixed bid for a fixed scope, bid, and timeframe project before you know the scope, please make a comment below!

Information Architecture
Between the business intents, essential tasks and their screens and actions, we have a pretty good sense of the functionality required, but not of the way to access it. The next stage is to develop a site map and a structure for the UI in terms of what should go where to allow users to achieve their essential tasks easily. Right now, we just fire up our content management system and we're working on a simple CSS framework that will allow us to create a skinnable wireframe to which we'll be able to attach design elements and a color scheme later in the process once the "wireframe" of the UI has been approved. I think this process is best done timeboxed in person rather than as an iterative process as a fair amount of discussion/consulting is often required. Where there are multiple decision makers, a single round of revisions for some options/choices may be required.

Functional Wireframe
Because we have a collection of Domain Specific Languages for describing and generating the code for screens, actions and the underlying object model (objects, relationships, properties, value lists, transformations, validations, class and object methods, etc.), we generate a first cut of the app based on the screens and actions described (and the object model that can be inferred or lightly designed from the details of those screens and actions). I'm still playing with the process, but I think the next step should be a client walk through and a single round of revisions to the screens, actions and underlying object model to lock down and approve the application functionality.

Look and Feel
Some designers may disagree with me, but I feel that for the vast majority of smaller web apps (consulting, project management, programming, design and deployment for under $25-$35k) it is best to start with the business intent, use cases, information architecture and then to generate the functionality to ensure you have a site with an IA optimized for the essential use cases and you have a working system which the client can add real content to. At that point, skinning the approved wireframe and adding design elements within a prescribed CSS framework allows for a very cost effective way of getting a professional looking site which you know is likely to work to solve the business problems and work with the functioning site because you have built the working site before skinning it with the appropriate design elements.

Any thoughts on the approach? Input appreciated!

Comments
I'm surprised to hear that you have clients who don't want to think about screens and actions - especially screens. In my experience - largely products in recent years rather than custom sites for external clients - screens are about the *only* thing my "clients" want to deal with and, more to the point, they're the one of the few components that drive meaningful discussion. I've found that until folks have something to look at (comps, wireframes, etc.) they don't actually know what they want.

It's hard for clients and developers alike to visualize and create a project from nothing. The sooner I can get a few design comps in front of the business owners, the sooner I start getting feedback I can do something with.
# Posted By Rob Wilkerson | 10/15/07 11:47 AM
It's worth noting that the design comps aren't necessarily intended to convey the final look & feel of the site/application. That can be easily re-skinned if the application is built right. They're better used (at least in early stages) to illustrate the user experience and screen flow, IMO.
# Posted By Rob Wilkerson | 10/15/07 11:49 AM
The business intent is only half the story when thinking about "look and feel". User goals are the most important piece of information when building an application. Many small applications with little money behind them often suffer from a lack of understanding of users' goals and, as a result, fail miserably in the hands of a real user. This is different than thinking about the tasks. Task support goals and must be considered only after you fully understand what the end user is trying to achieve.
# Posted By Rob McKeown | 10/15/07 12:27 PM
Peter - where do you see specifying the design of the data backend? Depending on the project, the data backend design could be extensive. What technique do you use to capture that part of the project and present it to the client?
# Posted By Bruce | 10/15/07 4:54 PM
I'd highlight the need for at least one persona; a detailed representation of a primary or typical user of the application. If you have a very clear picture of the application's user (and by clear picture I mean just that; a name, age, photograph, skills, hobbies, everything) you can better understand the application's requirements, know what are the *real* problems to be solved, and make quality implementation decisions. Everyone (you and the client) wants to have a satisfied user, and a persona provides a common language for discussing what will bring about that satisfaction.
# Posted By Tim Buntel | 10/15/07 4:59 PM
@All, thanks guys for all the feedback!

@Rob W, I find a non-trivial number of clients who just want a website to appear by osmosis. They don't want to have to think through the screens required or how the site should operate, they just want to say they need a site that does X, for me to provide a fixed bid, to build it and then to keep tweaking it for free until it is what they'd envisioned (but not communicated). Obviously that doesn't work too well :->

@Rob M, Very good point. I should have clarified that when I work with a client, we look very specifically at the end user motivation for each use case. You're right - just because I'D like you to search for an item and then buy lots of it, unless that is meeting your needs as the end customer it isn't going to happen. Thanks!

@Bruce, I find that in simpler (non-trivial, but simpler) projects, the back end design can be inferred from a complete list of screens. You can infer and use heuristics to generate the object model for a collection of screens and actions (the objects, relationships, properties, lists, etc.). I find that I can create fairly worthwhile projects without formally designing or communicating the design of the object model which is just as well as in my experience, most CEOs or marketing managers in smaller businesses are completely incapable of discussing object model design decisions anyway - they just see screens.

@Tim, Gonna have to disagree with you here - for a very specific reason. I've played quite a bit with personas, demographics and various other approaches to designing a site. I think that personas can be a great technique for understanding the motivation of an audience and coming up with a list of use cases (and a Rob M mentioned, end user motivations for the use cases). However, if you have the business intent and use cases, the persona isn't essential. I think it is a great tool, a useful adjunct, and an ideal way of eliciting use cases and motivations as you try to think about audiences, but I'm not convinced it is essential. I've also found that for the scale of projects I work on it is "one bridge too far" in terms of supporting deliverables - I try to remove every single thing I can that isn't essential to the final product and I've had decent success without personas. All that said, they are a GREAT tool for understanding audience motivating and thinking about use cases, so where you have the time/budget to do them, they are very compelling. i'm also (as always) open to being completely wrong on this. Maybe I'll add them in to a couple of projects and see if they pay for themselves and/or whether I should offer them as an extra cost alternative.
# Posted By Peter Bell | 10/15/07 8:40 PM
@Tim, Hmmm, sleeping on it, I'm wondering if you were right . . .

http://www.pbell.com/index.cfm/2007/10/16/Do-Perso...

:->
# Posted By Peter Bell | 10/16/07 5:48 AM
BlogCFC was created by Raymond Camden. This blog is running version 5.005.