August 9, 2024

Paul Gradie

Read Time: ~12 minutes

<aside> 📎 Explore how Empower optimizes software delivery by decoupling build and deployment processes, creating a conceptual language for automation, and reducing delivery times. Learn about the structured stages of versioning, publishing, testing, and deploying. Perfect for engineers and DevOps enthusiasts aiming for efficient, high-quality software delivery. Join our team to tackle complex challenges in a dynamic, supportive environment.

</aside>

Introduction

Whether you’re a software engineering purist, a DevOps enthusiast, a tinkerer, or even a manager - we’re all modelers. In other words, we are always trying to find abstract conceptual framings that help us implement a structure when we’re building systems of any kind. Those systems can be a business, a product, a tool, a game, or even a process for running a team.

The typical modeling scenario software engineers or developers face is trying to implement a product that supports a business. This is something I’ll bet many of you are quite familiar with. Perhaps you have implemented a store and you need to serve behaviors to a webpage that will allow customers to browse a catalog, or pay for some products. Or maybe you’ve done something more like what Empower Finance does, and you’ve facilitated the movement of money from one bank to another.

Either way, you’ll talk conceptually about your problems, which need to be translated into concrete implementations as code.

When it comes to implementing a software delivery systems - this is also true.

The Language of the Delivery System

Modeling begins with speaking conceptually about a problem - in this case, software delivery. Doing so will let us develop and evolve a language about the domain of software delivery just like any other domain.

In this post, we’ll develop a rudimentary language about delivery to see what I mean.

To kick things off, let’s come up with a most basic story:

“I’m going to write some code and then run that code in the cloud”

To do this, we’ll need to first compile our code to an executable, and then copy those executables to something that will execute them. This gives us our first two concepts: Build (compile) and deploy (copy).

Developing our Conceptual Model: The Build Process

Let's talk about this concept of Building and expand on our story.

Let’s say you’ve finished version 1 of your application and you’re thinking about sending it off to the cloud. You’ve considered manually moving your published software, but prefer to stand up an automated solution because you will be iterating new versions quite rapidly and want to continuously send out updates without too much hassle.