Skip to content

03/DEVOPS & PLATFORM

Deploying should be boring.

Pipelines, infrastructure as code, environments and observability. The work that turns a release from something the team schedules around into something that happens several times a day without discussion.

01/When you would call us

Four situations we hear a lot.

  • Deploys happen when one specific person is available, and that person has started taking holidays.

  • Staging and production have drifted far enough apart that passing tests no longer predict a successful release.

  • Infrastructure was clicked into existence in the console, and nobody can recreate the environment from scratch.

  • Something broke last week and the investigation was three people reading logs in different tabs, comparing timestamps by eye.

02/What we do

The work, itemised.

CI/CD pipelines
Build, test and deploy pipelines in GitHub Actions or AWS CodePipeline, with gates that block a bad change and a rollback path that is tested rather than assumed.
Infrastructure as code
The environment expressed as code and reviewed like code, using CloudFormation, CDK or Terraform — whichever your team already reads. Changes arrive as pull requests with a visible plan.
Containerization
Docker images that build reproducibly and stay small, running on ECS, Fargate or EKS with sensible task sizing, health checks and rollout behaviour.
Environments
Development, staging and production that differ in scale and data, not in shape. Configuration and secrets handled through Parameter Store or Secrets Manager, never checked into the repository.
Release engineering
Branching that matches how your team works, versioned artifacts, database migrations that run in the right order, and progressive rollouts where the risk justifies them.
Observability
Structured logs, metrics and traces going to one place, with dashboards for the questions you actually ask during an incident and alerts tied to symptoms your users would notice.
Developer experience
Local setup that works on the first try, fast feedback in CI, and the repetitive parts of the workflow automated so engineering time goes into the product.

03/How we approach it

The order matters more than the list.

  1. Time the current path to production

    We measure what happens today, from merged commit to serving traffic, including the manual steps and the waiting. The number is usually worse than the team's estimate.

  2. Automate the riskiest manual step first

    Not the easiest one. The step where a human currently has to remember something is where releases break, so it goes first and the improvement is felt immediately.

  3. Bring the environment under code

    What exists gets imported into infrastructure as code before anything new is added, so the codebase describes reality rather than an aspiration.

  4. Close the loop with observability

    A pipeline that ships quickly without telling you what happened is a faster way to break things. Logs, metrics, traces and alerts land before we raise the deploy frequency.

  5. Hand the pipeline over

    Your engineers make the next change to it, with us watching rather than typing. If they cannot, the pipeline is not finished.

04/Technology

What this pillar is built with.

CI/CD
  • GitHub Actions
  • AWS CodePipeline
  • CodeBuild
  • CodeDeploy
Infrastructure as code
  • AWS CDK
  • CloudFormation
  • Terraform
Containers
  • Docker
  • ECS
  • Fargate
  • EKS
  • ECR
Configuration
  • Parameter Store
  • Secrets Manager
  • IAM roles
Observability
  • CloudWatch
  • OpenTelemetry
  • Structured logging
  • Alarms

05/What you get

Things you can point at.

  • A pipeline in your repository that builds, tests and deploys on merge
  • A rollback that has been performed at least once, by us, in front of you
  • Infrastructure as code covering the environments that exist today
  • Staging and production defined from the same templates, differing only in scale
  • Secrets moved out of the codebase and into Parameter Store or Secrets Manager
  • Dashboards and alarms for the failure modes your application actually has
  • A runbook for deploys, rollbacks, incidents and on-call handover

06/Questions

DevOps & Platform, asked about.

01

Which infrastructure-as-code tool do you use?

Whichever your team will maintain after we leave. CDK suits teams already writing TypeScript, Terraform suits teams with mixed infrastructure, and CloudFormation is sometimes simply what is already there. We will recommend one and explain why, then use the one you choose.

02

Can you improve our pipeline without rewriting it?

Usually. Most pipelines have two or three specific weak points — a missing test gate, an unversioned artifact, a rollback nobody has tried — and fixing those is faster and less disruptive than starting again.

03

Do we have to move to containers?

No. Containers solve environment drift and scaling problems; if you do not have those problems, they add operational work for no return. Lambda or plain EC2 is the right answer more often than the industry admits.

04

How do you handle database migrations in a pipeline?

Migrations run as an explicit, ordered step before the new application version takes traffic, and they are written to be backward compatible so the previous version keeps working. That is what makes a rollback safe.

Describe the problem.

A few lines is enough. You will get a reply from an engineer within one business day, and it will address what you actually asked.