Applicom's Blog

Product updates, news & miscellanea from your fellow Apollo developers.

This blog has moved! Head to the Building Apollo blog »

Tony Mobily's picture
By Tony Mobily
Thursday, June 30, 2011 - 18:15
0 comments

Featureful, user friendly software isn't impossible. It's just hard.

This is one of those blog entries that should have an empty body, because the title should say it all. To me, it's like people spending (or wasting) million of dollars in clinical studies aimed at proving the absolute obvious: smoking kills; exercise is good for you; a good posture helps with back pain; and so on. The truth about software development is simple -- you can ask any working programmer, if you don't believe a random blog entry in a product's web site.

(At this point, a disclaimer: I am one of the people behind Apollo. Apollo does project management and CRM together with calendar, cases&deals, interactive timers, and so on. And yes, this article draws from my experience at Apollo.)

So:

Writing easy to use software that does something simple is easy.

In fact, it's every programmer's dream. Writing a piece of software that allows you to ping a host is dead simple: it only needs you to enter the remote host's IP address; it might have some configuration options like the number of pings, the delay between each one of them, etc. But it takes real skill to make something like this "hard to use". It's even simpler to make it easy to use. If you're Apple, you make it with one field, one button, and no configuration option -- if you need anything extra, use "ping" in the command line! And they are right.

Writing difficult-to-use software that does something difficult is the easy way.

If your software needs to have a lot of functionalities, even deciding where the user will need to go in order to access them is quite complicated. Imagine that you have a list of customers, and want to be able to send them a text message automatically. Where do you put the buttons? Next to each person's name? Or in the "person view", when you click on the person? What about bulk texts? A checkbox next to each name? Doing it right is a challenge -- and this isn't even a complicated piece of software! Whacking buttons everywhere, with checkboxes all over the show for bulk send, will get you something that works -- but won't get you something good that works well.

Writing featureful, user friendly software isn't impossible. It's just hard.

Here we go, my point. Some people seem to think that only ridiculously limited software can possibly be easy to use -- and that software that does a lot will necessarily become very hard-to-impossible to use. While it's true that you have to walk the line when you write software. You have to juggle code complexity, number of features and options, and user interface. If you have many features and options, you will need to be very careful with the code you write, and with the user interface. They will both need to be very carefully crafted, or the code will become very buggy, and the interface inconsistent. Having too many features and options will leave you almost certainly with bad code and a bad interface. Having too few features? That's simple: that's just lazy.

The question is, how many is too many, and how little is too little? It depends. That's the real challenge -- and it depends on how much you want to spend -- and money is the big issue here. Because when I say "hard", I mean "expensive". If you are the market leader, and decide that not devoting resources in your main piece of software is a good choice, that's 100% fine. However, you will need to realise that your competitors, sooner or later, will catch up with you. The keyword here is "lazy". If you are not the market leader, and decide not to develop new features because you are happy with your small customers base, that's fine too: you are probably making more money than most hard working programmers out there, and you're not even programming! The keyword here is "mediocre". If you are a promising piece of software, and sell out your customers and your code to a bigger company that then shuts you down, that's fine too because you accomplished your objective, which wasn't about providing fantastic software but having a fantastic balance in your bank account (while your customers wonder if they deserved it). The keyword here is "greedy".

If you don't want to be lazy, greedy, nor mediocre, then you have only one option: work really, really hard.

Welcome to the real world.