Item 47: Treat Development as a Loop vs. a Line
It's easy to get lured into developing things like features, products, or even whole companies as a linear process: one with a beginning, a middle, and an end. And quite frankly, that's how this book lays it out. In the beginning, you develop a deep understanding of the requirements by absorbing information from customers and stakeholders and synthesizing a mental model in your head. In the middle, you implement the model you have come up with in code. And at the end, you present that solution to your customers, and await feedback. The reality though is that the process of doing this is so complex and so long that you need to break it up. What's more, once you get that feedback, it's pretty much the same as the beginning. The feedback is the requirements understanding for the next iteration.
Always look at development as a loop, where the end of one cycle is the beginning of the next.
Structure your sprints such that you're always delivering value.
Ensure that your customer feedback feeds into the next iteration.
Don't assume that a feature you build will ever be "done", instead factor it into the next iteration of the product.
Treating development like a loop will help because it models the evolution of ideas: a continuous process.