What is the business logic of the app? Where should it live? How can it be tested? These are common questions that developers start asking themselves when their app and team start rapidly growing. To address this problem at Lyft we applied principles of domain-driven design. It helped us to create common language to describe complex code and make it obvious and predictable. This talk will focus on basics of domain-driven design, typical app layering structure and testability.