2008-01-05

Reading Agile Software Development with Scrum (2007-12-17/2008-01-01)

"Scrum is built on an empirical process control model which is radically different from the defined model that most processes and methodologies use."
--Ken Schwaber and Mike Beedle, Agile Software Development with Scrum

This past month I attended a Seattle XP Users Group meeting, read Agile Software Development with Scrum (one of two books that are primary sources of information about Scrum), and toured SolutionsIQ (a Seattle-area Scrum training and consulting firm). I wanted to see how my company's experience with small teams compares with our colleagues' in the industry. We'd been using agile development methodologies and tools since before starting the company, due to reading Extreme Programming Explained: Embrace Change, Planning Extreme Programming, and similar books by Kent Beck and Martin Fowler.

Readers of this blog may recognize in agile development methodologies the management paradigms I profess. My management methods led my company to agile development methodologies like Scrum and Extreme Programming. My blog posts on management books provide the following principles:
  1. Update opinions from observations. ("The Map is Not the Territory.")
  2. Develop a culture of interdependence. ("Mature from Dependence to Independence to Interdependence," and "People are smarter than you think. Give them a chance to prove themselves.")
  3. Prioritize what's important. ("Good is the Enemy of Best.")
  4. Jointly determine the course. (See The 8th Habit.)
  5. Set up and manage systems to stay on course. (See The 8th Habit.)
  6. Focus talents on results, not methods, then get out of people's way and give help as requested. (See The 8th Habit.)
  7. "Never automate something that can be eliminated, and never delegate something that can be automated or streamlined."
The principles above aren't articulated in industry terms, however. Specifically in software development these principles lead to the following practices:
  1. Inspect results and update process.
  2. Rely on people.
  3. Work on highest priorities.
  4. Teach self-managing teams.
  5. Improve processes.
  6. Remove impediments.
  7. Automate testing.
These practices are agile:
  1. Agile Software Development with Scrum emphasizes empirical process control.
  2. Agile methods have a people-first orientation.
  3. Product backlog and sprint backlog are prioritized.
  4. Scrum uses self-managing teams.
  5. Extreme Programming suggests various process improvements like spike solutions, coding standards, continuous integration.
  6. A Scrum Master uses a daily stand-up meeting to learn impediments to remove them.
  7. Extreme Programming emphasizes automated unit (and acceptance) tests.
I would list examples from our experience (e.g., engineering estimation, comparison to CMM Level 2 and key process areas, serving manufacturing clients, consensus decision-making) but this blog post is already long. However, I'll write that I'm pleased with how agile practice embodies good paradigms and principles.

[Updated FAQ link.]

No comments: