ForgeQubit.
← Case Studies/Agency Systems/CS-03

AgencyOpsSystem

A 40-person creative agency in London was losing 1.5 FTE of project-management time to coordination that wasn't coordination. We rebuilt the intake-to-invoice spine.

/headline-outcome
−60%manual coordination
/industryAgency Systems
/system-typeOps Coordination
/outcomeCost Reduction
/read-time10 min read
/context

Context.

A mid-size creative agency in London with 40 staff across design, copy, and strategy. Revenue healthy, margin shrinking. The partners knew why — they just couldn't point at the line item.

/businessCreative agency · London
/scale40 staff · 60+ active engagements
/team-before3 PMs + partners covering overflow
/engagementBlueprint + Automation Forge · 12 weeks
/existing-stack
  • ·Notion (briefs, wiki, project trackers)
  • ·Asana (task execution)
  • ·Slack (coordination — and everything else)
  • ·Harvest (time tracking)
  • ·Xero (invoicing)
  • ·Shared Google Drive (deliverables)
/problem

Problem.

System view — not vague business talk.

Every new engagement touched six systems and four humans before a single billable hour was tracked. Project managers were not managing projects — they were running a translation layer between tools.

  1. /01

    Intake was a negotiation

    Each new project required a PM to resolve scope, team, timeline, and budget by ad-hoc Slack messages to partners. No two intakes produced the same record.

  2. /02

    Allocation was a vibe

    Who staffed what was decided by the partners based on who seemed 'available that week'. Capacity data existed in Harvest but was never queried against upcoming work.

  3. /03

    Time → invoice was a cliff

    Harvest entries were reviewed by PMs, re-entered into a spreadsheet, and uploaded to Xero. 8% of billable time leaked between steps, per the partner audit.

  4. /04

    No graph of the work

    Nobody could answer 'which engagements are at risk this week' without asking every PM. The agency ran on collective memory refreshed every Monday morning.

  5. /05

    Partner time as a safety net

    Partners filled every coordination gap, which masked the gap. Shrinking margin was the only signal that something was wrong.

/before-system

Before.

Workflow as it existed, with failure points marked.

Six tools, three PMs, two partners as overflow. A project's state was reconstructed weekly from Slack messages, Harvest reports, and everyone's standups.

/before-state · manual · unobserved
  1. 01

    New brief lands (email / Slack / call)

    no canonical intake · partner-dependent

    manual
  2. 02

    PM drafts scope in Notion

    template drift · no schema

    manual
  3. 03

    Partners approve + staff the project

    by memory · no capacity query

    bottleneck
  4. 04

    Project kicked off in Asana

    manual task rebuild from Notion · drift

    manual
  5. 05

    Team logs time in Harvest

    inconsistent project codes

    manual
  6. 06

    PM reviews time weekly

    PDF export + Excel · 4h / wk

    bottleneck
  7. 07

    Invoice drafted in Xero

    re-entered from spreadsheet · timing leaks

    broken
/after-system

After. Forged architecture.

Trigger · Decision · Execution · Data · Observability.

One intake, one engagement record, one allocation query, one automated path from logged time to draft invoice. Partner approval retained as a gate, not a glue.

/L-01

Trigger

Canonical intake regardless of channel

  • · node
    Intake form

    Single structured form (external + internal) emitting an `engagement.requested` event

  • · node
    Email parser

    Inbound briefs normalised into the same event schema, with a partner-owned review step

/L-02

Decision

Scope, staffing, budget as encoded policy

  • · node
    Scope classifier

    Rule set that maps brief type → standard scope templates, budgets, and timelines

  • · node
    Capacity query

    Live view of team capacity over the next four weeks, queryable by skill and seniority

  • · node
    Partner gate

    Human approval step with full context assembled — scope, team, budget, capacity — not a blank Slack message

/L-03

Execution

Engagement spin-up and ongoing sync

  • · node
    Project provisioner

    Creates the Asana project, Notion workspace, Slack channel, Harvest project, and Drive folder from a single event

  • · node
    Time-to-invoice bridge

    Daily sync from Harvest → engagement record → Xero draft invoice, with reconciliation holds

  • · node
    Risk signals

    Automatic flags when time-to-budget, timeline, or scope drift beyond thresholds

/L-04

Data

Engagement event log + capacity model

  • · node
    Engagement ledger

    Append-only log of every engagement's state transitions, from brief to close-out

  • · node
    Capacity model

    Per-person allocation over time, projected against committed work

/L-05

Observability

Portfolio-level visibility for partners + PMs

  • · node
    Portfolio dashboard

    Every active engagement, state, risk, and projected close — one screen

  • · node
    Margin tracker

    Realtime margin per engagement, not monthly reconstruction

  • · node
    Weekly partner brief

    Auto-generated Monday summary: at-risk engagements, capacity gaps, billing leaks

/what-we-built

Components.

/c-01Entry layer

Structured intake

External form + email parser collapsed into a single engagement event. Every new engagement starts with the same schema.

/c-02Data service

Capacity model

Projects team capacity four weeks ahead, queryable at intake time. Replaces 'who's free?' Slack questions.

/c-03Workflow

Engagement provisioner

Single event creates Asana project, Notion workspace, Slack channel, Harvest project, Drive folder, and partner notification.

/c-04Integration

Time-to-invoice bridge

Daily Harvest → engagement → Xero draft invoice. Reconciliation holds for scope changes, and explicit partner sign-off.

/c-05Ops surface

Portfolio dashboard

Every live engagement, state, margin, and risk — replacing Monday catch-ups with a shared source of truth.

/c-06Observability

Risk signal layer

Streaming detectors on budget burn-rate, timeline slip, and scope drift. Alerts routed to PM + partner.

/outcomes

Outcomes. Measured.

Numbers out of the production system — not testimonials.

/m-01across PMs + partners
−60%manual coordination time

Measured across PM + partner time spent on coordination vs. delivery, rolling 8 weeks.

/m-02same headcount
3.1×project throughput

Concurrent active engagements handled per PM before quality signals degraded.

/m-03from 71%
92%on-time delivery

Engagements closed within the agreed timeline, pre- vs. post-deployment quarter.

/m-04year-on-year
+11ptsoperating margin

Primary driver: reclaimed partner time and closing the Harvest → Xero leakage.

/system-insight
The shift was not productivity. The shift was the work becoming a graph that could be queried, instead of a story that had to be re-told every Monday. Once coordination had a system, the partners stopped being the system.
/keep-reading

Adjacent systems.

CS-01Logistics Systems

Logistics Dispatch System

A regional 3PL with 400+ daily shipments ran dispatch through a spreadsheet, a call rota, and the judgement of three senior planners. We replaced the judgement with an engineered decision layer.

48h → 2hView system
CS-02E-commerce Systems

E-commerce Fulfillment System

A DTC health & beauty brand scaled from 50 to 500 orders a day using humans as the integration layer. We rebuilt the spine so the next 5× happened without adding headcount.

3.2M ops / yrView system
/next

Want your system redesigned?

Every case on this site started as an audit. If this study described a system that looks like yours, the fastest next step is a formal operations diagnostic.