Creating great software is hard.
It’s one thing to create software that works. It’s something else to make software that people love. This difference is where many software projects run into problems.
Some of us just have a hard time with the softer aspects of UI design (myself especially). Are “back-end coders” doomed to only design business logic and data layers? Is there something we can do to retrain our brain to be more effective at designing pleasing and useful presentation layers? Colleagues have recommended a few books to me including The Design of Sites, Don’t Make Me Think and Why Software Sucks , but I am wondering what others have done to remove their deficiencies in this area?
I responded to these questions with the answer below. I am reposting my answer here — by request — with revisions for the SAP user experience community. I hope it proves useful.
UI DESIGN IS HARD
To the question:
why is UI design so hard for most developers?
Try asking the inverse question:
why is programming so hard for most UI designers?
Coding a UI and designing a UI require different skills and a different mindset. UI design is hard for most developers, not some developers, just as writing code is hard for most designers, not some designers.
Coding is hard. Design is hard too. Few people do both well. Good UI designers rarely write code. They may not even know how, yet they are still good designers. So why do good developers feel responsible for UI design?
Knowing more about UI design will make you a better developer, but that doesn’t mean you should be responsible for UI design. The reverse is true for designers: knowing how to write code will make them better designers, but that doesn’t mean they should be responsible for coding the UI.
Today people speak of UX design more than UI design. This is because while users want usable interfaces, what they really want is great experiences. The phrase “UI design” is still relevant, but it’s part of the larger and more holistic concept of UX design. So for the rest of my response I’ll speak about UX rather than UI.
WHY IS UX DESIGN HARD?
Good UX is hard because it involves two vastly different skills:
- A deep understanding of the machine. People in this group worry about code first, people second. They have deep technological knowledge and skill. We call them developers, programmers, engineers, and so forth.
- A deep understanding of people and design: People in this group worry about people first, code second. They have deep knowledge of how people interact with information, computers, and the world around them. We call them user experience designers, information architects, interaction designers, usability engineers, and so forth.
It’s like the question of which is more important, work or family? Saying that family is more important does not say that work is unimportant. Rather, it says that when push comes to shove and you have to pick one, family comes first.
Similarly, a developer must focus on understanding the machine first. Understanding people is important, but secondary. What UX designers do is flip this around: people first, the machine second. Making great software involves both views, the associate skillsets, and great collaboration.
Another way to look at this is the value that these two groups—developers and designers—create as they go about making the digital future.
- Developers make it work. They implement the functionality on your iPhone, your Kindle, your favorite website, etc. They make sure it actually does what it is supposed to do. Their highest priority is making it work.
- Designers make people love it. They figure out how to interact with it, how it should look, and how it should feel. They design the experience of using the application, the web site, the device. Their highest priority is making you fall in love with what developers make. This is what is meant by user experience, and it’s not the same as brand experience.
It takes years to become a great developer, and just as long to become a great experience designer. Developers should expect to find UX design hard, and UX designers should expect to find writing code hard. Neither should expect that they can master both.
HOW TO GET BETTER AT UX DESIGN
I have three pieces of advice for developers who want to get better at UX design.
1. Recognize design as a separate skill. Coding and design are separate but related. Interface design is not a subset of coding. It’s not a superset either. It requires a different mindset, knowledge base, and set of skills.
2. Learn about design. At least a little bit. Try to learn a few of the design concepts and techniques from the long list below. If you are more ambitious, read some books, attend a conference, take a class, or even get a degree. There are lot of ways to learn about design. Joel Spolky’s book on UI design is a good primer for developers. You can read it in a few hours and learn quite a bit. The book is an introduction to the topic, and somewhat dated, but still useful. It’s like reading a book about programming that explains variables and basic flow control, but doesn’t talk about methods, exceptions, or database connections. There’s a lot more to UX than what Spolsky covers and that’s where designers come into the picture.
3. Work with designers. People who do this work go by various titles. Today, the most common title is User Experience Designer (UXD). This is an umbrella term that includes Information Architecture (IA), Interaction Design (IxD), and Usability Engineering, among others. Regardless of title, these people think about design as much as you think about code. You can learn a lot from them, and they from you. Work with them however you can. Find people with these skills in your company. Maybe you need to hire someone. Or go to some conferences, attend webinars, and spend time in the UX world.
There are many things to learn about UX. Don’t try to learn everything. If you knew everything below you could call yourself user experience designer. Then you would no longer be a developer.
Start with things near the top of the list. Focus on specific concepts and skills. Then move down and branch out. If you really like this stuff, consider it as a career path. While many developers eventually move into managements, UX design is an increasingly viable option. Designers with a strong understanding of how the software works are valuable.
Learn fundamental design concepts. You should know about affordances, visibility, feedback, mappings, Fitt’s law, poka-yokes, and more. The two books to start with are The Design of Everyday Things (Donald Norman) and Universal Principles of Design (Lidwell, Holden, & Butler)
Learn about user experience. This is the umbrella term for many user-centered perspectives on designing software, systems, and experiences. The classic primer here is The Elements of User Experience (Jesse James Garrett, 2nd Edition). I also recommend A Project Guide to UX Design (Russ Unger & Carolyn Chandler, 2nd edition). What I like about this one book is how it covers the full scope of UX design work in a way that helps you apply UX techniques to an an entire project.
Learn to sketch designs. Sketching is about rapidly, and cheaply exploring design options. It is about ideation, not art. It is also much faster than coding a digital prototype and fits well with any agile methodology. The key text here is Sketching User Experience: Getting the Design Right and the Right Design (Bill Buxton). I particularly recommend the companion workbook which has many practical methods and techniques for sketching interfaces and experiences. For a good primer on how and why designers sketch, watch the presentation How to be a UX team of One by Leah Buley.
Learn paper prototyping. This is that fastest and most agile way to iteratively develop and evaluate an interface before you write code. Different from sketching and usability testing, though closely related to both. The definitive book here is Paper Prototyping (Carolyn Snyder). You can also get a good DVD on this from the Nielsen Norman Group.
Learn usability testing. Discount testing is easy and effective. But for many UIs, usability is hard to do well. You can learn the basics quickly, but good usability people are invaluable. If you want a book, the classic is The Handbook of Usability Testing (Jeffrey Rubin & Dana Chisnell, 2nd edition). It’s thorough and practical. The most well-known starter book on this topic is Don’t Make Me Think: A Common Sense Approach to Web Usability (Steve Krug, 2nd edition). I caution people about this one because Krug makes it sound easier than it is. But it is a good starting point.
Learn about interface design patterns. Yes, there are pattern libraries for interfaces and they’re damned useful. For web sites, I recommend The Design of Sites (Van Duyne, et al, 2nd Ed) although it’s from 2006 and a bit dated. For desktop applications I recommend Designing interfaces (Jennifer Tidwell, 2nd edition). For web applications I recommend Designing Web Interfaces: Principles and Patterns for Rich Interactions (Bill Scott & Theresa Neil). For mobile apps, try Mobile Design Pattern Gallery (Theresa Neil)
Learn about information architecture. The main book here is Information Architecture for the World Wide Web (Louis Rosenfeld & Peter Morville, 3rd edition). A good starter book is Information Architecture: Blueprints for the Web (Christina Wodtke & Austin Govella, 2nd edition).
Learn about interaction design. The main book here is About Face 3: The Essentials of Interaction Design (Alan Cooper, et al, 3rd Edition). A good starter book—thinner and less overwhelming—is Designing for interaction (Dan Saffer, 2nd Edition).
Learn fundamentals of graphic design. Graphic design is not UX design, or UI design, but concepts from graphic design can improve an interface. Graphic design introduces design principles for the visual presentation of information, such as proximity, alignment, and small multiples. I recommend reading The non-designer’s design book (Robin Williams, 3rd edition) and then, if you want to go further, the classic book Envisioning Information (Edward Tufte)
Learn to do user research. Where usability tests an interface, user research tries to model users and their tasks through personas, scenarios, user journeys, and other documents. It’s about understanding users and what they do, then using that to inform the design instead of guessing. Some techniques are interviews, surveys, diary studies, and cart sorting. Good books on this are Observing the User Experience (Elizabeth Goodman, Mike Kuniavsky, & Andrew Moed, 2nd Edition) and Understanding Your Users (Courage & Baxter).
Learn to do field research. Watching people in the lab under artificial conditions helps (i.e., usability), but there is nothing like watching people use your code in context: their home, their office, or wherever they use it. Goes by various names, including ethnography, field studies, and contextual inquiry. Here is a good primer on field research. Two of the better known books here are Rapid Contextual Design (Karen Holtzblatt et al) and User and task analysis for interface design (Hackos & Redish).
Attend workshops and webinars. You can take workshops, webinars, and online courses. This is far from a comprehensive list, but you might try the UIE virtual seminars, the virtual seminar series from Rosenfeld Media, and the workshop training from Cooper. Conferences are also a great place to find workshops.
Consider a degree. Developers could consider a degree in Human-Computer Interaction, although because these programs are in computer science departments they may emphasize writing code over design, usability, field research, and so forth. If you want to learn about the design of digital artifacts and devices from a human-centered perspective, then you probably want a graduate program that’s not part of a computer science program. Some options include Interaction Design at Carnegie Mellon, the d-School at Stanford, the ITP program at NYU, and Information Architecture & Knowledge Management at Kent State (disclosure: I’m on faculty at Kent State and we have concentrations in user experience, knowledge management, and health informatics; we are seeing more and more developers moving into UX design instead of management, which is interesting, because management is the traditional path for developers who want to move away from writing code while staying in their field). There are many more programs beyond the ones I’ve listed here. Some of them are online, but most are not or offer only a few classes (our program at Kent State is fully online as of fall 2013, and the HCI program at DePaul has been online for many years). Each program has their own perspective, areas of emphasis, and technical expectations. Some programs have roots in art and visual design schools (e.g., the CMU program in interaction design), others in library and information science (e.g., the UX program at Kent State), and some from computer science (e.g., the HCI program at DePaul). Most are hybrids, but every hybrid has deeper roots in one or more fields. If this interests you, look around and try to understand the differences between these programs.