Practice

The thing that ships is the thing that was designed.

Research, design, front end, services, data and platform in one team — so nothing is lost in a handover that never has to happen.

Most delivery failures are not engineering failures. They are handovers: a concept designed by one group, specified by a second, built by a third and operated by a fourth, each translating the last. We keep the whole path in one team, which is why the thing that ships is recognisably the thing that was designed.

How an engagement runs

Five phases, and the first one can end with us telling you not to build it.

  1. 01

    Discovery — decide what is worth building

    Two to three weeks with your users and your data, ending in a designed concept, a technical approach and an honest estimate — including the case for not building it. We would rather lose the build than deliver one that should not have started.

  2. 02

    Design — the system drawn before it is built

    Interaction design, content design and architecture in the same room and the same week. Design tokens and components are produced as code from the start, so there is no handover step in which the design quietly changes.

  3. 03

    Build — production-shaped from the first sprint

    Real infrastructure, real pipeline, real data boundaries on day one. The first deploy happens in week one and every deploy after it is the same mechanism, so shipping never turns into a project of its own.

  4. 04

    Harden — assurance before launch, not after

    Threat modelling, dependency and secret hygiene, access review and accessibility conformance run as part of delivery. Remediation found in week two costs a day; the same finding at assessment costs a quarter.

  5. 05

    Run — operate it, measure it, hand it over

    Service objectives, alerting that maps to user harm rather than to CPU, and a deliberate transfer of capability to your team. The engagement is designed to end.

Product design and research

Find the real task before designing the screen that serves it.

We start from what a person is actually trying to finish, decompose it into the screens and controls that get them there, and treat every state that task can be in — empty, loading, partial, failed — as work to be designed rather than something the front end will improvise. That is also what makes a missing step detectable: a task model can be checked against a running product, and a screen nobody built shows up as a gap.

What we deliver

  • User task analysis, decomposed to screens and controls
  • Design system and tokens delivered as code, not as a file
  • Every state designed: default, loading, empty, error, success
  • WCAG 2.2 AA and Section 508 conformance as a floor
  • Usability testing against the task, not against the mock-up

Front end, services and data

One team from the interaction to the query plan.

The seam between design and engineering is where products lose their shape, so we remove the seam. The same team builds the interface, the services behind it and the data model underneath — which means a design decision that would be expensive at the database is known on the day it is made, not in the sprint that has to absorb it.

What we deliver

  • Typed, accessible front ends with no CDN dependencies
  • API design with versioning and deprecation planned in
  • Schema and migration strategy, including the reverse path
  • Background work, queues and idempotent retries
  • Test suites that fail before the fix and pass after it

Platform and operations

A deploy should be boring, reversible, and the same every time.

Infrastructure as code, one pipeline, and a rollback that is exercised rather than documented. We instrument for the failures that reach a user, because a green dashboard beside a broken product is the most expensive kind of monitoring — and a system that reports healthy while every request fails is a pattern we have had to design against directly.

What we deliver

  • Infrastructure as code, environments built the same way
  • CI/CD with canary or staged release and a rehearsed rollback
  • Service objectives and alerting tied to user-visible harm
  • Secrets management with no credential in source, ever
  • Runbooks and capability transfer to your operations team

How we engineer

Four standards we do not trade away under schedule pressure, because they are what makes the schedule hold.

The test is written first

A test that has never failed has never been shown to test anything. Ours fail before the change and pass after it, and we can show you which.

Always releasable

One branch, small changes, and a main line that could ship at the end of any day. Long-lived branches hide integration risk until it is expensive.

Verified in the running product

A passing test and a working feature are not the same claim. Every user-facing change is driven in a real browser before it is called done.

Reversible by design

Every deploy has a rehearsed way back, including the database. A rollback first attempted during an incident is not a rollback, it is a hope.

What you would be inheriting

Published in full. You will own this after we leave, so you are entitled to know what it is before you commission it.

Interface

  • TypeScript
  • React
  • Flutter
  • Django templates
  • Design tokens
  • Component libraries
  • WCAG 2.2 AA
  • Content Security Policy

Services and data

  • Python
  • Django
  • FastAPI
  • PostgreSQL
  • pgvector
  • Redis
  • Celery
  • Event-driven integration

Platform

  • Docker
  • Kubernetes
  • Infrastructure as code
  • GitHub Actions
  • Progressive delivery
  • Object storage
  • WireGuard
  • Observability

Quality

  • Test-first development
  • Playwright end-to-end
  • Load and soak testing
  • Static analysis
  • Dependency and licence scanning
  • Accessibility audit
  • Threat modelling

We choose boring, well-supported technology by default and justify every exception. Novelty is a cost your team pays after we have gone.

Have something to build?

Start with a discovery sprint. Worst case, you save the cost of the build.

Arrange a meeting