Efficiency a measure of how much wasted effort there is in a process or system. A high efficiency process has less waste. In mechanical terms the simplest definition of efficiency is the ratio of the amount of energy used compared to the amount of work done to create an output. When applied to IT projects, efficiency measures how staffing levels effect how much work can be done. The problem is that while a simple concept, it is difficult because it requires a systems-thinking view of software development processes. As a result it is difficult to measure directly.
Most processes are subcomponents. For example, unit testing is part of broader coding process and coding is part of the broader software development process. Improving the efficiency of unit testing by 10% will not equate to a 10% improvement in coding or a 10% improvement in the project efficiency. For example, let’s say I become more efficient at unit testing, which means that I can run more tests in the same time. Does running more unit tests mean that the organization gets more software? We would have to understand all of the constraints on the flow of work to know whether the efficiency improvement will translate into more delivered functionality. Without understanding how the processes fit together and how the value/work flows through the project, you can’t be sure if any improvement will be transmitted to the bottom-line. Systems thinking (a way of looking at the whole system) and tools like value-stream mapping (a technique to analyze the flow of materials and information) are useful when identifying bottlenecks where efficiency improvements will potentially impact the overall project.
Efficiency is difficult to measure in software development. The idea of efficiency in software development has evolved from the concept of efficiency developed in manufacturing, which focused on the measurement of mechanical efficiency. Technically the efficiency of a project would be measured as the ratio of effort the project should take in a perfect world compared to the effort actually required. Perfect effort is, at best, difficult to determine. Many organizations measure proxies for efficiency, including: productivity, time-to-market and cost per unit of work. Efficiency generally means that we are avoiding waste. Waste in software development include: defects, waiting, overproduction, unused creativity or extra reviews to name a few items. Efficiency is hard to measure directly; therefore, the impact of process changes needs to be inferred from other metrics which may affected by other changes, such as cost cutting. Avoiding wasted time in projects and trying to measure the impact is a laudable goal, every minute wasted time could be applied to value added work.