# the approach · in the order we'd do it

Understand first. Start the slow things early.

First, understand the business and the problem. Then start the slowest things to mature — observability, one pipeline — immediately, where they are missing; where you already have them, we use yours. The order below is not a preference. It is the order in which the work compounds — and at the bottom of the page is the record of it running at scale.

You leave with a written spek — what your roadmap is blocked on, a fixed scope, and a timeline for your estate. Yours whether or not you use us.

$ ./sequence --in-order
01
Understand the business, then pick the architecture.
02
Observability and one pipeline — early, where missing.
03
Write the IaC, pilot a few services, redo it better.
04
Read the code for what must change to fit.
why
The slow things cannot be rushed later. Every week they are not running is calendar time nothing buys back.
# first — the business 01 / 04

Understand the business. Then pick the architecture.

A full pass over the infrastructure, and a longer conversation about where the product is going. The technical solution gets worked backwards from that. Never forwards from whatever happens to be installed.

$ ls ./accelerators →
$ ./spek --map-estate
>
The estate, mapped.
>
The thing your roadmap is blocked on, named in writing.
>
A scope, fixed before anything is built.
>
A timeline for your estate.
# then — the things that take time 02 / 04

Observability and one pipeline, started early.

Where the monitoring, the logging, or a shared CI/CD platform is missing, it starts early — these are the slowest things in an estate to mature. Where you already have them, we use yours. Either way, everything after this lands on real signals instead of guesses.

$ ./why --one-platform

One platform is an opinion, held on purpose — two pipeline stacks means every fix lands twice and trust lands nowhere. Both start early for lead time, not urgency: a baseline has to accumulate before an anomaly reads as an anomaly, and a pipeline earns trust one real release at a time. Start them late and the maturity arrives after the moment you needed it.

$ tail -f ./signals
anomaly: visible
real signals, accumulating early
# then — write, pilot, redo 03 / 04

The first pass is a draft. On purpose.

Write the IaC. Pilot a few services through it. The first pass does not have to be perfect — each service that moves surfaces a pattern, and the next pass hardens it.

read: the blocks these cycles produced →
$ ./cycle --write --pilot --redo
write/ · first pass
↳ pilot fed back
redo/ · second pass pattern hardened
maturity comes from cycles, not from a bigger up-front design
# in between — read the code 04 / 04

The code has to meet the platform halfway.

In between cycles, the codebase gets read for what must change to run on the new infrastructure — configuration, secrets, service discovery, the build itself. We do not write your application code. We do tell you exactly where it will fight the platform, before the weekend where that discovery is expensive.

$ ./why --read-the-code

A migration plan that has never read the code is a plan about infrastructure only — the surprises live in the other half: the connection string built at compile time, the secret checked into a config file, the health check that answers 200 while the app is still warming up. Finding those on a Tuesday costs a pull request. Finding them mid-cutover costs the weekend.

$ ./read --the-code
repo/
configuration config/
secrets .env → store
service discovery svc.yaml
the build Dockerfile
every seam has a filename — read before anything moves
# the record

This sequence has run at scale.

In a role at a healthcare-AI company, Speko's founder led a cloud transformation across 45 applications and machine-learning models, with more than a petabyte of data behind them. The estate moved blue/green, a parallel estate built alongside the live one, and the first cutover succeeded: the sequence above, run before the date — signals accumulating for months, one platform everything shipped through, drafts already redrafted, the code read before it moved.

The rest of the record reads the same way — each number fixed to the one prior role it happened in. A biography, not Speko engagements; none of it is a promise about yours.

01

At a Series B — the Heroku-to-AWS migration, run end to end.

02

In another role — 40+ ECS microservices, multi-region, zero-downtime migrations.

03

In another — deployment time cut 60%.

04

In another — cloud costs cut 30–40%.

You cannot check any of this, and the site knows it. So the next migration is written down instead as conditions you can enforce — five of them, on the cutover page, yours to fire us on.

$ ./read --the-trade

That is the deal the whole site runs on: an unverifiable past converted into a verifiable present. A track record is a claim about what happened somewhere you were not; the five conditions are claims about what happens in your own accounts, in writing, while you watch. If the record above earns anything, it should earn the thirty minutes it takes to read them.

read: the five conditions →
# who runs this

The owner is the principal architect. The delivery lead sets the standard.

Two people run this company. Spencer owns it and its architecture — the record above is his, kept to the roles it happened in. Martha holds delivery to a standard a steering committee can read without being walked through it. Neither card is the lesser one.

owner/ engineering

Spencer Kotowick

founder · owner · principal architect · in devops since 2014 · in tech since 2010

He owns this company and is its principal architect — the record above is his, and the sequence on this page is how he works, written down from what already worked. That record spans fintech, healthcare AI, POS and e-commerce, telehealth, and game software, with years inside an AWS Premier Partner consultancy in that biography too.

"Inside an AWS Premier Partner consultancy" is a line in a biography — a place he worked, not a badge this company holds. Speko claims no AWS partner status, here or anywhere on this site.

aws summit toronto 2022 · speaker read: the record above →
lead/ delivery

Martha Tejeda Lopez

Programme Delivery Lead

A programme and project manager across domains — any estate, any programme. Concurrent workstreams held to one plan, the sequencing, and the executive reporting a steering committee reads without being walked through it.

One application of that discipline — the cutover — is written down in full, in the open, where a client can hold it against us. It is hers to front because she does not inherit the standard — she sets it.

read: the discipline she fronts →
# next step

Which slow thing is not running yet?

Thirty minutes with an engineer. Bring the estate as it stands — we will tell you which foundational piece we would start this week, and why waiting for the bigger plan to finish is the expensive option.

You leave with a written spek — what your roadmap is blocked on, a fixed scope, and a timeline for your estate. Yours whether or not you use us.

Book the 30-min review → $ ./book --30min --no-pitch