04.01.21

Domain Driven Design for Large Infrastructure as Code Projects

By Mathias Phoyu
#DomainDrivenDesign for Large Infrastructure as Code Projects

In this current age of software development, microservices play a crucial role. More than 63% of enterprises are adopting microservices architecture for better customer experience, better employee efficiency and for cost saving. Using the right approach to build microservices is more about the software’s architectural design. Two architectural principles which help engineers succeed with microservices are Domain Driven Design (DDD) and Infrastructure as Code (IAC). 

What Are DDD and IAC?

Domain Driven Design was introduced by Eric Evans in his book, Domain-Driven Design: Tackling Complexity in the Heart of Software, 2003. He encompassed best practice approaches from the software development landscape to provide the foundation for the idea. DDD is a concept for software architectural design which breaks complex problems into smaller areas. These smaller areas are called domains. Each domain has several subdomains and these subdomains contain the business logic of the software. For example, an online e-commerce domain can have product, order, catalog, and delivery environments as subdomains.

Infrastructure as Code is a very popular term in the DevOps landscape, and it encompasses the process of infrastructure automation in an enterprise. IAC encourages you to provision and manage the entire IT architecture through code. IaC adopts the DevOps approach of operating from a single source of truth to ensure that the same configurations are applied repeatedly and there are no discrepancies.

Could DDD Help with Large IaC Projects?

The major advantage you get for using DDD is that DDD helps you solve complex business issues by breaking them into small pieces and solving them separately, and IaC projects are pretty complex in nature. As your infrastructure grows, the amount of infrastructure code grows and it becomes very difficult to maintain. Following the principles of DDD will help to manage complex Infrastructure as Code projects with ease. You can divide an Infrastructure as Code project into several subdomains depending on different business logics and maintain these subdomains separately.

Consider you are using Infrastructure as Code for automating infrastructure for a company. The company’s hierarchical framework comprises of several teams including the development team, testing team, operations team, and production team. The company’s current Infrastructure of Code setup involves managing and provisioning infrastructure across all the teams together. However, this comprehensive approach can become very complex at an environmental or team level for handling the infrastructure code for all the teams in a single script file. So, you can apply Domain Driven Design principles here and manage the infrastructure code for all the teams separately with ease while still optimizing the benefits of automation and version control that are inherent to IAC.

Is There a Connection Between IaC and DDD?

The common ground between already implemented IaC tools and DDD concepts is the software developers’ code to solve a complex business problem such as automating a big enterprise infrastructure. IaC says to automate all the infrastructure complexities through code, rather than keeping it manual. And DDD concepts concentrate on keeping the domain model code in one layer and isolated to other domains. This model of isolating each domain model code with others reduces the overall complexity of the infrastructure code, and helps us solve the real business problem by breaking it in smaller areas.

How Useful Are DDD Best Practices in Iac Projects?

Domain driven design is the combination of the best design patterns and practices used in software development over a period of time. So, applying Domain Driven Design concepts and best practices in your IAC projects will surely be useful as you get to apply all the industry proven successful approaches and practices. Most of the time, the most significant and complex problems in software or an application are not technical, rather it is the poor design of the application. If your application is not solving a pain point for your visitors or meeting your users’ needs, then it is important to revisit the design to ensure you overcome this issue. If you do not adjust the application design to ensure your users are happy then it’s immaterial if your infrastructure technology implementation is excellent. 

Applying DDD at the time of developing IaC projects will ensure that you do not miss addressing the real business problem of your users and the solution you develop solves the exact issue. DDD provides a structure of practices for developing Infrastructure as Code projects that will help you make design decisions focusing on real business problems and accelerate the project by reducing complexity. 

How Can You Leverage DDD in an IaC Project?

Domain Driven Design architecture can provide a lot of benefits for your project. Domain Driven Design eases the communication between the stakeholders, provides flexibility and modularity in developing a design solution, reduces the risk of misunderstandings by freezing the requirements for each domain, and provides better team coordination. To leverage DDD in the IaC projects, you need to apply DDD principles to your projects, such as applying object-oriented design concepts to the IaC project architecture.

According to DDD principles, your IaC project must align with the business strategies, processes and models. You can divide the IaC project into multiple domains, and each domain runs in isolation from the other. The dependencies on the infrastructure framework are minimum, and you can repeat and reuse quality development code.

Conclusion

The premise of Infrastructure as Code (DevOps) lies in close collaboration between development and operation teams. Domain Driven Design encourages similar collaboration between domain experts and software developers. So, a combination of DDD and Infrastructure of Code can help significantly remove the complexity surrounding complex infrastructure code with ease. 


Caylent provides a critical DevOps-as-a-Service function to high growth companies looking for expert support with Kubernetes, cloud security, cloud infrastructure, and CI/CD pipelines. Our managed and consulting services are a more cost-effective option than hiring in-house, and we scale as your team and company grow. Check out some of the use cases, learn how we work with clients, and read more about our DevOps-as-a-Service offering.