Saturday, August 2, 2008

Designing the cart before the horse

One common piece of advice for people who design and/or build software is that you should leave designing and building the user interface until the end. I'm sure that there are people for whom this advice makes sense, but it doesn't jive with me at all. Usually the UI is the thing I work on first. I have a few reasons that I think are very, well, reasonable. Working on the user interface first helps me focus on that—the experience that the user has with the software. This is supremely important. If I don't know who's going to use it or what they're going to use it for, I can't be certain that I'm going to meet their needs. Focusing on the interface first makes sure that I cover my bases. I may still dream up features I need later on, but at the very least I probably won't have built something that turned out to be unnecessary.

That's not the only reason. Working on the UI is usually very inspiring, at least to me. It's very rewarding to see something come together from nothing, and there's nothing as visual and obvious as the UI. Even if at first it does nothing, it still makes my progress clear to me. I tend to become disheartened when I can't see what I'm building; working on the UI first is one of the easiest ways to make sure that this doesn't happen to me. Once the first prototypes of the user interface are built, I can start making bits and pieces functional, which is just as exciting. There's also the large added benefit of being able to use the various non-functional UI elements as a checklist of sorts, so I know roughly how much work is remaining. It all helps me get a feel for what I'm designing earlier on than drawings on paper or in Photoshop would.

There are still good reasons for not working on the UI first. If it's something relatively uncomplicated like some kind of server maintenance tool, you could very well waste too much time on something that only one or two people will ever see. And Joel Spolsky had a good point once that making something look pretty too early in a project gives the wrong impression that things are further along than they really are, which can probably only hurt you in the end. But, given the choice, building the user interface first (or at least early) is still my preference for most projects.

(Somewhat ironically or at least hypocritcally, for the last large project I started, Pawn, I didn't work on the user interface first. I decided that it wouldn't even have a UI until many months into the project. Now though, when I work on new versions, designing and building the UI for the new features is pretty much the first thing I do.)

1 comment:

g said...

This makes a lot of sense, Travis.

Since software ultimately is about interacting with humans, more software developers would be wise to focus first on human interaction.

This strategy also helps me focus on the end goal, while programming, as sometimes I can feel mired in the details.