Sunday, May 24, 2015

Good and bad software

I'm going to start with an argument.

Software exists because people are lazy; not that it's a bad thing. Throughout the history, it's been one of the greatest sources of ingenuity. A wonderful catalyst for ridding inefficiency.

It all started with a lazy person, defining a set of instructions for a machine, for it to do something people are bad at, and machines fantastic.

Those lines of code, running on a piece of hardware, helped that person to get more work done. Ideally, the time invested in instructing a machine to work for us, is far less in a long run compared to us doing all that work ourselves, impeded by human limitations.

Software exists to use computer's potential on tasks which people struggle with. People simply need to focus on instructing it. Sadly it's the focusing part where things usually take an unexpected turn from the ideal road. Right through the safety rail of professional training. Over and off the cliff of common sense. Straight into the bottomless pit of irrational. I visualized the problem below.

Given that a same amount of people, with equal skillsets, are working on a software project with identical goals, it's more likely that they end up with what I personally think as bad software.

Such software doesn't do what software is supposed to do. If you get stuck on the user interface part, you're missing the reason why people use your product. You have just instructed the machine to play hopscotch with the user, instead solving a user problem. The balance is just way off. Bad instructions, bad software. No amount of excuses change that.

Beautiful, well performing and behaving user interfaces can be built with relatively little amount of code, if you know what you're doing. If not, you easily end up with a complex and overdone interface; a monstrosity that needs even more complex customization options to tame -- or fire to kill, as it depends.

Still, game over.

Becoming blinded and trapped by the user interface iteration loop is very easy. It's the most visible thing for everyone in the project. That's why it's so important to be aware of this danger. Adding more interface easily feels like adding more value. How wrong can people be. You only waste resources on things that:
  • end up eating even more resources since you're stuck with maintaining it
  • restrict your options for potential devices and businesses in the long run
  • distract user from the real value your product offers = less appealing product
"But Jaakko, isn't there many other areas as well that affect software goodness / badness?"

Yes. There are. A lot in fact. However, this one is something everyone can and should understand. It doesn't take a computer science PhD to figure this stuff out. It's especially important for companies whose business depends on software quality. Even more so with startups and small companies.

I'm going to end with an argument.

Your company exists because people are lazy. Make sure your product focuses on helping them, like a good software does.

Thanks for reading and see you in the next post. In the meantime, agree or disagree, debate or shout. Bring it on and spread the word.


  1. Hi Jaakko,

    Good software can't exist without good idea. You can create the best and the effective software, but when you don't understand to problem, you never create useful thing. It will create more problems than it will solve. It's like create Formula 1 car for work on field =)

    You don't need to be skilled to have a vision. But experienced worker sometimes can't create something new and struggle in routine. Human factor is most important for creating new project in team.

    1. Hi Naecken,

      That's absolutely correct, thanks for mentioning it. I was too busy assuming everyone have a good idea that they want to make into software. Bad idea rarely helps anyone, regardless of the way it's implemented.

      Still, even a simple tool like [add your favorite software tool] can be made better by focusing on the reason it exists. Adding more effort to what makes it great, ensuring it stays relevant.

      Thanks for commenting, have a nice Sunday :)

    2. It's Sunday, but very cloudy... So, it looks like a good day for listening new music and playing with my Jolla =D

      Have a nice Sunday too =)

  2. > Software exists because people are lazy

    This idea does not cover all possible cases.
    For example: can you imagine nurse who will run between 10 beds per second and check patient's conditions (which might include 3-5 different parameters)?
    Another good example is routing. What is faster: to route paper mail or email?
    Which way is more reliable: to switch traffic lights manually or to have micro-computer there? I would say that properly designed automated system is more reliable than manual switch.

    1. Hi Viacheslav,

      That's the thing. Machines do many things much better than humans ever can. It's not purely driven by laziness, but the goal to improve and optimize. If we do something repetitive long enough, we will eventually start figuring out a way out of that work, or at least finding tools to make it easier. Otherwise it will lose purpose and stop being rewarding / meaningfull.

      People have always used tools to help themselves survive. Software and computing are both just tools to do the same.

      Maybe using a word lazy was uncalled for, but it's much faster to start a post with that, instead of diving into human incentives to do stuff :)

      Thanks for reading and commenting, take care :)

  3. Most good sofware that I use, comes from people scratching their own itch. I they've done the same repetitive task for N number of times, they end up creating a tool to make it less time consuming
    That's one of the biggest advantages of free/open software.

    1. Hi tanghus,

      This is an excellent real-world example of human desire to improve. It's even better example of a really pure reason for a software to exists.

      Thanks for the comment, my next post will have more thoughts about FOSS development.

      Take care :)

    2. I had actually forgotten that I had responded to your post, but reading back is mostly A Good Thing(TM) ;)

      Personally I find your distinguishment[*] between good and bad software flawed.
      Some in the FOSS circles could/would take it as a fight between KDE and GNOME/Unity communities, but I prefer to see it as a struggle to have control over your data and software. I loathe having software taking decisions for me, but I enjoy being able to tell my software what decisions it should take - on my terms.

      [*] My spell checker doesn't recognize it as a word..?

    3. Hi Thomas,

      Yep, it's flawed, imperfect and provocative. My writings are merely a vehicle for opening discussions and inspiring critical thinking. No writing escapes obsolescence :)

      Having control over the software is important. Just like you have control over a physical tool you've crafted according to publicly available instructions.

      If you're instructed to create a tool that has overly complex mechanism just for the sake of engineering feats, or due inability to decide what the tool is for, you need to use more time for crafting it, and potentially end up with a tool that is worse than its simpler counterpart. For me, this is bad software.

      On the other hand, if the tool requires complex mechanism to fullfil its purpose, it's inherently wrong to not have instructions to build the required complexity. For me this is good software.

      All in all, the goodness or badness of software is a horrible topic to simplify. Still, it should be discussed and paid more attention to, just like we're doing here.

      Good to see you again, and thanks for pitching in :)

  4. ;)


    1. Hi Zeta,

      Indeed. XKCD strips are great. However, this particular one has a fault in it. It assumes that the person who does the optimization, lives in total isolation. In other words, the work done could not possibly benefit anyone else, who hasn't yet spent any time on the trying to solve the same problem.

      When we share information collectively, the effort spent in creating that information becomes less and less relevant, since more lives are improved because of it.

      Thanks for dropping that inspirational link, come back soon :)

    2. Hello Jaako,

      Don't put the blame on XKCD's author, I used his picture in a different context, as it was still related.

      Have a nice day !


    3. Hi Zeta,

      Not at all, I think it was aptly linked, and supported the discussion. I love XKCD because it forces me to think.

      Cheers :)