My career as a software engineer started in 2007 at Purdue University. I was working in the Linux kernel and researching how data was shuffled between the kernel and the user application layers. This was happening in huge clusters of machines that all talked to each other using OpenMPI — how supercomputers, like those at Los Alamos National Labs, operate to perform their enormous calculations around meteorology, physics, chemistry, etc.
It was an exciting time, but I had to learn a ton about how to debug the kernel. I’d only started programming in C over the previous year, so it really stretched my knowledge and experience. A big component of this was figuring out how to navigate a gigantic code base, which hit 6 million lines of code that year (again, in 2007!) There were times when I felt helpless trying to make sense of it all, but I will be forever grateful for the experience.
Being thrown in the deep-end meant that I was exposed to the way real-world code can be modularized. I learned how to quickly dissect a large codebase and how to debug in some of the toughest environments. But over time I also realized that I had learned a lot of skills that are largely irrelevant to how the vast majority of people build business value into software today. I now build business value that solves more abstracted problems than how bits are shuffled through a networking stack.
It’s these higher order abstractions that help engineering teams realize pivotal business results.
The main drivers of software-engineering productivity are the abstractions used to reach development goals. You can write software using CPU assembly languages or modern scripting languages. In a theoretical sense, you can achieve the same software goals with either approach. But realistically, productivity will be higher with modern scripting languages than with assembly languages.
Yet, everything we write today compiles down to assembly language in some form, even if it’s through Just-In-Time compilation. That’s because assembly language is the core medium we use to communicate intent to hardware, which ultimately carries out the operations. But now, we no longer directly write software with it; we have better abstractions.
Infrastructure-as-Code (IaC) fulfills the same foundational mechanism for cloud computing. It informs the cloud provider with raw data about our intentions: create a function here with these permissions and create a topic over there with this name.
Just as with assembly language, we have been writing IaC templates by hand because there have not been any better methods.
Just as with assembly language, we have been writing IaC templates by hand because there have not been any better methods. Frameworks like that of serverless.com are ever-so-slightly better abstractions; however, many adopters of these frameworks have yet to achieve meaningful business-productivity gains. This is largely because, once off the beaten path, you end up writing bare CloudFormation. The whole process leaves you back at square one for some of your most complicated infrastructure like VPCs and databases.
IaC is the only sane way to provision cloud infrastructure. That means it’s time for us to find abstractions on top of IaC that provide us with meaningful productivity gains. This is where Stackery comes in. Stackery provides you with an easy drag-and-drop interface to configure your serverless IaC templates. Crucially, you can also import your existing IaC templates (AWS SAM or serverless.com) and use Stackery to extend your applications without worrying that Stackery will delete or modify unrelated infrastructure configuration.
My career could have taken a number of different paths, but I’m glad to be in serverless today. The industry is moving steadily in this direction and my team creates solutions that make it more manageable for everyone. Notably, the “deep-end” of serverless is much more navigable than the technology I was working with in 2007. Unlike certain aspects of what I learned in the bowels of the Linux kernel, serverless and the tools that manage our IaC templates are the new assembly language for the cloud. Stackery and IaC are significant when considering how the majority of developers will be building business value into software going forward.