Building powerful software
Saturday, December 6th, 2008How to define “the power” of a software application? From time to time, people on discussion boards use the adjective powerful (or best) in conjunction with software. What does it actually mean? It may seem obvious. But as many obvious things, it is actually quite foggy.
What is powerful software?
Since I develop software related to images, let’s limit the scope of this paragraph to “what is a powerful image editor”.
Definition v. 1: The most powerful image editor is the one that allows users to modify images in just about any format in just about any way.
By this primitive definition, a simple hexadecimal binary editor would be considered the ultimate, most powerful image editor on Earth. This is a clear nonsense. User must be part of the definition.
Definition v. 2: The most powerful image editor is the one that allows user to perform as many tasks as possible. Task must relate to image editing, but they are defined by the user.
This is better. If we are given a single user, we can measure how successful the software was. If a software has features needed to perform task X, but the users is unable to find/use them, it does not contribute to total power.
There are still problems with the current definition: Each user is different, they have different skill sets, knowledge, and the tasks they want to perform. It is clear that we must work with a representation of all the users instead of with just one. It would be reasonable to represent all users with a couple of typical ones. Each one should have a importance factor associated with him/her (bigger group = bigger importance).
Definition v. 3: The most powerful image editor is the one that has the greatest sum of successfully completed tasks for all relevant users.
If there is only one user (the author
) able to fulfill 100% of tasks and all others are only able to perform 10% of them, the total power of the software would be near the 10% mark. On the other hand, consider another software allowing all of its users to perform 20% of their tasks. Which one would you rather create and sell?
How to increase power of your software?
If we agree on the last definition, it gives us hints how to increase power or at least avoid decreasing it:
Add feature
This is the common strategy. All software developers love adding features and making check lists. Adding features allows users to perform another task, previously impossible. But it also makes the software more complex and thus decreases the users’ ability to use the application. In short: it significantly improves one task, but slightly worses all others.
Remove feature
Yes, removing certain features from a software can increase its power. Many software developers (including me) have instinctive aversion to removing features, but we should know better. Removing a feature may worsen task X, but other tasks should improve, because the application is easier to use with less features. Sometimes even task X may not worsen, because it can be accomplished using other features.
Add tutorials/context help
Teaching the users how to perform a task in your application can drastically improve its power. While it is imaginable that too much dumb help may actually worsen the application, it is usually not the case. Personally, I’m switching to web-based (mediawiki actually) help, it gives me the maneuvering space to quickly react to users’ needs in this area and to use modern technologies (like tutorial videos).
Simplify user interface
This is actually a variant of the “Remove feature” hint. 10 years ago, only people with affection for technology used computers and Internet on daily basis. Today, as the number of people using computers increases, the technical knowledge and skills decrease on average. Making the user interface simpler can open new market segments and hence make your software more powerful in the end.
Summary
Removing a feature that took a lot of time to implement is hard for each software developer. Nevertheless, in today’s world it is often the right strategy. If you believe that your software has the best features and people still like using competition, which evidently does not have as much functions as you, consider removing or simplifying it.
The situation might be even harder in an open source project without a central authority. The GIMP is obviously overloaded with features and the sheer amount of them prevents most users from working effectively.
I have and will continue following my own advice and keep this blog updated.