Abstract
I believe that many software engineers have heard of learning curves. We know that new skills take time to learn, that developers take a while to ramp up on a new project, and that improvement slows as time goes on. I also believe that we share many misconceptions about learning curves. We don't assume that learning curves are relevant to our software projects and we don't use them in our processes. In this paper, I want to raise the level of understanding of learning curves within the Software Engineering community. This paper is for managers and developers who want to better understand learning curves.Learning curves are much more than a hurdle to full productivity. They are both a metaphor and a specific set of equations that describe the most common patterns of improvement within stable processes. Learning curves explain why the productivity of a stable process changes the way that it does, why productivity is lowest at the start of a project and highest at the end of a project. Learning curves explain that though the improvements diminish throughout the process, the improvements continue adding up. And, we can use learning curves to predict future productivity.This paper is laid out as follows. In the first section, I define learning curves, describe their history, and argue that they apply to Software Engineering. In the second section, I describe the need to both stabilize and improve a process. Our concept of process influences how we try to improve it, so I discuss the implications of two different concepts of process. Learning curves denote the relationship between stability and improvement. In the third section, I discuss the implications of learning curves on staffing a project. Specifically, I show that Brooks's observations about man-months can be explained in terms of learning curves and that we need to keep teams together on long-term projects. And in the fourth section, I comment on several technical issues one might encounter when applying learning curves to software development. I describe the equations one might use to model a process as well as the affect learning curves typically have on software engineering projects.