Skip to content

Are you efficient or effective?

May 28, 2009 by Mendelt Siebenga

Efficiency and effectiveness are two words that are often used interchangeably. Many methodologies promise 'increased efficiency and effectiveness'. I find this strange because in a rapidly changing environment like software engineering these two are often mutually exclusive. I think in order to understand agility it’s important to understand the differences between these two and the tradeoffs you are making between them.

How to be efficient
Traditional production techniques based on Scientific Management developed by Frederick Winslow Taylor about 120 years ago focus almost exclusively on efficiency. They does this by standardizing methods for performing work so workers can be interchanged easily, simplifying tasks by splitting them up into many simple subtasks that can be assigned to specialized workers and by increasing batch-sizes so many of these tasks can be done in series.

These ideas have also been applied to software engineering. The process can be split into analysis, design, implementation and testing. Workers then specialize in one of these tasks. By making sure that the result of each of these phases are meticulously documented it also becomes possible to move people on and off projects to maximize the amount of work they do. By performing these tasks in big batches, first all analysis, then all design etc. efficiency can be increased even further.

This allows you to do the maximum amount of work in a minimal amount of time. Unfortunately there is no way to know if you are doing the right work and if you are delivering the right quality until the end of the project. And even then it's hard to see where the real problems lie because the client did sign off on the documentation after every phase of the project. Efficiency is easy to measure and easy to manage. That's why it gets a lot of attention but by focusing exclusively on efficiency effectiveness suffers.

Become more effective instead
If you want to do the right work instead of just doing a lot of work you need to address a couple of issues. Lets look at how agile addresses these

First of all we need to make effectiveness more visible. We need to get rapid feedback when about the effectiveness of the work we're doing at any time. Is the feature we're implementing solving the client's problems? In order to do this agile methodologies have several feedback loops built in. TDD allows us to check the quality of our code continuously. Pair programming provides instant code-reviews but most importantly by delivering working code often we get feedback from our clients.

In order to be more effective we need to be flexible. When requirements change we need to be able to change direction too. This can be done by minimizing work in progress. By working in small increments and finishing all work after each increment we're able to re-evaluate goals during the project.

Splitting up work and having different groups of people work on different phases of a project can also be ineffective. Information is lost between phases of the project. Even when an analyst has the right idea about what software needs to be built this information is worthless when not communicated to the rest of the team. Agile methodologies address this by collocating teams. Documentation should not be the only means of communication.

So what's it going to be?
So you can't have both. What should you choose? Effectiveness or efficiency? Like always it depends. But trading in some efficiency for effectiveness will often turn out to be the right choice. There's no use in running very fast if you don't know if you're running in the right direction.

About the Author: Mendelt Siebenga has been working as a software developer for close to ten years. For the last five years he has been applying practices and ideas from XP, Scrum and Lean in several adverse conditions like in fixed-price projects, teams distributed over several timezones and even during a SOX compliance implementation.

Comments

well put

May 28, 2009 by Olaf Lewitz (not verified), 41 weeks 1 day ago
Comment id: 2625

What you say is not new, but you brilliantly put it in a concise and understandable way. I just attended the SEE 2009 Conference in Berlin, where a lot of the waterfally guys would have profited from this...
Thanks!
cheers,
Olaf

Efficiency and Effectiveness

May 28, 2009 by Glenn Whitfield (not verified), 41 weeks 19 hours ago
Comment id: 2626

Mendelt,

Very well put! However, I believe you can have both, as long as you are focused on the proper level. Your examples of efficiency are focused on the task level, how efficient does a person does this or that particular task, whereas your effectiveness example is focused at a higher level - "Is the feature solving a clients problems?" Anytime an organization focuses on the efficiencies at the task level for every area (local optimization), the result will be massive inefficiencies and ineffectiveness when looking at the total process.

The objective should be to focus on the efficiency of the entire process and its effectiveness. With this objective, it can be argued the only time efficiency matters is when looking at the area that is the constraint of the total process - only then will it's inefficiency affect the output.

I tend to think of efficiency and effectiveness as follows:
Efficiency = doing things right
Effectiveness = doing the right things

It's a constant balancing act between the two.

Nice work!

Glenn

Thanks for the kind comments

May 29, 2009 by Mendelt, 41 weeks 5 hours ago
Comment id: 2630

Thanks for the kind comments!

@olaf: It's hard to find something completely new to talk about in software engineering. But from your comment I see I succeeded in what I tried to do, make some fuzzy concepts a bit clearer.

@Glenn: I have to think about your answer. I like how you use the theory of constraints here.
My feeling is that to optimize efficiency of a process you should focus on effectiveness at task level. But I don't have anything to back this up.

Who is to say you can't be

June 1, 2009 by Anonymous (not verified), 40 weeks 4 days ago
Comment id: 2646

Who is to say you can't be doing the right things the right way? You can be effective and efficient, but you probably won't be able to sustain it, as the right things will eventually change.

What you say is not new, but

January 18, 2010 by Striipe (not verified), 7 weeks 3 days ago
Comment id: 5164

What you say is not new, but you brilliantly put it in a concise and understandable way. I just attended the SEE 2009 Conference in Berlin, where a lot of the waterfally guys would have profited from this...

effective is

February 3, 2010 by Kompetisi website kompas (not verified), 5 weeks 2 days ago
Comment id: 5408

In order to be more effective we need to be flexible. When requirements change we need to be able to change direction too. This can be done by minimizing work in progress. By working in small increments and finishing all work after each increment we're able to re-evaluate goals during the project.
yah flexible is the esential

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <b> <i> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <br> <blockquote>
  • Lines and paragraphs break automatically.
  • Web page addresses and e-mail addresses turn into links automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.

Best of AgileSoftwareDevelopment.com