CDK allows us to configure our AWS infrastructure using TypeScript (as well as other familiar programming languages).
The choice of language with CDK is not just about the developer experience, as opting for a typed language enables us to share types between the infrastructure and application layer. In addition, opting for a full stack language like TypeScript allows us to share types between the frontend, backend and Infrastructure as Code.
Full Stack Types provide a variety of benefits, including the ability to catch type errors at compile time, improved code readability, increased IDE support, and faster debugging. Sharing types across layers of the stack also results in increased developer velocity due to reduced type duplication.In this talk we will look at this in practice - how to structure your application, best practices for sharing types and how this works with multiple teams.
CDK differs from “traditional” IaC in many ways. Two characteristics in particular are enablers for optimal Platform Teams: encapsulation and composition.
CDK Constructs naturally enable encapsulation, and their class based paradigm allows for easy composition.
“Team Topologies” is becoming the standard for scaling engineering teams that deliver value. In team topologies a Platform team enables several “Stream Aligned Teams” to deliver value to customers.
For a platform team to work well, best practice and governance need to come as a net benefit to other teams - packaged up as an enabling toolkit. CDK constructs (e.g. for an API endpoint with correct WAF, limits and observability) can be created by the Platform team, and provided as a construct to Stream Aligned Teams to consume.
In such an approach we don’t end up with static monolithic repo templates (like we’ve all seen with other IaC solutions), and instead build a range of encapsulated constructs that encode best practices/learnings and can be combined together to build fully fledged services.
In this talk we'll look at the characteristics of CDK that enable Platform teams, real world examples of constructs created by platform teams and best practices for structuring your teams & code sharing.