Salesforce.com’s R&D organization made a comprehensive large scale transition to agile software development in October 2006. Since that time we have delivered five on-time major releases of our Salesforce application suite and Force.com platform using the new agile approach. There are currently over 40 scrum teams contributing to each major release, and all teams work in a single release code branch. When combined with an aggressive, risk-tolerant culture, this results in many team interdependencies.
Using simple but proven design principles, this presentation explains the “Layered Module” architecture style, an approach to manage dependencies between the modules which compose a program. We will discuss the single responsibility principle. We will see how to use abstract classes and interfaces as a mean to reduce dependency surface. In the same way, we will present the techniques of dependency injection and inversion of control to reduce the coupling between classes. Lastly, we will discuss benefits to modularize and decouple with layers using namespaces (packages).