How many programmers do you know who are good at programming, but not at graphic design?

Creating good end-user interfaces is a skill that is independent of both programming ability and graphic design, though it has some connections to both. And I've known plenty of programmers who lack it.

I often like to say that when programmers attempt to communicate they tend to be precise and ineffective. Precise in that their words mean exactly what was said. Ineffective in that whoever they are talking to doesn't understand, and often the programmer has a hard time seeing how they couldn't. Our attempts to communicate through our user interfaces tend to be like our attempts to communicate in speech - precise and ineffective. What we say is correct and precise. But is not understood.

As a random illustration of the problem, someone who creates good end-user interfaces has to have empathy with how a user who doesn't understand the filesystem will interact with their applications. (Most users do not understand the filesystem.) How easy is it for programmers who generally work with fairly complex filesystem layouts to do that and empathize with how those users will interact with our programs?

Now there are many useful programs that do not need good end-user interfaces. For instance programs written for internal use do not - if things are unintuitive you can take the time to train people. And they are often willing to follow poorly understood instructions by rote. Likewise programs written for programmers often do not need good end-user interfaces - programmers are not normal end-users.

But if you are building an application that normal people are expected to use in large numbers without instruction or the opportunity to ask for help, then you need a skillset that most programmers aren't very good at.

Cheers,
Ben