The Unbundling of the Software Developer

Sep 22, 2021

Good luck finding a truly full-stack developer anymore. The unbundling of the software developer has vast consequences for organization design – and with it architecture and tooling. But before I try to unpack what it means –

What roles are there today? 11 different types of developer archetypes.

As a disclaimer, these are meant to be wide categorizations – every employee will be different, but it's useful to have a ballpark of the skillsets and tooling preferences of the lowest common denominator of each bucket. This helps us set the appropriate interface for the tooling and set expectations around the responsibilities. Also, you'll note that there's no particular hierarchy; despite engineers' love to debate "who is more technical," all of these roles require deep analytic thinking.

The DevOps specialist is someone who understands the practice of cloud-native. They are master scripters – gluing together on-premise infrastructure and managing cloud resources. They evolved from the combination of developer and operations best practices. Previously, it was about mastering tools like Chef and Puppet, but nowadays, it's about Kubernetes and infrastructure-as-code.

The Data Engineer is a distant cousin of the DevOps specialist. They are responsible for setting up data pipelines, managing data quality, and putting together ETL jobs around the data warehouse. Most comfortable in Python and SQL.

The Backend Engineer is a catch-all for the engineers responsible for anything behind the application layer. They are defining and building APIs, building internal libraries, designing and implementing features, and other core application logic. More senior backend engineers know how to deploy their applications, but in more mature organizations, a site reliability engineer is responsible for the ongoing production monitoring. Polyglot programmer, but mostly works in some sort of systems language (Go, Rust, Java, C#, C++, etc.).

Site Reliability Engineers keep applications running reliability. Usually only found in larger organizations, they blend production engineering with DevOps. They need intimate knowledge of how an application is deployed and updated, as well as how to configure and debug it. They are usually responsible for services hitting an SLA and often are on-call when things go wrong.

Data Scientists are responsible for modeling and experimenting with big data. They usually are fluent in Python and machine learning frameworks but have the skills to clean and query data from the database. The exact skillset varies widely between different organizations, with varying levels of expertise in statistics and machine learning. Most comfortable in a Jupyter Notebook.

Machine Learning Engineers are the experts on defining and programming complex models at scale. They are like data scientists but capable of defining large-scale models performant models in production. Designs and implements things like feature stores and serving infrastructure. Works mainly in Python (high-level bindings) and C++ for hardware-specific accelerations.

Mobile developers are self-explanatory. They are experts in device-specific APIs and design. In some organizations, they might also be responsible for mobile testing, CI, and delivery if the codebase is significantly different than browser or application stacks. Works in Kotlin, Swift, or another language that targets mobile devices.

Front-end developers are experts in different parts of the JavaScript toolchain. This bucket is probably large enough to deserve its own post and subcategories. Some are more focused on UI/UX, accessibility, or design. They might be experts at HTML or CSS, although much of UX and design requires JavaScript knowledge as well. Others might be more focused on building progressive web applications or single-page applications with frameworks like React or Vue. Going deeper, some might just be focused on lower-level tooling that builds and package the front-end and delivers it on a CDN.

Data Analysts are focused on answering business questions with the data. They are skilled at crafting complex SQL queries and transforming data. Some might be familiar with Python, but SQL is their preferred language. They love using SQL-native tools like dbt.

Database Administrators and System Administrators are a rare breed. With the advent of cloud computing, organizations no longer need as many employees to finely tune on-premise MySQL or Oracle databases. IT staff no longer have to configure software appliances and manage on-premise Outlook servers. These roles have been subsumed into Data Analyst roles and DevOps roles. Many of their responsibilities have been automated by even more code.

Software Engineers in Test specialize in tools and infrastructure around testing and QA. At larger organizations (like Google), they are responsible for building out and maintaining testing infrastructure. At smaller organizations, they might be responsible for manual or semi-automating QA testing.

If you're more curious, I wrote about some thoughts from the Stack Overflow Developer Survey, which detailed a lot of these roles and their relative growth over the last two years here.