Creating good software is a very complicated, even in a small project there are hundreds if not thousands of little details you have to get right and it's easy, not to say tempting, to reflect this complexity in the user interface.
High end "enterprise" software is actually expected to look and feel very complex, otherwise how can you justify the amount of money you spent on it.
The concept of simplicity is very popular right now in the software development world, and someone who hasn't worked on "simple" software before might think simplicity is about doing less, or making the code simpler, but it's not.
I'm developing time tracking software called yaTimer, yaTimer's slogan is "The Easiest Way to Track Your Time", to achieve that yaTimer's user interface has to be extremely simple – and it is, it makes the software look simple and basic.
In order to show a simple interface to the user you have to hide a lot of complexity under the hood, here are some examples from yaTimer:
- You can see how much time you spent on each task right on the main window, to show this number without reading all the task history from the database you have to de-normalize the database just a bit, that means the same value is saved in two different places (on the task for quick access and as a sum of all the timings in the task history), those two values have to be kept synchronized, and it has to be completely transparent to the user.
- When you click the start button the timer starts counting immediately, if you think about it for a moment you'll notice that the timer should change only a full second after you start it – but if you do it that way it looks like the timer isn't running.
- yaTimer has really nice reports, let's just say that creating good looking reports with headers, footers, page count, graphs and all the other reporting features is not trivial.
- And right now I'm working on synchronizing yaTimer with other systems (including other copies of yaTimer), building a synchronization system that works as expected is a tremendous amount of work, but all the user will see is one item on the menu that just works.
The synchronization system is really complex, it has to be – synchronization is a complex problem, but I'll fight the temptation to build a complex UI for it, the user will click the "Synchronize" item on the menu and after a short wait (with a progress indicator, obviously) the system will be synchronized.
No one will know the amount of work and complexity that went into it.
Good software looks simple and is easy to use, but as a rule of thumb, the simpler and easier a software system looks the more complex it was to design and build it.
posted @ Wednesday, May 21, 2008 2:12 PM