GUI Programming is Hard

by Eric M. Burke


I believe GUI programming is significantly harder than server-side programming. This flies in the face of common industry practice. I believe that programmers with J2EE skills are more marketable than those having GUI development skills. I also believe that server-side programming positions offer more money (and fame) than client-side programming positions.




GUI builders make it easy to think GUI programming is easy. Nearly anybody can whip up a decent-looking GUI in no time at all using a GUI builder. Done.




Server-side programming is different. EBJ can seem extraordinarily complex, particularly when you are just starting. It is much harder to whip up a quick and dirty EJB system, giving the impression that server-side coding is harder to do.




A bad programmer will continue to struggle with EJB. A good programmer will find ways to automate nearly every aspect of EJB, however. That's the secret of server-side programming: it is very well-defined and repetitive. Thus, it can be automated. Check your favorite Model-Driven-Architecture (MDA) tool. They work best when generating server-side code, things like EJBs, database access code, and web services. They might be able to generate a rudimentary GUI, but a really GREAT GUI cannot be automated.




Good GUI versus Bad GUI



Let me qualify what I said in the first paragraph. Creating a bad GUI is really, really easy. Creating a "good" GUI is really, really hard.




I enjoy GUI development for precisely this reason. I like the challenge. Here are some reasons why it is hard to create a great GUI:



  • Everybody wants to contribute. The GUI is immediately visible, and every person on the team wants their particular feature. Server-side developers contend with technical challenges, but client-side developers contend with many more social and political challenges.



  • The people "designing" the GUI are not GUI experts. People who are business analysts can dictate the GUI design.



  • People are often attached to their legacy GUI design and cannot think in terms of more modern approaches. For instance, a designer might be obsessed with some weird "button bar" concept because their 4GL tool offered the same thing.



  • People migrating text-based systems to GUI-based systems often want to cram too much data onto the screen.



  • With web apps, people want to force HTML to behave just like a fat client GUI, regardless of how difficult that may be.




And the list goes on...



What Does it Take?



So what does it take to create a good GUI? Having the right people is the most important factor. You have to find a handful of people with some magic blend of technical and design know-how. How do you quantify good GUI design skills? I do not know. A great GUI is a work of art.



Assuming you find a team of really good GUI designers, you must give them power to enforce consistency. Here's where it often breaks down. At one end of the spectrum, you have too many people designing the GUI so you end up with really complex, cluttered, difficult screens. At the other end of the spectrum, you have a handful of bad designers forcing the programmers to create a really stupid GUI.




A Few More Random Thoughts



This is a really big topic to tackle in a blog entry. I'm sure people will point out all sorts of things I forgot to say. Here are some more things on my mind...



  • Skins are evil. Skins look cool, but impede usability. They offer the illusion of a good GUI. Most skinnable apps are bloated, slow, and hard to use.



  • People are quick to criticise Swing, but most bad GUIs are bad because of stupid designs. You can create great GUIs in Swing.



  • Good keyboard navigation is essential to good GUIs. This is also very hard to get right. IntelliJ IDEA is a perfect example of a great GUI with great keyboard navigation.



  • In-place table editing is virtually impossible to get right and companies consistently underestimate how hard it is. For instance, what happens when you hit Enter while editing in a table? Should the default button on the screen be activated? Should the selection move to the next row in the table? Everybody has a different opinion.



  • GUI code is notoriously hard to test in an automated fashion.


9 Comments

roseman
2004-04-02 09:26:22
Human-Computer Interaction
There's a whole discipline called HCI that deals with issues surrounding usability issues (and to a lesser extend, interface design). The people involved in that tend to come from a broad range of backgrounds (computer science, psychology, sociology, management, etc.).


You touch on why things are hard... because everyone figures they already know how to design, but few realize there are specialized skills and people out there - go find them!

aristotle
2004-04-02 14:33:25
Yes, it is.
In fact, it is so hard that I've not yet come across a single GUI app that didn't suck. I'm not a keyboard cowboy by conviction, but the fact is the Unix toolset mindset grants the user an almost endless degree of freedom. No GUI I've seen so far comes close — not because I think it's impossible (although I do not think it is possible to match the full power of linguistic expression with visual relations), but because the user doesn't have a way to recombine elements of the graphical interface to achieve effects not explicitly anticipated by the GUI designer. You can only do the things the GUI designer thought should be possible.
gerald_bauer
2004-04-05 00:25:32
Using XUL (XML UI Language) For Design
Creating a good UI is much easier if you separate between design (e.g. XUL/CSS/etc.) and code (e.g Java/Javascript/etc.). Hardly anyone is a master designer and a master coder at once thus you need to split the work. And no, Java for defining UIs is not an option for designers.


For how you can use XML today to create Java Swing UIs or Eclipse UIs check out the Open XUL Alliance site @ http://xul.sourceforge.net listing more than half a dozen open source XUL motors/runtimes/browsers/players such as SwiXML, Thinlet, Ibex (formerly XWT), Luxor and so on.


- Gerald

betis70
2004-04-05 14:32:48
Text to GUI
Boy you hit the nail on the head with that one. I have been working on a text-to-gui conversion and at first, they wanted the GUI to look pretty similar to the character version. I've argued against it and tried my best to get them to rework the design significantly, but in the end they ended up winning out, with only a few obvious improvements. We are presenting way too much info all at once. But they wanted it that way and they pay my salary so ...


You can only hit your head against the brick-wall of higher-ups so long.

chirael
2004-04-05 18:49:36
Text to GUI
If it's really a poor design, then there may be ways to subtly get the *users* to sway the opinions of the higher-ups. For example, advertise a feedback link on the help page and/or intranet.


Without a method of feedback, the users will usually silently curse the IT department and silently lose productivity, but with a method of feedback you may 1) learn what aspects of the design are the worst for the users, and 2) get ammunition to build a case for presenting to the higher-ups.


Combine feedback from business users with actual numbers relating usability to productivity/money (see Jakob Nielsen's useit.com; http://www.itweek.co.uk/Features/1136858), and there may be hope. It's a delicate thing to do, but worth the crusade IMO.


Oh, and if you don't actually get negative feedback, your users may have gotten so used to the old/bad system that they built a set of compensating behaviors that have become so routine that the new system being like the old one is actually not bad design *for them*.


This may or may not really be the case, but first you have to establish a feedback mechanism which allows you to document how users really feel. Better yet, see if you can add some simple metrics in the system or do some simple user testing, since "users may think they want one thing when they need another" (http://www.useit.com/papers/focusgroups.html).

chirael
2004-04-05 21:10:05
See also: "Spray on Usability"
http://daringfireball.net/2004/04/spray_on_usability
lieberman
2004-04-27 14:12:55
Human-Computer Interaction
Roseman nailed it.


Check out the ACM Sigs on CHI - www.acm.org/sigchi , and if you're in the Bay Area, attend a Bay-CHI monthly meeting - www.baychi.org .


To me, Interaction Design is the glue that ties in most, if not all of the elements discussed in the CHI sector.


Check out Alan Cooper's book (bible) on Interaction Design - 'About Face 2.0', and his site - www.cooper.com .


I also heartily recommend his book 'the Inmates Are Running the Asylum', should be required reading for anyone in the industry.

betis70
2004-05-12 11:12:37
Human-Computer Interaction
Thanks for the CHI info. I didn't know about them.
yk
2004-11-04 22:27:14
Career in GUI programming
Hi,


I work as a Technical Writer in a software firm.
I do test the GUI as a part of my job. I am interesetd in GUI programming.
I have already done the short course in HCI.
Does anybody know, how to break into this field??


--yogesh