With so much to figure out with AI, it makes sense to simplify with familiar development techniques, especially infrastructure as code and Python.
Most developers donโt use infrastructure as code (IaC), argues AWS tech lead Chris Munns. But to those top 10% to 15% of developers who do use modern development technologies such as IaC go the spoils. Even if the audience for IaC remains relatively small, interest in Python and artificial intelligence is accelerating adoption, as Pulumi CEO Joe Duffy notes in an interview. In enterprises that see tech as a competitive advantage, developers are digging deep into infrastructure. IaC is their tool of choice to do this successfully.
The new IT normal
In the days when developers had to request resources from IT, they were largely insulated from the worlds of databases, key-value stores, message queues, networking, and other hard-core โinfrastructureโ concerns. Developers owned application code, enterprise architects owned application infrastructure, and IT owned servers, configuration, and scale.
Then distributed computingโa wave that began with virtual machines, swelled with containers, then tidal-waved with Kubernetesโpushed developers into the deep end of cloud infrastructure. As trite as the phrases โshift leftโ and โyou build it, you own itโ have become, they reflect the much deeper responsibilities that the average developer carries today. Not only are developers writing applications, but theyโre also doing everything else that was once in the land of infrastructure specialists.
Standing up compute resources and frameworks takes time and know-how, and itโs been a constant state of thrashing for both developers and the platform teams enabling them to find the right abstraction for exactly what that developer interface should be to cloud resources. JavaScript made the web browser programmable and set off a renaissance of web applications and mobile experiences thatโs still underway. Weโre on the cusp of a similar breakthrough in making cloud infrastructure truly programmable to developers.
The first waves of infrastructure as code
Infrastructure as code (IaC) is all the rage today, but itโs actually not new. The concept dates back more than 50 years and describes basic principles of automating infrastructure. Just as software-oriented architecture (SOA) evolved application architecture from monolithic applications into microservices patterns, IaC has been the slow-burn movement that is challenging what the base building blocks should be for how we think of cloud infrastructure.
IaC really got on the map in the 2010s, when Puppet, Chef, and Ansible introduced IaC methods for the configuration of virtual machines. Chef was well-loved for allowing developers to use programming languages like Ruby and for the reuse and sharing that came with being able to use the conventions of a familiar language.
During the next decade, the IaC movement entered a new era as the public cloud provider platforms matured, and Kubernetes became the de facto cloud operating model. HashiCorpโs Terraform became the IaC poster child, introducing new abstractions for the configuration of cloud resources and bringing a domain-specific language (DSL) called HashiCorp Configuration Language (HCL) designed to spare developers from lower-level cloud infrastructure plumbing. AWS CloudFormation and Azure Resource Management were two other top contenders in this wave of IaC.
Were domain-specific languages a wrong turn?
In that evolution to DSLs, Pulumi CEO Joe Duffy believes the IaC movement took a wrong turn. โI spent years in the programming language community,โ he says, โand we had a saying that โevery domain-specific language is destined to grow up to be an accidentally and poorly designed general-purpose programming language.โ โ The complexity of the cloud breaks DSLs, YAML, and markup languages.
Duffy says the general problem with DSLs is how they take developers and platform engineering teams away from managing cloud infrastructure with familiar programming language conventions. โCertainly if you look at IaC, it has been slowly recreating the wheel,โ argues Duffy, โfrom language richness, abstraction and reuse, package managers, testing tools, static analysis, editors and their facilities like statement completion, interactive error checking and documentation, refactoring, and so much more. The trappings are a walled garden which actively prohibits developers from tapping into the capabilities of the cloud while simultaneously hobbling infrastructure team productivity.โ
Using familiar languages with cloud infrastructure
โTreating developers with kid gloves when it comes to the cloud is a mistake I see all the time,โ offers Duffy. โIaC is exciting because it turns the entire cloud into a programmable, composable set of building blocks that can be used to build richer and more powerful applications.โ As an industry, weโve moved beyond single machine application servers and single machine operating systems to distributed computing in the cloud, orchestrated by Kubernetes. But where DSL approaches to IaC are trying to mask that infrastructure complexity from developers, Pulumi is letting developers use the built-in conventions in the programming languages they already use as the primary interface to cloud.
โI feel strongly about standing on the shoulders of giants wherever we can,โ stresses Duffy. โThere are enough hard problems to solve out there. We donโt need to create artificial ones just for fun.โ
Pulumiโs approach to IaC is multilanguage infrastructure, with support for Node.js (JavaScript, TypesScript), Python, Go, .Net (C#, F#, VB), and Java. The catalog of supported Pulumi providers spans more than 150 different infrastructure providersโand not just the big clouds, but companies like Cloudflare, Snowflake, MongoDB, Confluent, and many more.
โUsing languages [developers] already know removes a huge mental hurdle from doing IaC,โ says Duffy. โIt turns the cloud resources into programmable building blocks that can be stitched together just like any other objects in their favorite language.โ Whatโs the catch? As he continues, โThe hard part then becomes learning about those specific building blocks, which arguably is the inherent โreal complexityโ of the problem domain. Essentially, using a familiar language removes all of the accidental complexity, eliminates the fog, and lets folks just focus on solving real problems.โ
A language-first approach to infrastructure
When we think about application infrastructure domains in mature languages, like Java with J2EE and the vast Java capabilities for handling concurrency and multithreaded code, developers have decades of hard-fought experience leveraging the primitives of their favored languages. This basic desire from developers and platform teams to use the language conventions they are already familiar with is especially strong with Python and AI, according to Duffy. Where DSLs have to bend and twist to deal with complexity, mature languages like Python solve these scale issues out of the box.
โThe cloud is a giant supercomputer and AI is the biggest consumer of that supercomputer we have ever seen,โ declares Duffy. โIn this world, being able to program the supercomputer flexibly and deal with complexity that emerges at that scale is exactly why we created amazing programming languages to begin with.โ Developers donโt really want to futz with infrastructure. โAlthough infrastructure powers all of these new AI experiences, itโs not what most AI engineers get out of bed in the morning thinking about,โ Duffy argues. โUsing Python turns it from a messy, grungy afterthought into a beautiful and elegantly programmable thing, just like any other software.โ
This battle between DSLs versus general programming languages in the IaC space is not new. In 2020,ย I wrote about new models of declarative programming languagesย and how they contrasted to imperative languages in this IaC domain. Whatโs new in this IaC declarative versus general-purpose language battle is the AI gold rush. Python is the shovel that tens of millions of developers are using, and thereโs a special incentive in this moment to be able to reason with infrastructure through the lens of your primary language.


