The reason I like to go into such detail about what is required to make a good computer program is that too many people and companies have lost sight of the fundamental reason why computers are valued and worth spending money on: Productivity.
Over time they have becomes tools for other things as well, like entertainment and communication, but none of them are unique to computers. The only reason to play a computer game instead of watching TV or going to a movie is because it is better (or more productive) at entertaining than your alternatives. Why use instant messaging instead of a telephone? For one, you can much more easily carry on conversations simultaneously and over a longer period of time, while having the opportunity to do other things at the same time. Productivity.
The key value proposition for people who are considering buy computers, investing in IT infrastructure, and making software purchases is the productivity effects on the people who are using them. Period. Some are better at making that evaluation than others, but successful people and companies need to make good decisions or they won't be competitive.
In the old days, features were equivalent to productivity results. The more features a piece of software had, the more productive the people using it would be. This stopped being the case when:
- No one was able to fully use all the features of the software (Microsoft Office suffers from this -- each version comes out with a lot of new features but very few users know how to use them at all, let alone efficiently).
- The complexity of the software grew due to all the new features, lack of stability had an increasing negative effect on productivity.
- The vertical silos of separate applications were causing productivity losses as users would switch from one to another, so integration (such as office application suites that could all read each other's files and allow copy/paste between them) became very important.
- An IT department has to manage thousands of computers across a company, it became important to think of not just the end user's productivity but also that of the administrators of the computers, support personal, and so on.
- Features and applications created in isolation did not create a natural workflow, so breaking down the huge complexity of applications (item #1) and across applications (item #3) into easy to discover and follow through end-to-end experiences is needed.
So what are people working on when they're getting it wrong? There's a number of attitudes:
- Creating software because it can be done. This is a lot like the "look what I can do!" attitude, and leads to a lot of hard to use and not terribly useful to use programs.
- Trying to "enable new scenarios". Similar to the first, the idea is that by making it possible to do something that can't be done today, you've made the world a better place. This can be great when the new scenario helps make people more productive, but all too often it doesn't help at all. Since these efforts are usually done in vertical silos, it suffers classic issue #3 above, and likely all the others since it is a brand new thing nobody has tried before.
- Looks are the important thing. Make it cool and visually interesting and all will be good. Unfortunately what tends to happen is these applications do a horrible job with the Foundations, especially Accessibility and Usability, and instead are an impediment to productivity.
- Gluing together a set of new technologies for the sake of it. Special case of the first, this is buzzword compliance that doesn't help anyone do anything more efficiently.
- We just provide raw functionality. They think that software is about raw features (issue #1 above), and that's all they can give their user. It is then up to the users themselves to cobble together a workflow and try to be productive from all the pieces.
So what can you do instead? Focus on the foundation of the entire industry: the productivity of your users (and their support staff!).
- Focus on the workflow, not the features. Features should be supporting cast in your overall story of enhancing user productivity.
- Think about the manageability of your application for large and small IT deployments, as well as home users (naturally this depends on the type of application you're producing, but you might be surprised at how it is used outside the audience you expect).
- Figure out what other applications your customers will be using yours with, and make sure you inter operate well. Go out of your way to support formats and make things easier, this makes your application more plug-and-play into their environment and reduces adoption costs.
- Don't be software-centric when evaluating customer needs. Sometimes the biggest improvement to their productivity is taking what has been a manual task forever and making it automatic, if you're looking too closely at your software and the computer you can miss these opportunities.
- Start from your users, not from your technology or existing code. Software exists as a means to an end, not an end in itself. It is relatively easy to change code, technologies, and so on. It is very difficult to make people significantly more efficient.