Software Design 101

I recently read an article about Bill Buxton, Principal Researcher here at Microsoft and it struck a chord with me. Bill is a visionary and has enough accolades to fill up an auditorium but what I find intriguing is that he’s focused on the natural user interface (NUI) verses the graphical user interface (GUI) of computers. Meaning: How we interact with a device as well as the process that goes into designing it.

Case in point: Take the humble computer mouse. Born out of necessity (typing CTRL+F8+N or some other archaic multi-key set to invoke a command isn’t exactly easy) it provided a means to an end. While the features and construction may have changed over the years (e.g. rollerball gave way to optical, wired to wireless, 2-3-4 buttons, etc.) the design remains constant; click for an action and receive some form of feedback. Although this works, taking this interaction a step further would be to remove this device (some say impediment) and use the gift that we as human beings have – our hands. Enter the touch screen interface.

It almost seems absurd to envision a smart phone without a touch screen. This illustrates the need to understand not only what is to be built but moreover how will it be used. Grasping this concept is not always a focal point for software developers as we (present company included) want the application or device that's developed to perform faster, be cheaper and have more functionality than its predecessor. Although I’ve been guilty of the this type of thinking in the past, I will say that over the years I’ve come to the realization that involving either user experience (UX) designers and/or end users during the design phase of the software development lifecycle pays huge dividends. I think this is also why I’m such a big proponent of the Agile methodology as it lends itself easily to this type of process.

Getting the Design Right

Applying good design techniques isn’t rocket science but there are certain guidelines that need to be followed. Obviously designing a solution to the problem is paramount but how that’s achieved varies greatly and separates excellence from average. Using our example of the smart phone, a phone that is lightweight, intuitive and adds value (which aids in ones quality of life) clearly gets the design right. However that same phone that’s bulky, heavy and hard to use fails completely.

The key take away here is that any good design should reduce the complexity for the end user as well as providing worthiness for its use. This encompasses a seamless integration between disparate systems (i.e. technology transparency) by shifting the burden to the engineering staff (thus reducing the load the end user may have once been tasked with) and a layered approached to information gathering.


I think Bill’s mantra sums up this idea of just how important a role design plays in developing hardware or software: “Ultimately, we are deluding ourselves if we think that the products that we design are the ‘things’ that we sell, rather than the individual, social and cultural experience that they engender, and the value and impact that they have. Design that ignores this is not worthy of the name.

Visit for more information on Bill’s upcoming talks/events and his ideas on design techniques.