Summary of Key Principles
This lesson describes and links to the key principles described throughout the course.
Inspect and Adapt. Agile is an empirical approach that depends on learning from experience. This requires creating opportunities to reflect periodically and make adjustments based on experience.
Start with Scrum. Scrum is not necessarily the final destination on an Agile journey, but it is the most-structured, best supported place to start.
Build Cross-Functional Teams. Work on Agile projects occurs within self-managed teams. To be self-managed, teams must include the full set of skills needed to make well-informed decisions that are binding on the organization.
Integrate Testers into the Development Teams. Tighten the feedback loop between development and test by having the people doing the work work more closely together.
Motivate Teams Through Autonomy, Mastery, and Purpose. Agile practices inherently support the factors that contribute to motivation. Teams are intended to work with Autonomy and to become better over time (Mastery). In order to do so, they need to understand their Purpose. The concepts of “healthy Agile team” and “motivated Agile team” are strongly intertwined.
Develop a Growth Mindset. Whether you look at it from the point of view of the “Mastery” part of Autonomy, Mastery, and Purpose or from the point of view of Inspect and Adapt, effective Agile teams maintain a steady focus on getting better.
Develop Business Focus. Developers frequently need to fill in gaps in requirements and in direction from their Product Owner. Understanding their business helps them fill those gaps in ways that are beneficial to the business.
Tighten Feedback Loops. Don’t take any longer to learn lessons than you need to; keep the feedback loops as tight as possible. This supports more rapid progress from Inspect and Adapt and faster improvements in effectiveness from Develop a Growth Mindset.
Fix the System, Not the Individual. Most software professionals want to do good work. If they aren’t doing good work—and especially if it seems like they’re trying not to do good work— understand what dynamics are contributing to that. Look for the system problem that’s frustrating the person.
Boost Team Ability by Building Individual Ability. Teams exhibit attributes that are a combination of the team members’ individual attributes and of their interactions. Strengthen your teams by strengthening the individuals on the teams.
Keep Projects Small. Small projects are easier and more often successful. Not all work can be structured into small projects, but the work that can be structured that way should be.
Keep Sprints Short. Short sprints support a frequent Inspect and Adapt feedback loop. They expose problems quickly, making it easy to nip small problems in the bud before they become large problems.
Deliver in Vertical Slices. Feedback is important in Agile. Teams get better feedback on their technology and design choices—both from customers and the business—when they deliver in vertical slices rather than horizontal slices.
Manage Technical Debt. A consistent focus on quality is part of an effective Agile implementation. Managing technical debt supports higher team morale, faster progress, and higher quality products.
Support Large Agile Projects Through Architecture. Good architecture can support portioned work on a project and minimize large-project overhead. Great architecture can make a large project feel like a smaller one.
Minimize the Defect Detection Gap. The cost to fix a defect tends to grow the longer it stays in process. A benefit of Agile’s focus on continuous quality work is detecting more defects closer to the source.
Create and Use a Definition of Done. A good Definition of Done helps catch incomplete or faulty work early, minimizing the gap between defect insertion and detection.
Maintain a Releasable Level of Quality. Maintaining a releasable level of quality helps catch additional defects that slip through an earlier DoD.
Creation and Usage of Automated Tests. Automated tests help to minimize the defect detection gap. Making everyone on the team responsible for the tests reinforces the idea that quality is everyone’s responsibility.
Refine the Product Backlog. Backlog refinement ensures the team is working on the highest priority items, is not filling in gaps in requirements on its own, and is not starved for work.
Create and Use a Definition of Ready. Part of backlog refinement is ensuring that requirements are truly ready before the team begins implementing them.
Automate Repetitive Activities. No one likes repetitive activities, and many of the activities that can be automated in software development provide more benefit when they’re automated than when they aren’t.
Manage to Outcomes, Not Details. Support your team’s Autonomy by clearly communicating desired outcomes while leaving the team free to define the detailed means by which it completes its work.
Express Clear Purpose with Commander’s Intent. Support your teams’ ability to make timely, local decisions by clearly communicating your objectives for the desired end state.
Focus on Throughput, Not Activity. Similar to managing to outcomes, adding the nuance that busyness is not the objective—getting valuable work done is the objective.
Model Key Agile Behaviors. Effective leaders model the behaviors they want to see in others.
Decriminalize Mistakes. Decriminalize mistakes so that teams surface them without hesitation and you can learn from them. A mistake you don’t learn from penalizes your organization twice.
Plan Based on Measured Team Capacity. Agile is an empirical approach; teams and organizations should plan their work based on their measured performance.
Get hands-on with 1400+ tech skills courses.