Lean software development is based on seven principles that emphasize efficiency, quality, and alignment with customer goals and needs.
- Eliminate waste: According to “Hacker Chick” Abby Fichtner, “Lean says to relentlessly eliminate anything that isn’t adding value and only work on what we absolutely need to be doing at this moment in time.” That includes streamlining workflow to eliminate meetings and tasks that are not essential. It also means, Fichtner says, not spending time on things that developers assume will be needed in the future. Clear communication among all team members is another way to avoid wasting time and effort.
- Build quality in: Rather than building software with defects, then spending time identifying and fixing those defects, build it right the first time. Keep code simple, and write the tests even before the code exists. “If the developer knows how it’s going to be tested, they are much more likely to write code that addresses all the scenarios,” according to “All About Agile” blogger Kelly Waters.
- Create knowledge: Designs evolve as software code is created and tested; rapid development and testing of prototypes builds that knowledge and helps catch flaws early in the development process.
- Defer commitment: Keep your options open. The lean approach defers irreversible decisions for as long as possible, providing multiple opportunities to test out prototypes before some costly design element is locked in.
- Deliver fast: Technology evolves quickly. The ability to deliver products quickly—and to update them as learners’ needs evolve—is essential. The lean emphasis on team workflow efficiency makes this possible.
- Respect people: An iterative process that solicits and considers input from all team members and from end users is inherently respectful of people’s time, needs, and expertise. Additional elements of respecting people include ensuring that the development team has the expertise it requires; that team members are nurtured and allowed to develop; and that the team is given reasonable goals and sufficient autonomy to meet those goals.
- Optimize the whole: Late changes in the scope of a project, or late discovery of flaws in the design, can throw the entire product development cycle off track. Lean development seeks to optimize the process to avoid the things that cause delays and breakdowns.
It all started at Toyota…
Lean software development is based on a set of manufacturing principles and processes that made Japanese auto manufacturers efficient and competitive in the 1980s and ’90s. American automakers, by comparison, were clunky and slow. Managers and efficiency experts began studying the differences. The lean manufacturing or Lean Production System is based on eliminating waste—including waste that results from overburdening workers or systems, or from uneven workloads. Toyota Production Systems developed its lean management philosophy in the 1990s; “The Toyota Way” focused on making workflow smooth and efficient. It also emphasized “learning based on early and frequent feedback from downstream processes,” according to Mary Poppendieck, a process control expert who applied these lean principles to software development.
At the time, American automakers—and product development—“focused on resource efficiency, completing each phase of development before starting the next, and following the original plan with as little variation as possible,” Poppendieck writes.
When Mary and Tom Poppendieck adapted lean product development principles to fit software development, they incorporated agile practices, tailoring the process to address flaws in the way software was developed. They zeroed in on the sequential or “waterfall” approach commonly in use in the ’90s—design, develop, test, deploy. This approach meant that flaws in the design were only discovered toward the end of the process, so uncovering and “fixing” these flaws had become part of the release cycle. The Poppendiecks instead focused on a development process that would avoid flaws from the outset, making “build quality in” the second principle of lean software development.
Lean and agile
Agile software development also replaced sequential processes with an iterative model. So how is lean software development different from agile?
While many of the themes and areas of focus are similar, there are differences. According to Poppendieck, “Agile focused on optimizing software development, which frequently was not the system constraint. Lean software development differed from agile in that it worked to optimize flow efficiency across the entire value stream.”
Agile development teams generally follow “preferred practices,” such as scrum or kanban, which will be described in future Learning Solutions Magazine articles.
Lean eLearning development
Lean’s focus on the whole team and process lends itself well to eLearning development. Rather than considering each team member as an individual and maximizing the use of his or her time, the lean development manager will make the most efficient use of the entire team—having people collaborate or take on multiple complementary roles, for example. A key principle is integrating the knowledge of team members who are engaged at all stages of product development. Another essential principle is an unwavering focus on the needs and input of customers or end users, rather than stubbornly adhering to a process or an initial design.
A lean approach can be especially relevant in smaller companies where the instructional design “team” might be a single person, possibly getting content input from a subject matter expert and relying on authoring tools for development assistance.