I spent some time over the past year tinkering with Arduinos and Raspberry Pis and had a bit of a realization: Hardware circuit components are simply the syntax for creating physical devices. As a software person, putting hardware into that context has really given it a lot of meaning.
software
Isolate, Understand, Implement
Isolate, understand, implement: three very important things to remember when adding, modifying or replacing features on a project. The first step is to isolate the feature. Hopefully, your project is designed in such a way that once the code is isolated it is in a single place. The next step is understand. Meaning understand what the code currently does. Run the unit tests. Make sure you know without a doubt why the code works and what the code does. Also understand any effects that your changes might have. And finally, implement the new code or changes. During this phase you’ll modify the unit test set as appropriate, make the necessary changes to the code base, and ensure that the application is stable before pushing it back to your repository.
Presentation Is Everything
PRESENTATION IS EVERYTHING
There is something that learned over the past couple of years, presentation is everything. It is quite possibly the most important element in all we do.
Presentation from the aspect of leadership can mean the difference between shared vision and unengaged worker bee. Presentation from the aspect of a product ( in my case software product) means the difference between phenomenal success and utter failure of a product.
In short, no matter how good or revolutionary your product is, if it looks bad, it will fail. To have a physical product example, look no further than the current mobile phone market. Look at two products: one you like and one you hate. What are the specs of each one? Are they comparable or does one have an advantage over the other. Now, for arguments sake, lets say the more “cool” one has a better physical appearance and a more flashy user interface but the one that is less “cool” looking and has a plain user interface has better specs and capabilities, which one would you buy? I’m betting (and society proves) that the “cooler” one with the more flashy interface wins out more than the other device. I’ve got no facts in front of me to prove this directly, only experience and my own beliefs.
FIXING OUR SOFTWARE
So how do we fix our software? Well here are some design concepts to keep in mind.
- The API and/or the user interface for software must be intuitive.
- The software features must be discoverable. This means that users can learn to use the software by using the software. There is not a need for an involved manual to pick up the software and begin using it.
- The software must be easy to use. This is an ambiguous and loaded statement I know, but never-the-less it must be true. Just think about the software you are writing from the user’s perspective.
These are some of my most important concerns for a software product because if a user cannot easily pick up your software and start using it immediately, then you will have problems with adoption within your targeted user base. As with the mobile phone example above; if you have two pieces of software equivalent in terms of capabilities and specs, but one is presented a lot better and is more user friendly, which would you choose?
Going Forward
What we’ve learned here can be summed up in the two following statements. Software must be intuitive, discoverable, and easy to use. Also, presentation and appearance are quite possibly the most important part of software.
Recommended Applications
This article contains a list of free and/or open source applications I recommend for various tasks. I use some of them, others come highly recommended. This is current as of January 3, 2010. I will periodically repost newer editions of this as needed. Go to the next page for a full listing of applications. Continue reading →