Recursive Complexity

Thoughts and musings of a programmer and wanna be entrepreneur

User interface

leave a comment »

User interface or UI as its commonly referred to is that part of any software that the user interacts with. It’s the software’s interface to the external world. I have been involved in developing one such UI for the past few months. It’s actually a difficult thing to do considering that there are many use cases which cannot be anticipated to begin with. Contrary to what most people (or most people whom I have interacted with) say that UI development is boring or easy, its difficult and can make or break your software. No matter how good your backend is, if the front end is bad or not aesthetically developed, people won’t use it.

The primary thing anybody should keep in mind while developing a UI is that the end-user is completely dumb! Yes…you heard it right….always assume that the end-user is dumb and then develop the UI. This ensures that even the most trivial of situations will be taken care off. Consider the situation where the user modifies some configuration and exits the application. If you haven’t assumed anything about the user, then a dialog, warning the user that the configuration has changed will go a long way in increasing the usability of the software. Generally people who are not involved in UI development will think that the user will save after he has modified the configuration, but beware…this is not the case in most scenarios (I know because, I myself assume that the software will do everything for me!).

Before developing any UI, what can really help is some empty white sheets, pen/pencil and diagrams representing, if not all, at least most of the pages that form the UI. Showing this to others and the end-user (or QA 🙂 will do in most situations) will really help in coming up with an UI which is useable and also easily maintainable as there would be less number of changes to make. The best example of a well-developed UI is Windows itself. Everybody knows that Linux as an OS is superior to Windows (believe me..It is true), but still Linux has barely managed to get the attention of people who are not software engineers. Linux, only in recent time (thanks to distros like Ubuntu) is able to get more users to it due to some sleek and useable interface. I know many would be laughing at my statement, saying that Windows crashes very often and is of no use, but this again reinforces my point that a well-developed UI can hide the flaws that the backend can have. This is what makes Windows more useable than Linux.

Another useful thing early in the development of an UI is to prototype the initial look and feel and try it out on various machines (TRY IT ON AS MANY MACHINES AS YOU CAN). You will be shocked to see that the UI appears different and behaves differently on some machines (This is especially true in case in mobile applications). I am developing an UI for pre boot software called option ROM. Pre boot environment is different on different machines and this causes many bugs to appear which is totally unexpected. Also, UI for an application may look different on different machines or different operating systems as the rendering engines are different on these operating systems. Systems with advanced graphics will make you UI look better and systems which have very poor graphics will make your UI look very bad. The goal is to make the UI useable and good to look at on most machines. Another piece of advice is, take advantage of the systems graphical capabilities if available. Example, having common code for both Windows and Linux won’t help much as they are totally different in the way they work and render graphics. Have code that take advantage of the platform.

Finally I would like to say that, always draw a line and stop right there. There is no software that’s completely free from bugs or that will do everything! A definite boundary will help in objectively assessing what is done and what needs to be done. A simple but efficient and elegant UI is what everybody wants and that is want you should aim for. Google is the best example I can think of. All these initial testing, prototyping, analysis and most of all, the inputs from others will go a long way in making an efficient and usable interface.


Written by Vivek S

February 4, 2011 at 4:36 pm

Posted in Tech

Tagged with

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

TED Blog

The TED Blog shares interesting news about TED, TED Talks video, the TED Prize and more.

%d bloggers like this: