Part 5: Agile Best Practices and Common Pitfalls
Part of the Agile Development 101 Series
The Hard Lessons
After years of practicing agile, I've made most of the classic mistakes. I've been on teams that "did agile" but never became agile. I've seen sprints that accomplished nothing, retrospectives that changed nothing, and backlogs that helped nobody.
But I've also experienced agile done well - teams shipping valuable features every sprint, collaborating effectively, continuously improving. The difference wasn't the framework or tools. It was mastering the practices and avoiding the pitfalls.
In this final article of the series, I'll share the practical wisdom I've gained: what works, what doesn't, and how to make agile actually deliver on its promises.
User Stories: Beyond the Template
Everyone knows the template:
As a [user type]
I want [goal]
So that [benefit]But writing good stories is harder than it looks.
User Story Best Practices
1. Focus on the "Why"
Bad story:
As a user
I want a "Reset Password" button
So that I can reset my passwordGood story:
Why it's better: Explains the actual problem, not just the solution.
2. Make Stories Testable
Every story needs clear acceptance criteria.
Template I use:
Example:
3. Keep Stories Small (INVEST Criteria)
Independent: Can be built without depending on other stories Negotiable: Details can be refined through conversation Valuable: Delivers value to users Estimable: Team can estimate scope Small: Can be completed in one sprint Testable: Has clear acceptance criteria
Splitting large stories:
Too large:
Split into:
Techniques for splitting:
By workflow steps
By business rules
By CRUD operations
By user roles
By data variations
Common User Story Mistakes
Mistake 1: Stories as Technical Tasks
Wrong:
Right:
Technical tasks (API creation) are implementation details, not user value.
Mistake 2: Stories Without Acceptance Criteria
Incomplete:
What does "done" look like? Without acceptance criteria, developers guess, Product Owners reject, and rework happens.
Mistake 3: Epics Disguised as Stories
Too big:
This is an epic spanning multiple sprints. Break it down.
Estimation: Finding What Works
I've tried many estimation approaches. Here's what I've learned.
Story Points vs. Hours
Hours estimation:
Seems precise (8 hours, 16 hours)
Actually inaccurate (developers are bad at time estimates)
Pressure to "account for" hours
Story points:
Relative sizing (this is twice as complex as that)
Focus on complexity, not time
Less pressure, more honest conversations
My preference: Story points using Fibonacci (1, 2, 3, 5, 8, 13)
Planning Poker
How it works:
Product Owner describes story
Team asks questions
Everyone privately selects estimate (Fibonacci card)
Reveal simultaneously
Highest and lowest explain reasoning
Repeat until consensus
Why I like it:
Everyone participates
Averages out individual biases
Surfaces different perspectives
Quick (5-10 min per story)
Example:
Estimation Practices That Work
1. Use Reference Stories
Keep a "story point catalog":
2. Estimate as a Team
Don't let one person estimate everything. Different perspectives reveal different complexities.
3. Re-estimate Rarely
Once estimated and pulled into a sprint, stick with the estimate. Velocity will normalize over time.
4. Don't Use Estimates for Performance Reviews
The fastest way to destroy honest estimation: tie it to performance reviews. People will sandbag estimates.
Estimation Anti-Patterns
Don't do this:
Convert story points to hours (defeats the purpose)
Compare velocity across teams (points are relative)
Pressure team to raise velocity (encourages gaming)
Estimate tasks without understanding requirements
Sprint Planning: Getting It Right
Sprint planning sets the tone for the sprint. Do it poorly, and you'll struggle for two weeks.
Pre-Planning Preparation
Before sprint planning:
Backlog refined: Top stories have acceptance criteria and estimates
Dependencies identified: No surprises during planning
Team capacity known: Vacations, holidays, other commitments
Sprint goal proposed: Product Owner has a theme in mind
I learned the hard way: Don't walk into sprint planning with an unrefined backlog. Planning takes 4 hours instead of 2.
Sprint Planning Flow
Part 1: What will we deliver? (1 hour)
Product Owner presents sprint goal
Team pulls highest priority stories into sprint
Stop when capacity is reached (based on velocity)
Part 2: How will we deliver it? (1 hour)
Team breaks down stories into technical tasks
Identify dependencies and risks
Confirm commitment
Total time: 2 hours for 2-week sprint
Capacity Planning
Formula I use:
In story points:
Sprint Goal
Every sprint needs a goal beyond "complete these stories."
Bad sprint goals:
Good sprint goals:
A good sprint goal:
Describes user value
Can be achieved even if some stories aren't finished
Guides daily decisions
Daily Standup: Making It Valuable
Standup is often the most hated ceremony. It doesn't have to be.
Standup Best Practices
1. Keep It to 15 Minutes
How:
Timebox each person (2-3 min max)
Park detailed discussions ("let's sync after")
Stand (really, physically stand if able)
2. Focus on the Sprint Goal
Instead of:
Try:
3. Highlight Blockers Immediately
Blocker raised:
Scrum Master action:
Don't wait until retrospective to address blockers.
Standup Anti-Patterns
Status report to Scrum Master: Team members report to Scrum Master instead of synchronizing with each other.
Solution: Scrum Master stays quiet, team looks at each other.
Problem-solving during standup: 15-minute standup becomes 45-minute debugging session.
Solution: "Let's discuss after standup."
People tuning out: Phones out, not listening to teammates.
Solution: Make it engaging - use a token (only person with token speaks), walk the board instead of walking people.
Code Review: Agile and Quality
Code review is where agile meets technical excellence.
Code Review Best Practices
1. Review Quickly
My SLA: Review within 24 hours of PR creation
Why it matters:
Keeps work flowing
Reduces context switching for author
Enables continuous delivery
I use GitHub notifications and Slack alerts to stay on top of reviews.
2. Keep PRs Small
Ideal PR size:
< 400 lines of code
Touches 1-3 files (focused change)
Single logical change
How to keep PRs small:
Break features into incremental changes
Use feature flags for incomplete features
Merge supporting changes separately
Example - Building user authentication:
Each PR is mergeable and deployable, reducing risk.
3. Constructive Feedback
Bad code review comment:
Good code review comment:
Guidelines:
Be specific (what and why)
Suggest solutions
Assume competence
Ask questions, don't command
4. Automate What You Can
Automated checks (via GitHub Actions):
Linting (ESLint, Prettier)
Tests (unit, integration)
Security scanning (Snyk, Dependabot)
Code coverage
Reviewers focus on:
Logic and design
Edge cases
Readability
Architecture fit
Code Review Anti-Patterns
Nitpicking formatting: Arguing about spaces vs. tabs, brace style. Use automated formatters (Prettier, Black) and move on.
Approval without review: Rubber-stamping PRs to "keep things moving." Defeats the purpose.
Solution: If too busy to review properly, say so. Don't fake review.
Blocking on personal preference: "I would have done it differently" isn't grounds for rejection.
Solution: Distinguish between must-fix issues (bugs, security) and suggestions (style, alternative approaches).
Retrospectives: Continuous Improvement
Retrospectives are where teams improve. Here's how to make them effective.
Retrospective Best Practices
1. Create Psychological Safety
People won't speak up if:
Management attends (power dynamics)
Blame is assigned
Nothing changes based on feedback
Create safety by:
No managers (just the team)
Prime directive: "Everyone did their best with available knowledge"
Follow through on action items
2. Vary the Format
Formats I rotate:
Start/Stop/Continue:
Start: New practices to try
Stop: Things hurting us
Continue: What's working well
Went Well / Needs Improvement / Action Items:
Celebrate successes
Identify problems
Commit to changes
4 Ls:
Liked
Learned
Lacked
Longed for
Sailboat:
Wind (helping us)
Anchors (holding us back)
Rocks (risks ahead)
Island (goal)
Timeline: Draw a timeline of the sprint, mark highs and lows, discuss.
3. Make Action Items Specific
Bad action item:
Good action item:
Format:
Specific action
Owner assigned
Deadline
4. Review Previous Action Items
Start every retro with:
Hold the team (including yourself) accountable.
Retrospective Anti-Patterns
Same format every time: Team gets bored, participates less.
Solution: Rotate formats, try new activities.
No action items or too many: Nothing actionable emerges, or list of 10 items that won't get done.
Solution: 1-3 action items max. Focus on impact.
Rushed retrospective: 5-minute "anything to improve?" at the end of sprint review.
Solution: Allocate 1 hour, treat it as important.
Common Agile Pitfalls and How to Avoid Them
Pitfall 1: "Doing Agile" vs. "Being Agile"
Symptoms:
Following Scrum by the book but not embracing agile values
Going through motions (standups, retros) without real engagement
No actual improvement cycle
Example:
Solution:
Focus on principles over process
Empower team to make decisions
Actually implement retrospective action items
Foster collaboration over compliance
Pitfall 2: Ignoring Technical Debt
Symptoms:
Every sprint is all features, no technical work
Codebase deteriorating
Velocity slowing over time
Example: Sprint backlog:
Solution:
Reserve 20% of sprint capacity for technical work
Make technical debt visible in backlog
Frame technical work in business terms ("Reduce deployment time from 30 min to 5 min")
My practice:
Pitfall 3: Unstable Product Owner
Symptoms:
Product Owner changes priorities mid-sprint
Unclear requirements
No time for questions during development
Example:
Solution:
Protect sprint commitments (new work goes to backlog)
If change is truly urgent, swap out equal work (don't just add)
Product Owner should attend daily standups
Establish clear communication channels
Pitfall 4: Overcommitting
Symptoms:
Consistently completing 60% of sprint commitments
Team working overtime to "make sprint"
Velocity unpredictable
Example:
Solution:
Use historical velocity, not aspirational
Build in buffer (commit to 80% of velocity)
Account for non-dev time (meetings, reviews, support)
Say no to scope creep
My approach:
Pitfall 5: No Definition of Done
Symptoms:
Stories marked "done" but not actually shippable
Frequent production bugs
"Done" means different things to different people
Example:
Solution: Create and enforce explicit Definition of Done:
Pitfall 6: Skipping Ceremonies
Symptoms:
"We're too busy for retrospectives"
Standups become status emails
No sprint planning, just work on whatever
Example:
Solution:
Commit to ceremonies, even when busy
Make ceremonies valuable (don't waste time)
If a ceremony feels useless, fix it in retrospective
Treat ceremonies as non-negotiable investment
My rule: Missing standups occasionally is fine. Skipping retros? Red flag.
Pitfall 7: No Team Ownership
Symptoms:
Work assigned by manager, not pulled by team
Individual responsibilities instead of team goals
"That's not my job" mentality
Example:
Solution:
Whole team owns sprint goal
Swarm on blockers instead of individual work
Pair/mob programming for knowledge sharing
Celebrate team success, not individual hero contributions
Scaling Agile: Beyond One Team
When you have multiple teams, new challenges emerge.
Multi-Team Coordination
Challenges:
Dependencies between teams
Shared resources
Synchronization
Approaches I've used:
1. Scrum of Scrums
How it works:
Representative from each team meets daily/weekly
Discuss dependencies, integration points, blockers
Example:
2. Feature Teams vs. Component Teams
Component teams:
Feature teams:
My preference: Feature teams for agility, component teams for specialized expertise.
3. Shared Backlog vs. Team Backlogs
Shared backlog:
One backlog for all teams
Teams pull work based on capacity
Team backlogs:
Each team has own backlog
Product Owner coordinates priorities across teams
Hybrid approach (my preference):
Shared product backlog (single source of truth)
Teams pull into team-specific sprint backlogs
Measuring Agile Success
How do you know if agile is working?
Metrics I Track
1. Velocity (Team Capacity)
What: Story points completed per sprint Why: Predict capacity, improve planning
Healthy pattern:
2. Sprint Goal Achievement
What: Did we meet the sprint goal? Why: Better than story point completion
Tracking:
3. Lead Time and Cycle Time
Lead time: How long from request to deployment Cycle time: How long from start to deployment
Goal: Reduce and stabilize
Example:
4. Deployment Frequency
What: How often do we deploy to production? Why: Indicates agility and risk reduction
Progression:
5. Team Satisfaction
What: Survey team regularly Why: Unhappy teams don't sustain agile
Questions:
Do you feel empowered to make decisions?
Are retrospectives valuable?
Is workload sustainable?
Do we collaborate effectively?
Metrics to Avoid
Don't measure:
Individual velocity (encourages gaming)
Lines of code (quantity over quality)
Hours logged (presenteeism)
Burndown perfection (reality is messy)
Transitioning to Agile
If you're moving from waterfall to agile:
Transition Approach
Phase 1: Education (Month 1)
Agile training for team
Read books, watch videos
Visit agile teams (if possible)
Phase 2: Pilot Team (Months 2-3)
One team tries agile
Start with 2-week sprints
Use Scrum framework
Learn and adapt
Phase 3: Expand (Months 4-6)
Share learnings from pilot
Expand to more teams
Refine practices
Build agile coaching capacity
Phase 4: Scale (Months 7+)
Multiple teams using agile
Coordinate across teams
Continuous improvement culture
Change Management
Expect resistance:
Address concerns:
Show quick wins
Celebrate successes
Listen to feedback
Adapt practices to context
Get executive support:
Agile requires cultural change
Leadership must walk the talk
Protect teams from anti-agile pressures
My Agile Journey: Lessons Learned
After years of agile, here's what I know:
What Matters Most
People over process: The best framework poorly implemented fails. The okay framework with great people succeeds.
Start small: Don't boil the ocean. Pick one practice, do it well, add more.
Adapt to context: Textbook agile doesn't exist in reality. Adapt.
Continuous improvement is the goal: Not perfect Scrum, not maximum velocity. Getting better every sprint.
Ship working software: Everything else is secondary.
What Doesn't Matter
Perfect adherence to framework: "We're not doing Scrum right" matters less than "Are we delivering value?"
Velocity comparisons: Your 25 points β another team's 25 points. Focus on your own improvement.
Ceremony perfection: Missing a standup won't kill your agility. Missing the point of agile will.
What I'd Do Differently
If starting over:
Invest more in team building early
Establish Definition of Done from day one
Protect retrospective time religiously
Say no to scope creep sooner
Celebrate small wins more
Conclusion
Agile is a journey, not a destination. Key principles:
Master the basics:
Write good user stories
Estimate realistically
Plan effectively
Review code quickly
Reflect and improve
Avoid common pitfalls:
Don't ignore technical debt
Don't skip ceremonies
Don't overcommit
Don't go through motions
Remember:
Agile is about people, not process
Deliver working software frequently
Embrace change
Improve continuously
You now have the foundation to practice agile effectively. The rest is experience - start small, learn continuously, and adapt to your context.
Final Thoughts
Agile transformed my career. It taught me:
How to work collaboratively
How to embrace uncertainty
How to deliver value incrementally
How to continuously improve
It's not always easy. Some days, I miss the certainty of waterfall's detailed plans. But then I remember:
Shipping features every two weeks
Adapting to changing requirements
Working with empowered, motivated teams
Agile isn't perfect. But done well, it's transformative.
Thank you for joining me on this Agile Development 101 journey. Now go build great products!
Key Takeaways
User stories need clear acceptance criteria
Estimate with story points, not hours
Keep PRs small for faster reviews
Retrospectives drive improvement - make them count
Avoid common pitfalls: technical debt, overcommitting, no Definition of Done
Measure what matters: velocity, sprint goals, cycle time
Adapt agile to your context - no one-size-fits-all
Series Summary
Throughout this series, we've covered:
Part 1: Agile values, principles, and mindset
Part 2: Scrum roles, ceremonies, and artifacts
Part 3: Kanban and alternative frameworks
Part 4: Jira, GitHub, Confluence integration
Part 5: This article - practical wisdom
Additional Resources
Books:
"Scrum: The Art of Doing Twice the Work in Half the Time" by Jeff Sutherland
"User Story Mapping" by Jeff Patton
"The Phoenix Project" by Gene Kim (DevOps + Agile)
Online:
Agile Alliance - Resources and community
Mountain Goat Software Blog - Mike Cohn's insights
Atlassian Agile Coach - Guides and tutorials
Certifications:
Certified Scrum Master (CSM) - Scrum Alliance
Professional Scrum Master (PSM) - Scrum.org
PMI-ACP - Project Management Institute
Previous: Part 4 - Agile Tools and Workflows Back to: Series Overview
This article concludes the Agile Development 101 series. Check out the series overview for all articles.
Last updated