Published: February 2015
You need to get value from your software project. You need it “free, now, and perfect.” We can’t get you there, but we can help you get to “cheaper, sooner, and better.” This book leads you from the desire for value down to the specific activities that help good Agile projects deliver better software sooner, and at a lower cost. Using simple sketches and a few words, the author invites you to follow his path of learning and understanding from a half century of software development and from his engagement with Agile methods from their very beginning.
The book describes software development, starting from our natural desire to get something of value. Each topic is described with a picture and a few paragraphs. You’re invited to think about each topic; to take it in. You’ll think about how each step into the process leads to the next. You’ll begin to see why Agile methods ask for what they do, and you’ll learn why a shallow implementation of Agile can lead to only limited improvement.
This is not a detailed map, nor a step-by-step set of instructions for building the perfect project. There is no map or instructions that will do that for you.
You need to build your own project, making it a bit more perfect every day. To do that effectively, you need to build up an understanding of the whole process.
This book points out the milestones on your journey of understanding the nature of software development done well. It takes you to a location, describes it briefly, and leaves you to explore and fill in your own understanding.
From deciding what we want, down to programming it and getting it right, software development is very complex. And yet we do best when we can find simplicity in how we work.
In The Nature of Software Development, I have tried to focus relentlessly on the simple core of ideas that make up effective software development. You and I both know that it’s not that simple, and that things will get complicated. But if we can keep these ideas in mind, they’ll keep us grounded and help us build something of value.
Here are seven core ideas for effective software development:
Begin and end with a focus on value.
When we build a software product, we have some value in mind. Not just the money we’ll make, but what we really want from the product, whether that’s measured in laughs or lives. We’ll think about what we value, and how to get a sense of what’s more important and what’s not so important at all.
Guide the product in terms of small slices of working software.
We create teams who are responsible for creating value. We make sure they understand what’s needed and how much time is available. We guide them by observing what they actually build, not by examining schedules and promises. We build small slices of value, which we call “features.”
Organize around the work to be done, with people who can do it.
We organize our teams around the features we need, with teams who can build everything needed. The focus on features lets us plan and build value rapidly. Organizing with good people and helping them build their skills gets the work done efficiently and well.
Plan in terms of features.
With teams in place and features in mind, we steer our projects by selecting which features to do next and which ones to defer. We produce highest value first, throughout the effort.
Build in terms of features.
Naturally, any product requires architecture and infrastructure. We build based on features, including the architecture and infrastructure we need as we go.
Slice features thinly.
We slice each desired capability down to the smallest possible value-bearing size. We build a capable product as early as possible, and then grow it and enhance it as the deadline approaches. Building highest value first, we are always ready to ship the best possible product.
Build quality in every day.
Throughout the effort, we apply all the necessary practices to ensure that we always have a good design, and that we are always as close to defect-free as possible. We build value continuously, sustainably, indefinitely.
Is that all there is to it? Certainly not! Software efforts are always complicated, always complex. By keeping our mind on the simple overall arc, with a focus on value expressed in small increments of value—features—we have the best chance of delivering a successful product.
The Nature of Software Development explains and explores this “circle of value,” but I’ve also included a dozen essays, expanding a bit more on topics of interest, and underlining the points of the first part of the book.
The Nature of Software Development is a small, simple book that offers a framework for thinking about your software project. In it, I’ve tried to tell you what I think about as I guide a project. The ideas have served me well, and I hope they’ll do the same for you!
Published: February 2015