Five years ago today I made the switch from Windows to OS X and, while I've not stuck with Apple's preferred OS on my hardware for the entire duration, the move has been incredibly illuminating. It's been said on numerous occasions on this site, but the first computer I could call my own was an ancient off-brand 8088 back in 1994. It was on that machine that I learned how to program in Turbo Pascal and Watcom though a pair of books that were instrumental to my understanding of software development. From 1994 through to 2012 the core ideas in those books were used over and over and over again across thousands of projects, evolving as the field developed new processes and techniques. Core to the understanding, though, was that software should be written for the lowest-grade of hardware whenever possible. We can't assume everyone has the latest and greatest computer on their desk, nor should we make people suffer for our own impatience at finding the most efficient means to solve a problem. While I still very much stick to this core idea as much as possible, the platform switch in 2012 brought about a slightly different area of focus when designing digital solutions, and it's one I'm still actively learning about today.
For the first eighteen years, my primary goal was to create great software that would solve the problem at hand as efficiently as possible. The interface that people would see was often an afterthought, though I always tried to make the various elements line up and look good. After using iOS for a bit and seeing just how important interface design can be, I started to take it much more seriously.
Design is a funny word. Some people think design means how it looks. But of course, if you dig deeper, it's really how it works.
— Steve Jobs
While watching parts of Apple's big hardware release a few weeks back, they played an audio snippet with the above quote from the late Steve Jobs. A lot of people have heard this quote, but I wonder how many people think about it.
At the day job I've been working on a project for almost two years1 where I've tried very hard to think more about how the software is supposed to work rather than how "tight" the code is or slick the interface might be. When designing new functions and features, I try to collect as much information as I can from the people who will wind up using that part of the system because, at the end of the day, they are my customer. The software is used by people across the organization with very different sets of goals so, sometimes, the best solution is to write two or more interfaces that draw from the same source of data, but display the information differently. Sure, everything would work if I were to just make a single, unified view that people could then selectively ignore. But I want the software to actually work ... so I ask questions. Lots of them.
Despite working with software for almost a quarter century, I still feel there is a lot left to learn. Every platform has taught me something valuable that is just as relevant today as it was days, weeks, months, or years ago when I would heavily lean on them. DOS taught me the importance of efficiency. Windows taught me the importance of object oriented coding. PalmOS taught me the importance of resource management. Linux taught me the importance of community building. iOS/OS X taught me the importance of designing tools rather than solutions. The web taught me the importance of picking a standard2 and sticking to it. The next area I expect to work in will involve a great deal of voice interaction, and I look forward to the evolution in thinking that move will bring.