The Importance of Being Defined
Friday January 30th, 2009I have been a savvy computer user for as long as I can remember. Whether it was games, productivity suites or MSDOS, computers have been a familiar tool to me for a very long time. Its no surprise then that I went on to study computers in university and ultimately work with them on a daily basis. To this day in fact, my family jokes that I will have to have my laptop surgically removed. To my benefit, I have learned a great deal about not only how computers work but why they work the way they do. To my detriment, I am usually chosen as the person to share that knowledge with the less savvy individuals in my life.
Computers seem to present a very unique problem to a lot of people. Despite their penetration into our daily lives, so many people seem to view them as a complete black box when it comes to how you use them. The general acceptance that computers are weird little machines that seem to act differently depending on the time of day is not only absurd to me, but also something that I feel needs to be corrected amongst the general population. Its almost like saying that every time you get behind the wheel of a car you don’t know how its going to act, so you might as well let it drive itself.
The truth is that regardless of their capabilities, computers are very simple machines. They perform only the actions that they are given. They do not make assumptions based on previous instructions and very very rarely will they ever perform the exact same task twice and provide you with two entirely different, unrelated outcomes. In fact when you get down to the root of things, computers are anything but intelligent.
Now a lot of people would argue (and I’m sure they could provide me with plenty of valid examples) that what I just stated is false and computers are in fact fickle, complicated, inconsistent machines. While it may seem true in the final experience, it doesn’t change the fact that computers can’t think. What does change is the software people use as a means to harness the computers abilities. At that point, the entire quandary falls back on the shoulders of developers and the companies who create the software in the first place.
As developers and software manufacturers we insert ourselves into the equation between the machine and the end-user. Ultimately we are in complete control of how people use our software and whether or not it does the job for which it was intended. With that in mind, its important to go back to my original point – computer’s are stupid. When the people responsible for creating software assume things about the machine they inevitably have a negative impact on the final experience. In order to create successful software, we need to remain incredibly diligent with our understanding that computer’s can not work on assumptions.
Obviously, the idea of ‘no assumptions’ is a lot easier said than done but that doesn’t mean you should abandon the idea. Failing anything else, the most important thing in the no assumptions mindset is defining your software. Ask yourself the following questions:
- What is our software?
- What does it do?
- Who is it for?
- What concepts will exist in the software environment?
- What do each of those concepts mean?
- What are we trying to achieve?
Understandably the list above minimizes the effort involved in defining a complex piece of software but in the very least it creates a perimeter around which you can define things further. With a strong definition of your software at a high-level (i.e. in plain English) you can feel confident that all key stakeholders truly understand what’s involved. Whether its in sales, marketing, management or development a high level, detailed, concrete explanation of what you are trying to achieve will be of infinite value as you move forward.
With your definitions in mind, scope is clearer, functionality becomes more evident and your team will gain a better understanding of the bigger picture. After all if you don’t know where you are going, how can you expect to ever get there?
“When the people responsible for creating software assume things about the machine they inevitably have a negative impact on the final experience.”
Also: When those people make assumptions about *the user* they’re guaranteed to have an even worse impact on the final experience.
Users generally don’t (want to) think of “software”. They have goals to achieve and needs to fulfill (you know :p) Developers should understand this and design software in such a way that it helps them achieve those goals. This is funny because when software fails at that, users tend to respond like “stupid machine!” and not “stupid programmer!”.
Here’s a good line from Jono DiCarlo:
“It is a sin to waste the user’s time, break the user’s train of thought, or lose the user’s work.”