Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
The Art of Agile Development
SPECIAL OFFER: Upgrade this ebook with O’Reilly
Preface
For the Pragmatists
Who Should Read This Book
About the Études
About Pronouns
Using Code Examples
Safari® Enabled
How to Contact Us
Acknowledgments
James Shore
Shane Warden
I. Getting Started
1. Why Agile?
Understanding Success
Beyond Deadlines
The Importance of Organizational Success
Enter Agility
Organizational Success
Technical Success
Personal Success
2. How to Be Agile
Agile Methods
Don’t Make Your Own Method
The Road to Mastery
Find a Mentor
3. Understanding XP
The XP Lifecycle
How It Works
Planning
Analysis
Design and coding
Testing
Deployment
Our Story Continues
The XP Team
The Whole Team
On-Site Customers
The product manager (aka product owner)
Domain experts (aka subject matter experts)
Interaction designers
Business analysts
Programmers
Designers and architects
Technical specialists
Testers
Coaches
The programmer-coach
The project manager
Other Team Members
The Project Community
Stakeholders
The executive sponsor
Filling Roles
Team Size
Full-Time Team Members
XP Concepts
Refactoring
Technical Debt
Timeboxing
The Last Responsible Moment
Stories
Iterations
Velocity
Theory of Constraints
Mindfulness
4. Adopting XP
Is XP Right for Us?
Prerequisite #1: Management Support
If management isn’t supportive...
Prerequisite #2: Team Agreement
If people resist...
Prerequisite #3: A Colocated Team
If your team isn’t colocated...
Prerequisite #4: On-Site Customers
If your product manager is too busy to be on-site...
If your product manager is inexperienced...
If you can’t get a product manager at all...
If you can’t get other on-site customers...
Prerequisite #5: The Right Team Size
If you don’t have even pairs...
If your team is larger than seven programmers...
If your team is smaller than four programmers...
If you have many developers working solo...
Prerequisite #6: Use All the Practices
If practices don’t fit...
Recommendation #1: A Brand-New Codebase
If you have preexisting code...
Recommendation #2: Strong Design Skills
If no one has strong design skills...
Recommendation #3: A Language That’s Easy to Refactor
If your language is hard to refactor...
Recommendation #4: An Experienced Programmer-Coach
If you have no obvious coach...
If your leaders are inexperienced...
If you’re assigned a poor coach...
Recommendation #5: A Friendly and Cohesive Team
If your team doesn’t get along...
Go!
The Challenge of Change
Final Preparation
Applying XP to a Brand-New Project (Recommended)
Applying XP to an Existing Project
The big decision
Bring order to chaos
Pay down technical debt
Organize your backlog
Fix important bugs
Move testers forward
Emerge from the darkness
Applying XP in a Phase-Based Organization
Mandatory planning phase
Mandatory analysis phase
Mandatory design phase
Mandatory coding phase
Mandatory testing phase
Mandatory deployment phase
Extremities: Applying Bits and Pieces of XP
Iterations
Retrospectives
Ten-minute build
Continuous integration
Test-driven development
Other practices
Assess Your Agility
Self-Assessment Quiz
II. Practicing XP
5. Thinking
Pair Programming
Why Pair?
How to Pair
Driving and Navigating
Pairing Stations
Challenges
Comfort
Mismatched skills
Communication style
Tools and keybindings
Questions
Results
Contraindications
Alternatives
Further Reading
Energized Work
How to Be Energized
Supporting Energized Work
Taking Breaks
Questions
Results
Contraindications
Alternatives
Further Reading
Informative Workspace
Subtle Cues
Big Visible Charts
Hand-Drawn Charts
Process Improvement Charts
Gaming
Questions
Results
Contraindications
Alternatives
Further Reading
Root-Cause Analysis
How to Find the Root Cause
How to Fix the Root Cause
When Not to Fix the Root Cause
Questions
Results
Contraindications
Alternatives
Retrospectives
Types of Retrospectives
How to Conduct an Iteration Retrospective
Step 1: The Prime Directive
Step 2: Brainstorming
Step 3: Mute Mapping
Step 4: Retrospective Objective
After the Retrospective
Questions
Results
Contraindications
Alternatives
Further Reading
6. Collaborating
Trust
Team Strategy #1: Customer-Programmer Empathy
Team Strategy #2: Programmer-Tester Empathy
Team Strategy #3: Eat Together
Team Strategy #4: Team Continuity
Impressions
Organizational Strategy #1: Show Some Hustle
Organizational Strategy #2: Deliver on Commitments
Organizational Strategy #3: Manage Problems
Organizational Strategy #4: Respect Customer Goals
Organizational Strategy #5: Promote the Team
Organizational Strategy #6: Be Honest
Questions
Results
Contraindications
Alternatives
Further Reading
Sit Together
Accommodating Poor Communication
A Better Way
Exploiting Great Communication
Secrets of Sitting Together
Making Room
Designing Your Workspace
Sample Workspaces
A small workspace
Adopting an Open Workspace
Questions
Results
Contraindications
Alternatives
Further Reading
Real Customer Involvement
Personal Development
In-House Custom Development
Outsourced Custom Development
Vertical-Market Software
Horizontal-Market Software
Questions
Results
Contraindications
Alternatives
Ubiquitous Language
The Domain Expertise Conundrum
Two Languages
How to Speak the Same Language
Ubiquitous Language in Code
Refining the Ubiquitous Language
Questions
Results
Contraindications
Alternatives
Further Reading
Stand-Up Meetings
How to Hold a Daily Stand-Up Meeting
Be Brief
Questions
Results
Contraindications
Alternatives
Further Reading
Coding Standards
Beyond Formatting
How to Create a Coding Standard
Dealing with Disagreement
Adhering to the Standard
Questions
Results
Contraindications
Alternatives
Iteration Demo
How to Conduct an Iteration Demo
Two Key Questions
Weekly Deployment Is Essential
Questions
Results
Contraindications
Alternatives
Reporting
Types of Reports
Progress Reports to Provide
Vision statement
Weekly demo
Release and iteration plans
Burn-up chart
Progress Reports to Consider
Roadmap
Status email
Management Reports to Consider
Productivity
Throughput
Defects
Time usage
Reports to Avoid
Source lines of code (SLOC) and function points
Number of stories
Velocity
Code quality
Questions
Results
Contraindications
Alternatives
Further Reading
7. Releasing
“Done Done”
Production-Ready Software
How to Be “Done Done”
Making Time
Questions
Results
Contraindications
Alternatives
No Bugs
How Is This Possible?
How to Achieve Nearly Zero Bugs
Ingredient #1: Write Fewer Bugs
Ingredient #2: Eliminate Bug Breeding Grounds
Ingredient #3: Fix Bugs Now
Ingredient #4: Test Your Process
Ingredient #5: Fix Your Process
Invert Your Expectations
Questions
Results
Contraindications
Alternatives
Further Reading
Version Control
Concurrent Editing
Time Travel
Whole Project
Customers and Version Control
Keep It Clean
Single Codebase
Appropriate Uses of Branches
Questions
Results
Contraindications
Alternatives
Further Reading
Ten-Minute Build
Automate Your Build
How to Automate
When to Automate
Automating Legacy Projects
Ten Minutes or Less
Questions
Results
Contraindications
Alternatives
Continuous Integration
Why It Works
How to Practice Continuous Integration
Never Break the Build
The Continuous Integration Script
To update from the repository
To integrate
Introducing Continuous Integration
Dealing with Slow Builds
Multistage Integration Builds
Questions
Results
Contraindications
Alternatives
Collective Code Ownership
Making Collective Ownership Work
Working with Unfamiliar Code
Hidden Benefits
Questions
Results
Contraindications
Alternatives
Documentation
Work-In-Progress Documentation
Product Documentation
Handoff Documentation
Questions
Results
Contraindications
Alternatives
8. Planning
Vision
Product Vision
Where Visions Come From
Identifying the Vision
Documenting the Vision
How to Create a Vision Statement
Promoting the Vision
Questions
Results
Contraindications
Alternatives
Further Reading
Release Planning
One Project at a Time
Release Early, Release Often
How to Release Frequently
An Example
Adapt Your Plans
Keep Your Options Open
How to Create a Release Plan
Planning at the Last Responsible Moment
Adaptive Planning and Organizational Culture
Questions
Results
Contraindications
Alternatives
Further Reading
The Planning Game
How to Play
Overcoming disagreements
How to Win
Questions
Results
Contraindications
Alternatives
Risk Management
A Generic Risk-Management Plan
Project-Specific Risks
How to Make a Release Commitment
Success over Schedule
When Your Commitment Isn’t Good Enough
Questions
Results
Contraindications
Alternatives
Further Reading
Iteration Planning
The Iteration Timebox
The Iteration Schedule
How to Plan an Iteration
The Commitment Ceremony
After the Planning Session
Dealing with Long Planning Sessions
Tracking the Iteration
When Things Go Wrong
Partially Done Work
Emergency Requests
The Batman
Questions
Results
Contraindications
Alternatives
Iteration length
Further Reading
Slack
How Much Slack?
How to Introduce Slack
Research Time
When Your Iteration Commitment Is at Risk
Use refactoring as a shock absorber
Incur a little voluntary overtime
Cancel research time
Don’t Cross the Line
Reducing the Need for Slack
Questions
Results
Contraindications
Alternatives
Reading groups
Silver stories
Further Reading
Stories
Story Cards
Customer-Centricity
Splitting and Combining Stories
Special Stories
Documentation stories
“Nonfunctional” stories
Bug stories
Spike stories
Estimating
Meetings
Architecture, design, refactoring, and technical infrastructure
Questions
Results
Contraindications
Alternatives
Further Reading
Estimating
What Works (and Doesn’t) in Estimating
Velocity
Velocity and the Iteration Timebox
How to Make Consistent Estimates
How to Estimate Stories
How to Estimate Iteration Tasks
When Estimating Is Difficult
Explaining Estimates
How to Improve Your Velocity
Pay down technical debt
Improve customer involvement
Support energized work
Offload programmer duties
Provide needed resources
Add programmers (carefully)
Questions
Results
Contraindications
Alternatives
Further Reading
9. Developing
Incremental Requirements
The Living Requirements Document
Work Incrementally
Vision, features, and stories
Rough expectations
Mock-ups, customer tests, and completion criteria
Customer review
Questions
Results
Contraindications
Alternatives
Further Reading
Customer Tests
Describe
Demonstrate
Develop
Focus on Business Rules
Ask Customers to Lead
Automating the Examples
Questions
Results
Contraindications
Alternatives
Further Reading
Test-Driven Development
Why TDD Works
How to Use TDD
Step 1: Think
Step 2: Red bar
Step 3: Green bar
Step 4: Refactor
Step 5: Repeat
A TDD Example
The task
One name/value pair
An empty string
testNull()
valueFor()
Multiple name/value pairs
Multiple count()
Your turn
Testing Tools
Speed Matters
Unit Tests
Focused Integration Tests
End-to-End Tests
TDD and Legacy Code
Questions
Results
Contraindications
Alternatives
Further Reading
Refactoring
Reflective Design
Divergent Change and Shotgun Surgery
Primitive Obsession and Data Clumps
Data Class and Wannabee Static Class
Coddling Nulls
Time Dependencies and Half-Baked Objects
Analyzing Existing Code
How to Refactor
Refactoring in Action
Questions
Results
Contraindications
Alternatives
Further Reading
Simple Design
You Aren’t Gonna Need It (YAGNI)
Once and Only Once
Self-Documenting Code
Isolate Third-Party Components
Limit Published Interfaces
Fail Fast
Questions
Results
Contraindications
Alternatives
Further Reading
Incremental Design and Architecture
How It Works
Continuous Design
Incrementally Designing Methods
Incrementally Designing Classes
Incrementally Designing Architecture
Risk-Driven Architecture
It’s Not Just Coding
Questions
Results
Contraindications
Alternatives
Further Reading
Spike Solutions
About Spikes
Performing the Experiment
Scheduling Spikes
Questions
Results
Contraindications
Alternatives
Performance Optimization
How to Optimize
When to Optimize
How to Write a Performance Story
Questions
Results
Contraindications
Alternatives
Further Reading
Exploratory Testing
About Exploratory Testing
Tool #1: Charters
Tool #2: Observation
Tool #3: Notetaking
Tool #4: Heuristics
None, Some, All
Goldilocks: too big, too small, just right
Position: beginning, middle, end
Count: zero, one, many
CRUD: create, read, update, delete
Command Injection
Data Type Attacks
An Example
When You Find Bugs
Questions
Results
Contraindications
Alternatives
Further Reading
III. Mastering Agility
10. Values and Principles
Commonalities
About Values, Principles, and Practices
Further Reading
11. Improve the Process
Understand Your Project
In Practice
Beyond Practices
Tune and Adapt
In Practice
Beyond Practices
Break the Rules
In Practice
Beyond Practices
12. Rely on People
Build Effective Relationships
In Practice
Beyond Practices
Let the Right People Do the Right Things
In Practice
Beyond Practices
Build the Process for the People
In Practice
Beyond Practices
13. Eliminate Waste
Work in Small, Reversible Steps
In Practice
Beyond Practices
Fail Fast
In Practice
Beyond Practices
Maximize Work Not Done
In Practice
Beyond Practices
Pursue Throughput
In Practice
Beyond Practices
14. Deliver Value
Exploit Your Agility
In Practice
Beyond Practices
Only Releasable Code Has Value
In Practice
Beyond Practices
Deliver Business Results
In Practice
Beyond Practices
Deliver Frequently
In Practice
Beyond Practices
15. Seek Technical Excellence
Software Doesn’t Exist
Design Is for Understanding
Design Trade-offs
Quality with a Name
Great Design
Universal Design Principles
The Source Code Is the (Final) Design
Don’t Repeat Yourself (DRY)
Be Cohesive
Decouple
Clarify, Simplify, and Refine
Fail Fast
Optimize from Measurements
Eliminate Technical Debt
Principles in Practice
Pursue Mastery
References
Index
About the Authors
Colophon
SPECIAL OFFER: Upgrade this ebook with O’Reilly
← Prev
Back
Next →
← Prev
Back
Next →