In engineering, efficiency and effectivity are two common terms that go hand-in-hand used when implementing a good software design. But it is also a common action that we use every day, whether cleaning the house or crossing the street.

Last week I was shocked and at the same time amazed when my kid asked me, “Mama, what’s efficiency?” At that young age, she already has that vocabulary and I remember a couple years back I have to search for the meaning of the term in IEEE (Institute of Electrical and Electronics Engineers) to really understand in the context of software.

While we are waiting to cross the street, so I began to explain, efficiency is like doing something with less use of your resource.

Crossing the road from point A to point B.

In crossing the road we have two options:

  1. From starting point (A) we can go across the main road then cross again the small road on the other side going to our target block (B).
  2. From starting point (A) we can cross the small road and then go across the main road on the other side going to our target block (B).

But while we are in our starting point (A) we just saw the traffic lights on the main road just turned green and we know that it will be for awhile that it will turn red and then we can go across. So instead of waiting, why not take Option 2 which is to cross the small road first and then the main road in that way we are able to save time in crossing the street – that’s efficiency.

Gosh! It’s amazing how kids nowadays ask such complicated questions.

Going back in software engineering, there are times that a software is efficient but not an effective solution to the problem. So having both concepts in the design and implementation comprise a good design.