I’ve often thought that my perspective on user interfaces has been shaped largely by the span of my career, having started out as developer right around the time windowed operating systems were gaining notoriety. The early windowed operating systems were of course crude cooperative multitasking systems, really little more than GUI shells.
My objections at the time, however, ran along a different line to the UI development technology itself. The earliest UI SDKs were complex libraries that required complete mastery by a capable software engineer. As such, my concerns were twofold:
- Hardcore software engineers would make terrible UI engineers
- Large teams of capable developers would be required for UI development
Based on my experience with desktop GUI interfaces, both concerns were right on the money.
Some years later I recall hand-coding my first html pages on top of an embedded webserver and thinking that things were about to become much better. Java based MVC frameworks showed up shortly thereafter, which solved the first problem by compartmentalizing the view layer into a simple scripting language. But they did little to address the second concern since the size of a minimal UI team remained relatively large.
Happily, however, current UI technologies have evolved to be well suited for system products.
I recall joining a startup company in 2004 where the product development was running late and little consideration had been given to the UI implementation. While java would have been an obvious choice at the time, this was an embedded product, and the system resources needed for a full blown java implementation weren’t available. Going with java meant a hardware spin and no one had an appetite for that at the time.
At the same time I happened to run into a fresh Caltech graduate and after explaining the problem to him he responded immediately with: ”let me write it in Python.” Six weeks later, we had a fully functional, beta-ready UI. We eventually wrote our own framework and later learned that Google was also a big Python shop.
The takeaway? Scripted languages are the preferred choice for UI development for most products. The development cycles are short and iterations are almost mindlessly easy to turn. And there are a variety of solid technologies to pick from; Ruby on Rails, Python, or PHP.
After several decades, I believe the distinction between systems developers and UI developers is starting to blur. Most of the systems developers we hire today have PHP or Ruby on Rails experience on their resumes. They are also Mac users and carry iPhones, so they intrinsically know what a good user experience looks like. With the underlying technology problems solved, we’re now freed up to think about UI in a much different way. This brings an entirely new dimension to the design of systems products. In my next blog, I’ll talk about the key considerations for UI design in different types of products and services today.