Behavior-Driven Development
I found it hard to decide whether to put BDD in this chapter or to discuss it with teamwork, because it's really an exercise in communication masquerading as a coding practice. But it's here, so there you go. Indeed, many of the sections in this chapter will skirt that boundary between coding and communication, because programming is a collaborative activity.
BDD is really an amalgamation of other techniques. It relies heavily on DDD ideas like the ubiquitous language and combines them with test-driven development. The main innovation is applying test-first principles at the feature level. Using the ubiquitous language as a Domain-Specific Language (http://martinfowler.com/books/dsl.html), the team works with the customer to express the specifications for features in an executable form, as an automated acceptance test. Then, the developers work to satisfy the conditions expressed in the acceptance tests.
My own experience has been that BDD tends to stay...