Foreword by Robert C. Martin xv
Preface xvii
Acknowledgments xxv
About the Author xxix
Part I: Ideology and Attitude 1
Chapter 1: Software Development in the Twenty-First Century 3
Seniority 5
A New Reality 6
Chapter 2: Agile 9
Process-Oriented Agile Disciplines 10
Technical-Oriented Disciplines 10
What Is It to Be Agile? 11
Agile Manifesto 12
The Agile Transformation Era 14
The Agile Hangover 14
Agile versus Software Craftsmanship 21
Summary 22
Chapter 3: Software Craftsmanship 23
A Better Metaphor 23
What Does Wikipedia Say? 24
A More Personal Definition 24
A Shorter Definition 24
Beyond Definitions 25
Craft, Trade, Engineering, Science, or Art 25
Software Craftsmanship History 26
Summary 39
Chapter 4: The Software Craftsmanship Attitude 41
Who Owns Your Career? 42
Keeping Ourselves Up to Date 44
Know Who to Follow 48
Practice, Practice, Practice 48
Socialize 54
Deliberate Discovery 55
Work-Life Balance 56
Summary 60
Chapter 5: Heroes, Goodwill, and Professionalism 61
Learning How to Say No 64
Providing Options 70
Enlightened Managers 74
Summary 75
Chapter 6: Working Software 77
Working Software Is Not Enough 78
Looking After Our Garden 79
The Invisible Threat 79
The Wrong Notion of Time 81
Legacy Code 88
Summary 91
Chapter 7: Technical Practices 93
The Right Thing versus the Thing Right 93
Context 94
Extreme Programming History 96
Practices and Values 97
Accountability 104
Pragmatism 105
Summary 106
Chapter 8: The Long Road 107
A Tale from a Brazilian Teenager 107
Focus and Determination 110
Job as Investment 111
Autonomy, Mastery, and Purpose 113
Career Inside Companies 114
Summary 115
Part II: A Full Transformation 117
Chapter 9: Recruitment 119
An Ordinary Job Description 120
Too Busy to Interview 122
No Job Descriptions 123
Recommendations 130
Community Involvement 130
Defining Effective Filtering Criteria 131
Proactive Recruitment 134
Summary 135
Chapter 10: Interviewing Software Craftsmen 137
A Business Negotiation 137
Identifying Productive Partnerships 138
Good Interviews 142
Taking a Punt 148
Hiring for an Existing Team versus Hiring for a New Team 149
Pre-Interview Coding Exercises 150
Everyone Should Know How to Interview 151
Developers Must Interview Developers 152
Summary 152
Chapter 11: Interview Anti-Patterns 153
Don’t Be a Smart-Ass Interviewer 153
Don’t Use Brainteasers 154
Don’t Ask Questions to Which You Don’t Know the Answers 154
Don’t Try to Make the Candidate Look Like a Fool 155
Don’t Block the Internet 156
Don’t Code on a Piece of Paper 156
Don’t Use Algorithms 157
Don’t Conduct Phone Interviews 157
Summary 158
Chapter 12: The Cost of Low Morale 159
The Agile Hangover: Low Morale 159
The Cost of Employing 9-to-5 Developers 161
Constrained by Lack of Motivation 164
Injecting Passion 165
Summary 167
Chapter 13: Culture of Learning 169
Wrong Motivation 170
Creating a Culture of Learning 171
What if Others Don’t Want to Join In? 179
Summary 182
Chapter 14: Driving Technical Changes 185
Identifying Skepticism Patterns 185
Be Prepared 189
Where Do We Start? 191
Fear and Incompetence 195
How Do I Convince My Manager? 196
How Do I Convince My Team to Do TDD? 197
Facing the Skeptics 198
Should We Really Care about All That? 205
Summary 205
Chapter 15: Pragmatic Craftsmanship 207
Quality Is Always Expected 207
Busting the “Expensive and Time-Consuming Quality” Myth 209
Refactoring 211
The “One Way” of Developing Software 212
Helping the Business 213
Software Projects Are Not about Us 217
Great versus Mediocre 217
Four Rules of Simple Design 218
Craftsmanship and Pragmatism 221
Summary 222
Chapter 16: A Career as a Software Craftsman 223
Being a Craftsman 224
Career Progression 225
Roads and Milestones 227
Job Diversity 231
The Mission 233
Appendix: Craftsmanship Myths and Further Explanations 235
Index 241