Software products should always be in a shippable state. This does not mean a feature complete state. A working product gives teams the maximum possible flexibility and agility while minimizing wasted effort. The longer a product is in a nonworking state, the greater the effort required to return it to a working state. If problems are neglected too long, it may be impossible to return the product to a working state.
This chapter has outlined a number of practices related to keeping a product in a working state. By necessity, there are references to practices in other chapters because all the principles and practices described in this book reinforce each other. Subsequent chapters cover the principles of defect prevention, design, and continuous refinement. Defect prevention is required for working software because teams must have automated, not effort-wasting manual, methods to keep their products in a working state. Likewise, in a complex environment of continual change, the design practices employed by the team must reinforce agility and changeability so that all hell does not break loose every time a change is made. The principle of continuous refinement is also vital for working software, because the project management practices used by the team must provide a lightweight and flexible way to continually monitor the project at frequent intervals to gauge progress and introduce the necessary changes to keep the project on track, and the product working.