Nothing starts until the scope is in writing.

  1. 01CALL

    A scoping call about the problem, the users and the date that matters.
  2. 02WRITTEN SCOPE

    A statement of work names the problem, the scope, the engineers, the timeframes and the fee.
  3. 03ACCESS

    The least access that will do the job, on a named account of our own.
  4. 04FIRST SLICEIN 2 TO 3 WEEKS

    A first working slice, then a demo every week and a preview link for work in progress.

Six stages, with an engineer at the centre.

Our engineers set the plan, direct the agents, read each change and approve it.

Agent-written code meets the same bar as ours:

  • Tests on the paths that carry money or data
  • Quality and security checks that have to pass
  • An engineer who can explain it before it merges
How a change ships, as a loopAn engineer sits at the centre of six stages: intake, parallel agents, automated checks, preview deploy, code review, and merge and deploy.Engineerdirects · approves01Intake02Parallelagents03Automatedchecks04Previewdeploy05Codereview06Merge anddeployHow a change ships, as a loopAn engineer sits at the centre of six stages: intake, parallel agents, automated checks, preview deploy, code review, and merge and deploy.Engineer01Intake02Parallelagents03Automatedchecks04Previewdeploy05Codereview06Merge anddeploy
  1. 01

    Intake You drop bugs and feature requests on one intake board.

  2. 02

    Parallel agents Each works in its own isolated environment and branch.

  3. 03

    Automated checks Tests, type checks, lint and security scans on every pull request.

  4. 04

    Preview deploy Every branch gets a preview link on our domain.

  5. 05

    Code review An engineer reads each change, with bug and security passes.

  6. 06

    Merge and deploy Every merge builds, tests and deploys.

Many agents at once, each in its own worktree and branch.

  • Our tooling turns each request into a PRD and a sprint plan.
  • Developer and QA agents run in parallel, each in its own isolated environment, git worktree and branch.
  • Guardrails on every run, and no two agents share a working copy.
  • Everything comes back as a pull request on your repository. We write to branches, never to main, and your branch protection stays on.
How a request becomes merged, deployed codeA request from the intake board becomes a plan. Coding agents work on it in parallel, each in an isolated environment and branch, and open pull requests. Automated checks run on each pull request and each branch gets a preview deployment. One of our engineers reads each change and approves the pull request; your branch protection decides who merges it, and every merge runs the deploy pipeline.How a request becomes merged, deployed codeA request from the intake board becomes a plan. Coding agents work on it in parallel, each in an isolated environment and branch, and open pull requests. Automated checks run on each pull request and each branch gets a preview deployment. One of our engineers reads each change and approves the pull request; your branch protection decides who merges it, and every merge runs the deploy pipeline.

Five questions each pull request answers before it merges.

We approve the pull request; your branch protection decides who merges it.

01

Does it do what the task asked, and nothing else?

02

Would it survive bad input, a slow network and a second user?

03

Is anything generated that nobody can explain?

04

Is the test testing the behaviour, or just passing?

05

Could the next engineer change it without breaking something else?

Bugs and security get a dedicated pass of their own, the same one we run in a code review.

Tests at four layers, run by CI.

  1. Unit

    Fast tests on the logic, run on every pull request.

  2. Integration

    Services, the database and the APIs they call, tested together.

  3. End-to-end

    Real user flows driven through the product.

  4. Autonomous web testing

    Our in-house platform, run on top of the three suites above.

A preview for every branch, and a deploy for every merge.

StatusSTEPRESULT
Agent draftagent-3/fix-n-plus-one opened pull request #214
Tests212 passed, 0 failed
Type check0 errors
Lint0 problems
Dependency auditclean
Secrets scanno secrets found
Static security analysis1 finding: query built from user input, fixed in 3f9a2c1
Preview deploypreview for PR #214 is live
Code reviewapproved with 2 comments
Mergemerged into main under branch protection
Deploybuild, tests and deploy passed

What has to pass before an engineer opens the pull request.

CHECKWHAT IT CATCHES
TestsBehaviour that changed when it should not have
Type checksValues that cannot be what the code assumes
LintPatterns known to cause bugs, and drift from the codebase’s style
Dependency auditPackages with known vulnerabilities
Secrets scanKeys, tokens and passwords committed to the code
Static security analysisInjection, unsafe input handling and risky calls

One loop from raw data to a model in production.

Training, fine-tuning and classical ML all follow it.

  1. Data audit and a baseline

    We read the data before we model it: where it comes from, how it is labelled and what is missing. Then we set a baseline with the simplest approach that could work, so every later result has something to beat.

  2. An evaluation set built with you

    Real cases chosen with your team and held out from training, with leakage checks so no test example, or a near copy of one, reaches the training data.

  3. Tracked runs

    Each experiment is logged with its data version, code, settings and scores, so any result can be traced and run again.

  4. Ablations

    We take changes out one at a time to find what actually moved the score, and keep only what earns its cost.

  5. A promotion gate

    A candidate goes live only when it beats the baseline on the held-out set, within the latency and cost you need.

  6. Monitoring after launch

    Once it is live, we watch the inputs for drift, score fresh samples of the outputs and track the cost of each request.

Bugs and requests on one board, shipped the same way.

  1. Drop

    Bugs, issues and feature requests, all on one board.

  2. Triage

    We sort them and agree with you what comes first.

  3. Build

    Agents build each one in its own isolated branch.

  4. Ship

    An engineer approves it, your branch protection governs the merge, then CI/CD ships it.

It worked in the demo. We make it hold up.

  • Every fix breaks something else.

  • Keys are sitting in the repository.

  • The AI assistant keeps looping on the same bug.

  • Nobody on the team can say how it works.

Built it with Lovable, Bolt, Cursor, Replit, v0 or Claude Code, and now it has real users?

We make it safe, tested and maintainable.

The in-house tools that run our agents and test their work.

  • Autonomous web-testing platform

    The autonomous layer on top of our unit, integration and end-to-end suites.

  • Multi-agent engineering platform

    Turns a prompt into a PRD, a sprint plan and parallel developer and QA agents on separate branches.

  • AI coding workspace

    Runs many coding agents at once, each in its own git worktree, with a shared backlog and guardrails.

  • AI-native IDE

    Our own desktop editor for working alongside coding agents, on Electron and Monaco.

See the system on your own code.

One repository, read-only, and a written review of it within 48 hours.

Experience
Two years serving customers, from startups to enterprise teams.
Shipped
30+ production AI systems.