The technique I describe in this chapter is called Responsibility-Driven Design, and is adapted from the work of Rebecca Wirfs-Brock, who describes it in her book Designing Object-Oriented Software.
I like responsibility-driven design, because it seems to match the way software is really created. It can deal with ambiguous and incomplete specifications, which is almost always the way specifications begin.
It flows natrually from an analysis of the problem, to the design of the solution.
Finally, it easily integrates with various aspects of software development.
I'll illustrate RDD by means of an extended example problem.