In matters of style, swim with the current; in matters of principle, stand like a rock.
The design principles we outlined in the previous chapter apply to finding the right boundaries for an object so that it plays well with its neighbors—a caller wants to know what an object does and what it depends on, but not how it works. We also want an object to represent a coherent unit that makes sense in its larger environment. A system built from such components will have the flexibility to reconfigure and adapt as requirements change.
There are three aspects of TDD that help us achieve this scoping. First, starting with a test means that we have ...