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.
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