When you think of developers in the tech space, they're typically pecking away at a keyboard to write code to create a software application. These are software engineers, and this singular view of developers was probably spot on 10 years ago. Today, an infrastructure developer works side by side with the software engineer, writing not the software code but rather the instructions for various tools to provision infrastructure components.
Before virtualization, there was no way to apply code to infrastructure. Today, a couple lines of PowerShell scripts are enough to construct and launch a new server. Organizations rely on automation and programmatic control over the IT environment. Code can be applied to build software applications and to write automation tasks that provision the infrastructure those software applications need as well. This automation capability gave rise to the infrastructure developer role. In addition to writing code, the infrastructure developer relies on various tools to orchestrate the automated infrastructure provisioning and, sometimes, the software delivery to that infrastructure. We can provision new servers, configure networking components and lay out storage requirements in code, automatically and in a repeatable manner.
An important dichotomy
The infrastructure developer and application developer work hand in hand. The infrastructure developer writes the code to automate the creation or manipulation of the environment that powers software that the application developer creates. The goal is to deploy software to infrastructure that customers can use. Both kinds of developers must work together, so the partnership is sometimes referred to as DevOps.
A real-world example will crystalize what an infrastructure developer does and her role in an organization.
The software development team writes code to create a line-of-business application. To properly test the code and how the code uses the infrastructure it gets deployed to, the software development team must deploy it to testing hardware, hash out any bugs and then prep it for production. Developers are at a disadvantage in this phase: They do not understand infrastructure in depth, and they will spend a lot of time staging and testing. Some argue that software developers shouldn't be required to master infrastructure anyway. Software and infrastructure are two distinctly separate components.
The software developer needs to begin software testing ASAP. Before infrastructure developers joined the fold, this step typically involved a request to operations and a few days or weeks of waiting for a new server built by a system administrator. The system administrator, knowing nothing of the software, simply followed the specs the developer provided. Infrastructure developers cut this step to just a few minutes. The infrastructure developer can even create a self-service portal for the software developer to use anytime he needs a server.
The infrastructure developer builds automation and tooling and trains the software developer to use it without a go-between. Entrusting the developer with automated, self-service tooling cuts down on unnecessary communication between developers and operations teams. The infrastructure developer also cuts herself out of the middle by automating all of the tasks typically performed to create a server.
Once the software developer has created his own server via an automated workflow and has performed testing, he'll need the infrastructure developer again. This time, the infrastructure developer works to deploy the software to production. In organizations that practice continuous deployment, the software developer deploys the code directly to production himself.
The infrastructure developer is a hybrid of code creator, automation engineer and build/release engineer. She's the toolmaker and automator for the software developer, assisting him in any way necessary to provide infrastructure on demand and to ensure the software developer's code gets released to production with as few delays as possible.