The identification of modules and the definition of their interfaces to allow the concurrent development of the modules is another goal of design. Interfaces define borders that allow the concurrent engineering of systems, where developers and teams can work in parallel. The interface defines a common language that is shared by the different teams, this common language reduces the vocabulary that is used inside the module. Within a team the members share the module common language, among teams it is only necessary to share the interface language which reduces the complexity of the communication flowing between the teams.
The definition of interfaces may not be sufficient. When a test-first approach is followed developers want to test their module. This is why testing is a pervasive activity.