DevOps Engineering
DevOps engineering, in practice, is the automation between writing code and running it safely — CI/CD pipelines, configuration management, and infrastructure changes that don’t depend on someone remembering the right sequence of manual steps.
The aim is for releases to be routine rather than risky: pipelines that are boring to operate, GitOps workflows where Git is the source of truth for what’s actually running, and automation that replaces manual runbooks instead of just documenting them.
Problems this usually starts from
These are the kinds of things that usually prompt someone to get in touch:
- Releases depend on one person remembering the right sequence of manual steps.
- A CI pipeline exists, but nobody trusts it enough to deploy on a Friday.
- CI runs, but takes so long that people batch up changes and deploy less often, not more.
- Environments have drifted from what’s actually documented, and nobody’s sure which one is right.
- Every new service means re-solving the same deployment problem from scratch.
- Rollbacks are stressful and manual instead of a known-good, tested path.
- Infrastructure changes get made by hand and remembered later, if at all.
What an engagement looks like
It starts with a short call — understanding what’s already in place, where it’s actually breaking down, and what “done” would look like, rather than assuming the tooling on paper matches what’s really running. From there, scope gets agreed upfront: usually either a fixed piece of work (“get this pipeline to a state where nobody’s afraid of it”) or an ongoing placement working alongside the existing team.
Either way, changes go through the same review process as everything else already running. Deliverables are concrete — pipelines, GitOps configuration, and runbooks that live in Git, not slide decks — and the aim is automation that outlives the engagement, documented well enough that whoever’s on call next can understand and change it without me.
Typical work looks like: GitLab CI pipelines that fail fast and say why, rather than leaving someone to guess; GitOps rollout patterns with FluxCD, so “what’s actually running” is always answerable straight from Git instead of from memory; and Ansible playbooks that replace tribal knowledge — the stuff only one person knows — with something reviewable and repeatable. Where a pipeline already half-works, the priority is usually fixing the parts that block releases first, rather than a ground-up rewrite nobody asked for.
Engagements typically run anywhere from a few days for a specific fix up to several months for an ongoing placement — there’s no minimum contract length, and scope can start small and grow once it’s clear the working relationship fits.
Questions
Remote or on-site?
Either — depends on the engagement. Comfortable with a regular on-site day where required.
Long contracts only, or shorter work too?
Both. That includes urgent, one-off issues — a deploy pipeline that's broken and blocking releases, a bad rollout that needs untangling fast — not just fixed-scope projects or longer placements. No running contract required to get started on something like that.
What if GitLab CI or GitHub Actions is already in place?
Fine — the aim is rarely to replace what's there wholesale, more to fix the parts causing pain and leave the rest alone.
How do you report progress on longer engagements?
Whatever's already in use — a Slack update, a ticket per piece of work, a short weekly note. No separate reporting process bolted on top of how the team already works.
Do you work with a specific cloud provider?
Most commonly AWS, but the DevOps side of things — GitLab CI, GitOps, Ansible — isn't tied to one provider and carries over to whatever's actually in use.
Also
- Site Reliability Engineering — Observability and reliability as measurable properties, not luck.
- Platform Engineering — The internal platform other engineers build on, standardised and self-service.
- Cloud Infrastructure — Architecture and provisioning on AWS, defined as code and version-controlled.