I finally understand something that has been nagging me for years.
It's the answer to "Why do the majority of software developers shun user interface design."
The user interface is the part the customer usually sees. It should be the glamorous or satisfying part of software development.
It is like building a car without caring what the interior, dashboard or exterior look like. Sure the motor and wheels are important, but who wants to drive or buy a chassis with motor on it? Judging by what I see on the road, very few people.
The reality is that the user interface design is:
- Part art form,
- Subject to a lot of scrutiny and criticism,
- Requires an understanding of how people use an application to do actual work, and
- Really hard to get right.
Sure the graphics, buttons and other related items are best left to a graphics designer. That is a specialized skill in itself and most developers don't have it.
User interface design is much more than the graphics fonts and colours… and it is as much an art form as it is a science. There are some good patterns and rules of thumb, but as the application gets more complex, you need to apply some creativity and intuition. Good designers have a tendency to know what "feels" right.
Creativity, intuition and feel are unfamiliar territory for many developers.
Scrutiny and Criticism
The user interface is where the customer generally spends most of their focus. After all, they spend most of their time interacting with the application through the interface.
Every user will have a different opinion on design. Everyone through the whole acceptance and testing chain will want to make changes.
Let's face it. Most people don't like criticism. Developers are no different. Although I would argue that a good agile team has learned to accept feedback from others as a chance to grow rather than taking it as criticism… after all the goal is to make the application as good as it can be.
But the application code doesn't tend to be judged on so many different levels. If it does what it is supposed to, passes the tests and follows standard patterns, then it is considered to be good code.
User interface is different; it is subject to much more scrutiny and criticism from a lot more people.
Understanding User Interactions and Business
This is probably one of the big reasons.
Building the user interface is not building one screen in isolation. It is not building a bunch of screens in isolation.
To get it right you need to understand the business domain and how the customer does their work in that business domain. Then you need to design that into an interface that can actually be built (in the budget you have) and accomplishes workflow as efficiently as possible.
Sure there are business rules in the code and good domain driven design is important. But so too is ensuring that the business logic manifests itself in the user interface and that the user interface is consistent across the entire application.
You then need to test the user interface with the customer and optimize any inefficiencies or bad design.
All this interacting with the customer requires strong communication skills… and patience.
Overall this is very hard… right up there with overall application design and architecture.
Getting It Right
Let's face it. A good application starts with a good user interface. If a user can't figure it out or every step requires multiple clicks or inputs; you won't be popular with the business users. If you have a software product it will be hard to sell or get word of mouth working for you. If it is an internal application, the uptake may be low.
If the interface is ugly, the formatting poor or the colour scheme a dog's breakfast, then the first impression will stick in a customer's mind.
Getting is right consistently is hard.
Getting it right; understanding the business domain and user application interactions; being able to handle scrutiny and criticism; and exercising your creative and intuitive skill… that is very hard indeed.
And the answer is… most people naturally shun the hard path.
Even if it leads to the greatest rewards.