This presentation discusses how test-driven development (TDD) influences architectural decisions and how architecture can support TDD. It recommends design principles like separation of concerns and inversion of control to facilitate TDD. Specific architectural styles like layers, transaction scripts, and domain-driven design are also discussed in the context of TDD. Common complaints about TDD from different stakeholders are addressed.