# Chapter 16 Modifying Existing Code

Chapter 1 described how software development is iterative and incremental. A large software system develops through a series of evolutionary stages, where each stage adds new capabilities and modifies existing modules. This means that a system’s design is constantly evolving. It isn’t possible to conceive the right design for a system at the outset; the design of a mature system is determined more by changes made during the system’s evolution than by any initial conception. Previous chapters described how to squeeze out complexity during the initial design and implementation; this chapter discusses how to keep complexity from creeping in as the system evolves.

## 16.1 Stay strategic

## 16.2 Maintaining comments: keep the comments near the code

## 16.3 Comments belong in the code, not the commit log

## 16.4 Maintaining comments: avoid duplication

## 16.5 Maintaining comments: check the diffs

## 16.6 Higher-level comments are easier to maintain
