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.

Here is how one developer on StackOverflow described the problem:

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.

Dr. Karl Fast, Assistant Professor of User Experience at Kent State University



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.



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.



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 UX design conferences. Some good annual conferences are the Information Architecture Summit, The Interaction Design Association conference, the User Interface Conference, and UX week.

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.

Not logged in
  • Esther Blankenship   4 years ago

    This post is such a great resource. I see I still have a few books to add to my private UI / UX library. Thanks for sharing this with the SAP user experience community!

  • Poltera Anthony  4 years ago

    My experience in South Africa is that the classic SAP UX is too complex. It’s is great to see SAP recognizing this fact and identifying that not ever superuser has the skills that your typical German superuber user may have which includes an engineering degree, a bit of ABAP codingdebugging experience and possibly some UXUI design knowledge too. As a result the UX has suffered especially with custom coded SAP applications. SAP Screen Personas and NWBC is addressing the UX of classic SAP and SAP Fiori and SAPUI5 looks to be the answer for SAP mobile applications to improve the UX.

  • Franz-Dieter Berger   2 years ago

    Thanks for your thoughts, the good structure and readability and all the commented links to learning resources. It is very useful.

  • Peter Danziger   2 years ago

    While the book list is very interesting and complete, i think some of the books are rather outdated, especially if they cover mobile and web applications. Thinks are changing fast in this areas and books from 2009 are quite old.

    • Esther Blankenship   2 years ago

      Hi Peter, which books about mobile and web applications would you recommend?

  • James Hendrix   2 years ago

    I always like to use the car example: Think about cars when they were first invented. The user was responsible for controlling the choke (air-fuel mixture), the transmission gears, a host of other manual options, but worse–without all sorts of wonderful computer tech to monitor and control systems and environment, they were hard to start, hard to keep running, and frequently broke down altogether. And without any real safety testing, design or equipment, the “exception path” of car use cases (i.e., a crash) was exceptionally dangerous.

    The controls (UI) were really not much more than levers and switches to the most basic operating parts of the machine. The chassis took little account for collisions in terms of protecting the user.

    Fast forward, and we have cars that easily start every time, rarely break down with proper maintenance, and usually run at temperatures and inclines incompatible with older cars.

    If you look at most software without any holistic UX design thinking, it mostly consists of the most rudimentary switches and levers that correspond to the code itself. “Here we have multiple values for the user to select, so we have a drop-down. Here we have a toggle switch to turn the option on or off, so we have a checkbox.”

    The chasm that must be crossed by UI dev and code dev in the transformation to UX dev is understanding the end-to-end use cases and removing as many non-value driven interactions from the UI as possible. I don’t manually monitor or control the air-fuel mixture in my car. Computer code figures all of that out for me dynamically in real time and adjusts it automatically, along with which gear I’m in and even accounts for how much of that power will be used for keeping me cool inside my sound-proofed, climate-controlled, crash-tested, airbag-protected cabin.

    Today, I don’t even have to take my keys out of my pocket and insert them into the ignition. I simply sit in my car and press a button. Car starts. Every time. Choke on that.