This is how I go about designing web application interfaces. It's not really an all-encompassing guide, it's more just how I've done it in the past, with some hopefully helpful pointers for those who haven't done it or aren't familiar with some of the aspects of the process. If it's your day job, you may be bored.
Where do you start?Easy, the same place most people do: back of a napkin/beermat/whiteboard/notebook wireframe. Start scribbling. It may sound stupid but if I'm by myself in this process I'll often do it in my own head, just throwing relevant elements around in space and trying to figure out something that makes sense. The wireframes obviously come into their own when used to get the point across to others quickly.
Balsamic mockups is a good enough tool for doing this if you are new to it / need to be consistent to show other people. There's a little bit more to this step than just drawing out an interface - it's at this point that you've got to have an understanding of two other fundamental building blocks already in your head to differentiate you from pointless pixel pushing design that doesn't account for usability: the
use cases and the
data model.
Use casesWhat are the use cases for what you are building? Let's
wikipedia use cases and get some detail. The page says use cases should:
- Describe what the system shall do for the actor to achieve a particular goal.
- Include no implementation-specific language.
- Be at the appropriate level of detail.
- Not include detail regarding user interfaces and screens. This is done in user-interface design, which references the use case and its business rules.
An actor is anyone who will interact with your web site. So in the case of Amazon people wishing to purchase items would be an obvious actor, but there are probably many others, such as administrators, suppliers etc. A brief use case description might look like: "A customer needs to be able to login and browse or search books and then purchase one or more of them." That should be further broken down into possible actions: login, browse, search, purchase etc. In this way we can figure out commonalities with other actors. For example administrators and suppliers will need to login too, so that suggests a base user class and then each of the different actors can inherit from that. But I digress - going to far into this isn't necessary on small projects or on straight forward tasks - but being aware of the process is as it informs what the wireframes will need to contain in order to be useful.
So given the actions we can see the implications of it for the wireframes are:
- Sign up (If they can login the must sign up)
- Login
- Browse
- Search
- Purchase
...So just from that we can start seeing the bare-bones of what a wireframe could look like in our heads and gets us thinking. How much of that should happen on one page? What sort of interactions make sense? And off we go! There's a lot more to good use cases than this simplistic example, so do have a read of the
wikipedia page and it's also well worth checking out
use case diagrams if you haven't seen them before. How much detail and time is needed on use cases? It depends. Massive projects where there are many actors will probably require quite a bit of work to iron out use cases, but on smaller projects working by yourself then I think being aware of the use case process can be enough. The important thing to remember is that they are just a starting point - so they don't have to be perfect.
Data modelWhat's a data model?
Jimmy Wales says:
A data model in software engineering is an abstract model, that documents and organizes the business data for communication between team members and is used as a plan for developing applications, specifically how data is stored and accessed.
Should the data model exist at this point? It most likely won't. If you or someone else has been scribbling one out then great, but it will probably be very rough at such an early stage. So if it barely exists, why am I mentioning it as relevant to creating the user interface wireframing in the first place? Because you should know. A designer working without any understanding of the underlying data model that exists or will exists is really annoying. They tend to come up with absolute crap because they have no common sense in terms of how the user interface will relate down to underlying business logic and storage. They can throw any types of fields all over the screen or infer extremely complex associations with the twirl of the pen tool. Useless.
The JavaScript/HTML mockup
So we have our very rough wireframes and a basic understanding of the app. Next? Start coding. Very much in the 37 signals vibe, (relevant part of Getting Real is here) if it's going to end up as code then there's no point in sticking an intermediary photoshop mockup step in or anything else. In fact I believe designers who design web applications in photoshop are at a disadvantage from the start, because photoshop allows you to hide from the hard parts and the translation afterwards is a pain. Even worse, a photoshop-only designer without extremely strong HTML/CSS/web app knowledge just won't understand the implications of a dynamic interface on their beautiful pixels. Classic examples include when the designer presents a wonderful looking interface shot from photoshop, and the developer in the room has to ask "what does it look like with no data? Or 10,000 bits of data?" Also, we want to minimise any work that doesn't actually end up as executable code. To this end I implement a HTML/JavaScript mockup based on the previous rough wireframes. Really, this is where I believe the real work begins. It's only knee deep in the user interface that you encounter the real implications of the use cases described and their impact on the data model. No amount of planning can match actually throwing forms onto a screen and working with actual javascript to simulate AJAX interactions. jQuery is my weapon of choice for rapidly deploying rich prototypes. I tend to go the whole hog and implement proper grid layout systems (eg. 960 grid, blueprint), css resets etc. so that the mockup is as close to proper implementation as possible. If it's your first time then this kind of work can add a bit of time, but it's worth it and once you've done it a couple of times it'll be very efficient.
This design phase tends to be extremely iterative, in terms of starting with the wireframes and laying it out but then moving beyond that once a first version is built. One piece of advise often levelled at writers struggling with writers block is to just write something and the same thing holds true for this type of work. Using the wireframe as a starting point gets things going, and takes care of writing HTML/JS to represent
something. But once things are actually live in a real browser window I find that extremely quickly I fall into full
flow and at the end of it have a really great set of ideas on the screen and tonnes more to work with. No doubt there are others who like to wireframe everything and then follow these religiously, but I think that misses out on a lot of the power of the full coded mockup - it's at that point I have my best ideas. The first version is usually pretty boring, but seeing it on the screen lets me start to be creative with how things should be solved from a usability and user journey perspective. I know that in some working environments that wireframes (or Photoshop mockups) have to be approved and then followed to the letter, and so my approach doesn't work, but I feel that it is just fundamentally wrong to have such rigid guidelines from the start. It's the HTML/JS mockup that should be the agreed layout, the other steps before were just building blocks and exploration towards it.
Once the HTML/JS is good enough, start templating it and moving it into an implementation.
ProblemsThis approach is built for speed. I believe the timeframe between concept and the html/js mockup should be as small as possible. This is a 'suits me' approach which just can't be applied in certain types of environment. Particularly when approaching an external client's needs, far more time could be necessary in the use case / data model and requirements gathering phase - the deployment of meaningful wireframes and the follow-up mockup depends on deep understanding by the creator of both. Good news though: There's nothing like trying to draw wireframes without really understanding the purpose of an app to highlight what you don't know. If you do manage to get that done, massive holes will appear when you move onto the full html/js mockup.