Saturday, August 12, 2006

The 7 Habits of Highly Effective Agile Teams

After reading Stephen R. Covey's The 7 Habits of Highly Effective People, I was struck by the commonalities between some of the principles in his book and those of agile development.

This is how I see the two come together.

Habit 1: Be Proactive

The essence of this habit for me can be summarized with a single quote from Covey:

Our behavior is a function of our decisions, not our conditions.

When the team is subject to outside influences, changing priorities, and “scope creep”, it can complain, or it can:
1. choose to explain to these outsiders from management, marketing, etc., the consequences of changing direction in mid-iteration
2. choose to drop lower priority features
3. choose to abort the sprint/iteration and plan a new one
4. choose to accept that stakeholders, not developers, have responsibility and accountability for setting product priorities

A strong product owner and scrum master should provide the leadership and courage to make this happen.

Habit 2: Begin with the end in mind

Agile teams should start a project, a release, an iteration, and each day with a clear vision of the goal. The 5 levels of planning provide that vision:
- Product vision statement
- Product roadmap
- Release plan
- Iteration/sprint plan
- Daily plan (from daily stand-up/scrum meeting)

Habit 3: Put first things first

This habit emphasizes personal management to prioritize your life; allocate plenty of time for activities which are important, but not urgent (What Covey calls “Quadrant II” activities).

Scrum and XP both emphasize the importance of prioritizing. XP in particular, with it’s rigorous discipline around engineering practices, ensures that the team is investing time to achieve a high and sustainable velocity.

Particularly, the XP practices of refactoring and test-driven development are prime examples of Quadrant II activities. In Scrum, an effective product owner, scrum master, and team should collaborate to ensure that the product backlog and spring backlog address not only the highest priority business features, but also technical activities required to maintain a productive team environment.

Habit 4: Think win/win

Because agile teams are:
1. Self-organizing and self-motivated by a personal commitment to achieve the sprint goal
2. Not bound by a rigid and prescriptive process
3. Able to quickly adapt to changing business priorities
4. Empowered to insist on high quality
5. Working in a sustainable manner

Then they are free to seek solutions which meet the needs of customers and at the same time provide developers with opportunities to learn, grow, and produce the highest quality product.

Habit 5: Seek first to understand, then to be understood

An agile team’s number one focus is to deliver value to the customer. The team collaborates closely with customers to fully understand the product, it’s goal, and it’s features. Once the team has this understanding, and has proven that it can quickly deliver value, then it will build the trust required for those occasions when negotiating with customers and stakeholders is required. (We value customer collaboration over contract negotiation. But we still gotta negotiate sometimes!)

Habit 6: Synergize

Agile teams are deliberately cross-functional; they consist of people who specialize in fields such as database development, UI development, and testing. In agile development, we intentionally throw people with these diverse skill sets into close quarters and “shake well” to ensure that they collaborate closely. Agile teams truly value the specific strengths of each team member and seek to get the maximum synergistic benefit from the creative combination of everyone’s skills.

On agile teams, we don’t stifle creativity and cooperation by putting team members in competition with one another; we reward the entire team for meeting it’s collective goal. We don’t manage by command-and-control; we let self-organizing teams use their collective wisdom to find the best method to reach the goal.

Habit 7: Sharpen the saw

This habit is about the importance of physical, mental, spiritual and social self-renewal.

Agile teams have frequent retrospectives. This is the time when the team re-examines the effectiveness of it’s practices and reconsiders it’s activities in light of the project goal and agile principles. This is one form of renewal.

By creating a culture and environment which values sustainable development, individual self-renewal is possible. But it should also be encouraged. An agile team should also provide team members the personal time to research technologies, tools, and topics that interest them and will expand their knowledge and understanding. Even if the topic doesn’t have an apparent application on the current project or iteration, the investment of time will pay big dividends in the long term.