UI-First Software Development

April 2, 2008

We're currently in the midst of building the new web property I alluded to in a previous post. Before I write a single line of code, I want to have a pretty clear idea of what the user interface will look like first. I'm in complete agreement with Rick Schaut here:

When you're working on end-user software, and it doesn't matter if you're working on a web app, adding a feature to an existing application, or working on a plug-in for some other application, you need to design the UI first.

This is hard for a couple of reasons. The first is that most programmers, particularly those who've been trained through University-level computer science courses, learned how to program by first writing code that was intended to be run via the command line. As a consequence, we learned how to implement efficient algorithms for common computer science problems, but we never learned how to design a good UI.

Of course, UI is hard, far harder than coding for developers. It's tempting to skip the tough part and do what comes naturally -- start banging away in a code window with no real thought given to how the user will interact with the features you're building.

Remember, to the end user, the interface is the application. Doesn't it make sense to think about that before firing up the compiler?

It's certainly true that there are limitations on how the UI can be built based on the technology you're using. Just because some pixels can be arranged a certain way in Photoshop doesn't mean that can magically be turned into a compiling, shippable product in any sane timeframe. To ameliorate that problem, take advantage of visual design patterns. If you're building a GUI application, use a palette of widgets common to your GUI. If you're building a web application, use a palette of HTML, CSS, and DOM elements from all over the web. Let the palette enforce your technology constraints.

It shouldn't be difficult to sit down with a few basic tools and slap together a rough mockup of how the user interface will look. However, it is extremely important at this point to stay out of technical development environments when mocking your user interface, or the temptation to turn the model into the product may be too strong for your team to resist. Try to avoid the prototype pitfall.

So how do we prototype the UI without relying on our development tools? One way is simple paper prototyping.

paper prototype

The book Paper Prototyping: The Fast and Easy way to Design and Refine User Interfaces is an excellent introduction to paper prototyping. You can interactively browse sections of this book at Amazon, through Google Books, and the book's own dedicated web site.

There's a certain timelessness to paper prototyping that holds a deep appeal, as Jacob Nielsen points out:

Paper prototyping has a second benefit, besides its impact on your current design project's quality. It will also benefit your career. Consider all the other books you've read about computers, Web design, and similar topics. How much of what you learned will still be useful in ten years? In twenty years? In the immortal words of my old boss, Scott McNealy, technology has the shelf life of a banana.

In contrast, the paper prototyping technique has a shelf life closer to that of, say, paper. Once you've learned paper prototyping, you can use it in every project you do for the rest of your career. I have no idea what user interface technologies will be popular in twenty years, but I do know that I'll have to subject those designs to usability evaluation, and that paper prototyping will be a valuable technique for running early studies.

Paper prototypes are usually pitched in terms of doing low-fi usability studies, and rightly so. But I find a paper prototype tremendously helpful even if I'm the only one that ever sees it. I need to create an image in my mind of what I'm building, as it will be seen by the world, before I start pouring the concrete to make it real.

If you need any more convincing that paper prototyping is an incredibly valuable tool-- even for mere developers-- consider the advice of Jared Spool's company, User Interface Engineering:

I also recommend reading through Common Concerns about Paper Prototyping if you're still on the fence.

But what happens when you outgrow paper prototying? Jensen Harris, one of the principal UI designers on the Office 2007 team, first introduced me to PowerPoint prototyping:

We use PowerPoint as kind of a better version of [Office 2007] paper prototypes. This technique has several advantages: prototypes can be made to feel somewhat interactive, because the content is electronic it can be modified more easily than paper, and (best of all) the usability participant uses the mouse and is on the computer, so it feels natural to them.

Of course, it doesn't have to be PowerPoint. Use whatever tool you like, as long as it's not a development tool. You don't want something too powerful. What you want is mild interactivity while remaining simple and straightforward for quick iterative changes. That's the logical next step up from paper prototyping.

PowerPoint prototype example

It's a lot easier to share this digital artifact on a distributed team than it is to share a bunch of physical paper. If you're curious about the nuts and bolts of PowerPoint prototyping, dig in:

The pursuit of UI-First software development is more important than any particular tool. Use paper, use PowerPoint, use Keynote, use whatever makes sense to you. As long as you avoid, in the words of Manuel Clement, pouring concrete too early.

How does your team practice UI-First software development?

Posted by Jeff Atwood
109 Comments

Wait, are you moving back in time, to old Delphi days of dumbly slamming random code in Button1Clicks? Nooooooo!

Clever guy on June 6, 2008 5:08 AM

@Alex Clarke:
What if your IDE is a limiting factor in UI design? What if there is 10x better, nicer and more efficient way to implement UI and integrate it into the code without using IDE UI design tools?

Igor Levicki on July 9, 2008 4:11 AM

As for the guy who said Firefox Options UI was an afterthought I completely agree and I find it horrible.

Igor Levicki on July 9, 2008 4:12 AM

Felix,
I agree with you to an extent, but being a very visual person, designing "wire-frame" click through pages has helped the a few teams I have worked on tremendously. It helped us define the architectural requirements and structure in a much more concise manner when documenting it out after "rough" UI sketches.
UI first can be truly powerful and assists very well in making sure that everyone from the stakeholders to the trench developers are on the same page. I believe in presenting data requirements in a number of formats. Some people can see clearly, all the possible scenarios that could arise from a simple case diagram, but many times once is an actual UI we begin to realize that there is more there that is required. Additionally, some people can sit down and write solid and precise specification while not missing a thing. Still further, some people can interpret the written word in many different perspectives.
My two cents are to build project requirements and specification in many different media’s or styles. Include the case diagrams, include the “faux screenie’s”, and include the obligatory written word document so that it is easy for anyone to wrap their head around.
What is it? People learn by four different mechanisms? Visual, Textual, Oral, and sound? Some people excel in one are or another and presenting data in a multitude of delivery mechanisms can help cover all the bases.

Now don’t get me wrong… I am not suggesting volumes of redundant documentation here, just enough to force you to look at the problem from many angles. Nor should this be any type of replacement for documentation either...

Fun angle Jeff. For some it is a way of life, for others it may seem illogical.

Ryan Anderson on February 6, 2010 10:24 PM

Is paper protoyping really future-proof? Could it handle the 'Minority Report' interface? However, I do get the point that if the application will have an interface, the interface should be designed first.

Personally I usually throw a form together in Delphi/VS first and then see where that takes me. Once I think I've got something that looks vaguely usable then all I have to do is double-click on a form element to make it do something.

John Ferguson on February 6, 2010 10:24 PM

How come the prototype Excel 2007 chart dialog is better than what they actually implemented?

Jon Peltier on February 6, 2010 10:24 PM

About decoupling UI and backend: Al Cooper writes the same book every couple of years, in which he argues that the skillset of interaction design and programming are almost entirely different, and that UI design should be the responsibility of specialist interaction designers, not programmers. Certainly I've seen enough "geekware" that is plenty powerful, but hides its features behind formidibly complex UI or obscure features. The firefox browser might be an example: the tools-options dialogue is very much an afterthought; to /really/ change the configuration, you type in about:config in the address window, and then navigate through an endless sequence of cryptically named configuration options (WTF does dwhelper.adult do?) until you get to the one you think you want.

Jason Stokes on February 6, 2010 10:24 PM

Thanks for the information shared here. that was an interesting and informative. I had a good experience by participating in the Adobe Summit in 2009 which features the latest developments on the Adobe Flash Platform that is of utmost importance to both developers, as well as designers.. I learnt lot of new technologies in Adobe. And I am planning to attend 2010 edition as well. I found the information about the conference from adobesummit.com

satpal on July 23, 2010 3:32 AM

I just bought a huge whiteboard. Problem solved: Eco-friendly Whiteboard Prototyping.

Diego AC on June 16, 2011 2:01 PM

«Back

The comments to this entry are closed.