Anyone can wire up a model. The hard part is the hour after somebody opens your app for the first time: whether they can find the thing they came for, whether they understand what just happened, and whether they come back tomorrow. That is the part we work on.
The fundamentals, taken literally
None of this is new — most of it is older than the web. It is just rarely
done all the way through, so here is what each one costs us.
Show what is happening
A person should never have to wonder whether the thing they just pressed is working, finished, or broken.
In our apps
Every control in our apps answers within a second — with the result, a spinner, or an error.
A click that does nothing visible is filed as a bug, not as a slow page.
Say it in their words
Screens should speak the language of the person using them, not the language of the database behind them.
In our apps
No internal codes on a user-facing screen, and no error that only makes sense if you have read the source.
If a sentence needs a glossary, it gets rewritten.
Make it easy to change your mind
People explore software by pressing things. That should be safe, and the way out should be obvious.
In our apps
Cheap actions get an undo rather than an "are you sure?".
The expensive and irreversible ones — and only those — get the confirmation.
Prevent the error, do not just report it
The best error message is the one that never had to be written, because the interface would not let the mistake happen.
In our apps
Dates come from a picker, amounts are bounded, and lists are chosen from rather than typed.
Where something still goes wrong, the message sits next to the field that caused it and says what to do next.
Show, do not make them remember
Nobody should have to hold what they picked two screens ago in their head to finish what they are doing.
In our apps
Choices stay visible while they still matter.
Every step of a long form can be looked back at without losing what has been typed.
Be boring on purpose
A better-but-different control is usually worse. Familiar beats clever nearly every time.
In our apps
One button, one date field, one way to pick a person.
Shared across our apps, so learning one of them is most of the work of learning the next.
Works for everybody, or it is not finished
Keyboard, screen reader, big text, poor contrast, one hand, bad light, slow connection. All of it is normal use.
In our apps
Every input has a real label.
Every dialog takes and returns focus.
Colour is never the only thing carrying a meaning.
Be honest about the AI
A confident wrong answer is worse than no answer. People need to know what the machine did and how to overrule it.
In our apps
Anything generated is labelled as generated.
It is editable before it counts.
It never quietly becomes a decision on somebody’s behalf.
Real UX, Real People, Real Kaizen
Opinions about interfaces are cheap and everybody has one, ours included.
User testing means that UI meets user expectations.
1
Watch
We sit with people while they use the thing. Five sessions finds most of what is wrong, and it finds it before anyone has argued about it in a meeting.
2
Guess out loud
A written prediction: what we think is going wrong, what we will change, and the number that should move if we are right. Written down first, so we cannot decide afterwards what we meant.
3
Ship the smallest version
The narrowest change that could test the guess, in front of real users within days. A change that takes a quarter to ship is a change nobody will ever be able to attribute anything to.
4
Measure honestly
Against the number we named in step two, not one chosen afterwards because it looks better. Flat is a result. Worse is a result we publish internally rather than quietly roll back.
5
Keep it or Clean it
Most ideas do not survive this, including ours. What is left is the part of the product that has actually earned its place on the screen.