Turning Complex Problems Into Confident Technology

Inside the Workshop

Real systems, with the reasoning left in.

Find

Find the write-up that matches your problem

Every entry is listed below. Search the full text, or narrow the list by type, topic, who it is for and the technology involved.

Show
Topic
Useful if you are here for
Technology

Showing all 37 entries.

Entries

Write-ups and case studies

Proving a testimonial without asking anyone to trust me

A published testimonial is worth exactly what its verification is worth, and most sites verify nothing. The interesting problem was not the sign-in flow, it was deciding where verification stops.

Trust and identity · Production · 3 min read

This site publishes tools an AI agent can call

Most websites expect an agent to scrape them. This one registers tools a capable browser can invoke directly, and the build fails if the published list and the registered tools disagree.

Agents and machine access · Production, on a time-limited origin trial · 3 min read

How this site actually works

Two walk-throughs of this site's own machinery: what happens when you press send on the contact form, and what an AI agent sees when it arrives. The failure paths are shown rather than implied.

Reliability and cost · Production · 4 min read

The cleanup job that came for production

A scheduled registry purge deleted the image production was running on. The obvious fix had a hole in it, and the hole is the interesting part.

Reliability and cost · Production · 3 min read

Reading your own email authentication reports

Mail providers send daily reports on who is sending email as your domain, and almost nobody reads them. The ingestion was the easy half; knowing what your DNS actually publishes was the half that mattered.

Security and secrets · Production · 4 min read

Proving you honoured an unsubscribe

Every sending platform keeps its own list, and the obligation does not migrate when you change vendor. Most of the work was database permissions, not cryptography.

Trust and identity · Production · 4 min read

The build agent I killed, then rebuilt

Eight of twenty-six jobs failed and the VM was deleted after 32 hours. What the failures actually said, and what changed when it came back four months later.

Reliability and cost · Production · 3 min read

Fifteen API routes that never existed

A proxy with 170 routes, fifteen pointing at endpoints that were never there. Nothing caught them, because a compiled integration is not a verified one.

Integrating other people's systems · Production · 3 min read

A Windows service for one firewall rule

A dynamic IP against a locked-down key vault. The real alternative was never “keep running the script”, it was “widen the rule and forget”.

Security and secrets · Production · 3 min read

Deleting the last connection string

Four services moved off long-lived keys onto managed identity. The code change is trivial; the failure mode moving from startup to first use is not.

Security and secrets · Production · 3 min read

A green health check is not a deployment

Three releases where the pipeline was wrong about production. Deployment success, service health and build identity are three different claims, and only one of them notices the wrong build.

Reliability and cost · Production · 5 min read

Why only 5 of 62 invoices matched

A heading read as an invoice number, a repair that swapped one false value for another, and a nightly sync that turned errors into empty lists and called it success.

Integrating other people's systems · Production · 5 min read

The morning email that went quiet

A scheduled email that never runs throws no error. Five times a twice-daily digest stopped, lost a section or nearly sent twice, and nothing raised an alarm.

Reliability and cost · Production · 6 min read

Shipping an internal app to my own phone

Writing the screens was the easy half. Five failures that only appeared after a green build, on a device, at the store or at sign-in, each with an error pointing at the wrong layer.

Integrating other people's systems · Production · 6 min read

Six weeks of ‘done’ that did nothing

A daily sync was refused every read for six weeks and logged success each time. Found because the fix for a different bug was not allowed to close until a real record showed it working.

Integrating other people's systems · Production · 5 min read

A dashboard is only as honest as its labels

Five ways my own dashboard misled me without a single query failing, and a contact form that seemed to reject almost every submission, which was not the problem it looked like.

Reliability and cost · Production · 5 min read

Twenty events a page, and GA4 got one

Every custom GA4 event on my site went silently undelivered after a move to the GTM Google tag. How one probe found it, and the lint that stops it.

Integrating other people's systems · Production · 5 min read

Case studies

Audience Personalisation System

Three fully separate site variants — business, recruiter, freelance — independently indexable and routed by preference.

Reliability and cost · Case study · 2 min read

Real-Time Calendar Integration

Live Outlook availability as a queryable API — built so booking systems read the real diary, not a copy.

Integrating other people’s systems · Case study · 2 min read

Contact Identity Resolution & Enrichment

Built to resolve duplicate enquiries into one canonical contact — matched, enriched, and synced to Microsoft 365.

Integrating other people’s systems · Case study · 2 min read

Creator Attribution & Conversion Platform

Server-side attribution built to survive ad blockers and report real conversions back to Google and Microsoft Ads.

Integrating other people’s systems · Case study · 2 min read

C# Azure Functions API Layer

The site backend rewritten from Node.js to .NET 10 — a shared services library, its behaviour pinned by tests during the port, shipped through the same pipeline.

Reliability and cost · Case study · 2 min read

Financial Management Web Application

Built to take invoices from mail, OneDrive, and FreeAgent — extract, match, and write them back with full audit.

Integrating other people’s systems · Case study · 2 min read

Google APIs Integration Suite

GA4, YouTube, Google Ads, and Bing data ingested into first-party SQL behind a dashboard API.

Integrating other people’s systems · Case study · 2 min read

Internal Analytics Dashboard

One Entra-gated dashboard — Windows, Android, and browser — for analytics, ads, leads, and security posture.

Integrating other people’s systems · Case study · 2 min read

Internal Invoicing System

Seven-phase billing automation with audit-logged writes, FreeAgent sync, and a WPF desktop app.

Integrating other people’s systems · Case study · 2 min read

Shared Mailbox Digest

A branded digest email twice each weekday: inbox counts, lead signals, site analytics and email security posture.

Integrating other people’s systems · Case study · 3 min read

Internal MCP Server

Claude wired into DevOps, Microsoft 365, Azure, and ads platforms — with dry-run/confirm on every write.

Agents and machine access · Case study · 2 min read

Security Compliance Monitor

DMARC and TLS-RPT reports ingested, archived, analysed, and alerted — automatically.

Security and secrets · Case study · 3 min read

Also here

The case-study library

Fourteen shorter write-ups of delivered systems, each describing a real system with its architecture and the reasoning behind it, are in the list above after the write-ups: jump to the case studies, or choose Case studies in the finder. All fourteen are also on the site map.

About the Workshop

What these are, and what they are not

Every entry here describes something I actually built or investigated: what the problem was, what I considered, what I chose, what it cost and what I would do differently. The architecture is sanitised and nothing confidential is identified, but nothing is invented and nothing is tidied into a better story than it was.

This is not a blog and it is not on a schedule. Entries appear when there is something worth writing down, which is usually when a project is delivered or an investigation reaches a conclusion. If the most recent one is a few weeks old, that means I have been building rather than writing.

Start anywhere. If you would rather see how the site you are on is put together, start with how this site actually works.

Next

If something here is your problem too

Consultancy

A problem that needs diagnosing before anyone decides what to build.

Consultancy

Freelance

A job that needs doing to a written scope and a price.

Freelance

Recruiters

Assessing whether this is the right contractor for a role.

Recruiters

Want to talk it through?

A free 20-minute call: you’ll know whether I can help and what the next step involves. No obligation.

Book a free 20-minute call

Or write to me about: A problem to diagnose A job to price A role to fill