About the Book
This book presents fifty-nine lessons about software development and management, grouped into six domains, with one chapter on each domain:
Chapter 2. Requirements
Chapter 3. Design
Chapter 4. Project management
Chapter 5. Culture and teamwork
Chapter 6. Quality
Chapter 7. Process improvement
Chapter 8 provides one final, general lesson to keep in mind as you move forward. For easy reference, all sixty lessons are collected in the Appendix.
I haven’t attempted to provide a complete list of lessons in those domains. There’s so much knowledge in each category that no one could create an exhaustive compilation. Nor do I address other essential aspects of software development, most obviously programming, testing, and configuration management. Other authors have compiled comprehensive wisdom in those areas in books like these:
Programming Pearls by Jon Bentley (2000)
Lessons Learned in Software Testing by Cem Kaner, James Bach, and Bret Pettichord (2002)
Code Complete by Steve McConnell (2004)
Software Engineering at Google by Titus Winters, Tom Manshreck, and Hyrum Wright (2020)
The topics and lessons in this book are largely independent, so you can read them in any order you like without any loss of continuity. Each chapter begins with a brief overview of the pertinent software domain. Then several First Steps encourage you to reflect on your previous experiences with that domain before you dive into the chapter’s lessons. The First Steps invite you to think about problems your teams have experienced in that area, the impacts of those problems, and possible contributing root causes.
Each lesson concisely states a core insight, followed by a discussion and suggested practices that teams can adopt based on the lesson. As you read through each chapter, think about how those practices might relate to your situation. A book icon in the margin, as shown here, indicates a true story drawn from my personal experiences, interactions with my consulting clients, or experiences that colleagues have shared with me. All the stories are real, though names have been changed to preserve privacy. In addition to the true-story icons, key points in each lesson description are flagged with a key icon in the margin, like the one shown here. Some of the lessons contain cross-references to other lessons, which are indicated with a margin icon like the one you see here.
The Next Steps section at the end of each chapter will help you plan how to apply the chapter’s material to your project, team, or organization. No matter what sort of project you work on, what life cycle it follows, or what kind of product you build, look for the idea behind each lesson and see how you might adapt it to help your project be more successful.
Consider going through the First Steps and Next Steps with a group of your colleagues rather than doing them alone. At the beginning of the hundreds of training courses I’ve taught, I have small groups discuss problems their teams have experienced related to the course topic (the First Steps). At the end of the course, the same groups explore solutions to those problems, brainstorming ways to apply the course contents right away (the Next Steps). My students find it valuable to include a variety of stakeholders in those discussion groups. Different stakeholders bring diverse perspectives on how certain aspects of the project are going. Combining their perspectives provides a rich understanding of their current practices and a creative opportunity to choose practical solutions.
I hope many of my lessons resonate with you and motivate you to try something different on your projects. However, you can’t change everything you do at once. Individuals, teams, and organizations can absorb change only at a certain rate as they strive to get their project work done concurrently. The final chapter in the book, “What to Do Next,” will help you chart a path to translate the lessons into actions. That chapter offers suggestions about prioritizing the changes you want to put into motion and crafting an action plan to help you get from where you are today to where you want to be.