“Most of the hard core C++ programmers I know hate user interface programming.” – Joel Spolsky
/wave Shizuka 🙂
“…the cardinal axiom of all user interface design:
A user interface is well-designed when the program behaves exactly how the user thought it would. As Hillel said, everything else is commentary. All the other rules of good UI design are just corollaries.” – Joel Spolsky
So true, but so damn hard to do. Worse, it’s gotten much harder in the thirteen years since that was written. As an example, we’ve been going back and forth internally over the Set List in our Dance Jukebox app. It has a real world analog, musicians use them all the time, so you’d think we’d be able to describe what we want and get to something Good relatively quickly.
And you’d be wrong.
It’s taken us nearly six months. Maybe we’re just not good at this sort of thing. We sure have been doing a lot of learning along the way. However, the bar has also been rapidly climbing, even in the relatively short time since we started working on it.
Some things which are giving us fits:
1) Describing interactions – It used to be that users had pretty much four things they could do to anything visible on the screen: click, double-click, press and hold, and right click their mouse. And frankly, a vast majority of the time that was way too complicated, so clicking typically had the same action as double-clicking and none of the others did anything, because they required the user to discover them. Anything which requires discovery to operation is wrong. With the advent of touch, the number of actions has gone up, outpacing our ability to describe and discuss what we want to do with each other. The spec writing grind/prototype phase has become even more critical, and longer…
2) Animations – Even when we add more time to work through the nuances, we run into the limitations of our language. Describing how an animation would work, in words, is just painful and rarely results in Good. We’ve tried mocking them up in Keynote’s suburb (for presentation software) animation system, but even that doesn’t quite get all the way there. Add in other effects, like parallax, and it fails completely. Not just because the tool does, but because hardly anyone even knows what that is. Sure, some people might recognize it if they see it, but they don’t *know* it well enough to visualize in their mind. So any written form describing it might as well be gibberish.
3) Joy – It’s become so much important that our users actually enjoy using our software. Not just that they get done what they want to do, but also that they enjoy doing it. On iOS, this madness has gone so far as to add a full physics engine to the repertoire, complete with the concepts of gravity, momentum, and elasticity. Our user’s don’t give a damn about the specifics, but they can sure feel the difference when they touch something which feels Good.
I continue to seek ways to get this done to my personal standard – in the general case as well as the writ small.
I am driven by the sense of visceral terror that coursed through me while sitting in the WWDC Keynote during the announcement of iOS7. It reminded me of time long ago when I was building 2D sprite based games, and I saw Lara Croft run for the first time. The exhilaration, the challenge, the fun, the inevitable self-doubt, the wonder, the mystery. That was an experience I had alone.
Apple is demanding so much of their developers by setting their user’s expectations so high. It’s simply unclear to me that most of us will be able to reach the new baseline.