TGH Tech
Case study · Governed self-build

A construction firm builds its own software. We make it safe to run the business on.

Three to five subject-matter experts at Viya build working applications with AI coding agents — no engineering department, no translation layer between knowing construction and shipping software for it. It works, and it works fast. What it could not tell them was whether any of it was safe to run a company on. This is the short account of the phase that closed that gap.

Construction · India 4 applications 3 audit cycles Ongoing since June 2026
Read the account The offering behind it
01 · Where it started

Software that runs is not software you can trust.

A domain expert who knows how a bar bending schedule is really calculated, or how a snag list moves between an architect and a site contractor, can now build the software for it directly. Viya had produced a substantial platform this way before we were involved at all.

The gap is invisible from outside. The application looks finished: users log in, screens load. What you cannot see is whether one customer’s data can reach another’s, whether a departing employee’s access actually stops, or whether the thing the screen said it saved was ever saved at all.

The applications were real and working. What they lacked was everything that only becomes visible when something goes wrong.

02 · The brief

Four things asked of us. Two pieces of work, two standing capabilities.

01 One-off, then weekly

Audit and raise to standard

Examine what the team had already built, find everything that would stop it being run as a production system, rank it by severity, explain each root cause and specify the fix. The first pass is a baseline; after that it becomes a weekly gate.

02 Build

Two new modules

Payroll processing, and a bar bending schedule tool with paid per-project access and offline payment approval. Built to the standard the audit defines rather than audited into it afterwards.

03 One-off

Infrastructure they own

Move code and hosting off personal accounts and third-party platforms onto infrastructure the business owns and controls, with access that survives someone leaving.

04 Standing

Guardrails and support

Turn recurring problems into standing rules that reach the team while they build, and be reachable between cycles for the decisions that are expensive to get wrong.

03 · How it is set up

They build. We hold the standard.

Five layers, read top to bottom: what the business gets, who builds it, how the rules reach them while they are building, the loop that governs the result, and the mechanism that makes each cycle cheaper than the last.

01 The business gets Applications it owns outright, built by people who understand the work.
02 Who builds Three to five subject-matter experts, using coding agents, at their own pace.
03 How rules arrive Guidance placed in the high-risk parts of the codebase, so it loads for whoever — or whatever — works there.
04 What governs it A weekly audit against a fixed standard, reported the same day in the same format.
05 What compounds Anything found twice becomes an enforced check, so the next cycle costs less than the last.
04 · How the week runs

A six-step loop, once a week.

The step that matters is the last one. Each cycle is supposed to make the next cycle’s problems less likely — not merely fix this week’s.

  1. Step 1 Build The team builds features on its own priorities. Where the work touches payments, authentication or sensitive data, the approach is settled with us before it is written. Client · we are on call
  2. Step 2 Audit Everything built since the last cycle is reviewed against the standard: security, data isolation, correctness, tests, deployment. Us · weekly
  3. Step 3 Report A dated report in a fixed format. Every finding with its severity, why it exists, what it risks, and how to fix it. Us · same day
  4. Step 4 Clarify Questions on the report are raised and closed, so nobody starts remediation from a misreading. Both
  5. Step 5 Remediate The team fixes, in the order the report sets out. The next cycle verifies the fix against the code rather than the commit message. Client
  6. Step 6 Ratchet Anything that appeared twice becomes an enforced rule. This is the step that makes the arrangement get cheaper. Us
05 · Audits and guardrails

An audit finds it once. A guardrail stops it returning.

A guardrail is a standing rule created because a problem happened more than once. Phase I proved the two kinds are not equally effective.

Enforced — the computer stops you

Held one hundred percent of the time.

The code will not compile, the tests fail, the deployment is blocked, or the database refuses the write. A required test run before any merge; a constraint that makes a mismatched record impossible. Once it is in place there is nothing left to remember.

Rule only — a person must remember

Held until the week got busy.

Written guidance placed where the work happens, so it reaches the agent and the person automatically. Better than nothing, and materially better than a wiki nobody opens — but it degrades exactly when pressure rises, which is when you need it most.

06 · Between the cycles

The part of the work that leaves nothing behind.

The audit, the guardrails and the guidance in the codebase are all artefacts — they exist as documents and every claim here traces to one. There is a fourth mechanism, and it produces no record at all.

Throughout the engagement we were reachable while they were building — on calls and in working sessions — for the specific implementations where a wrong first attempt is expensive to undo.

An audit cannot answer these, because an audit arrives afterwards. They are the moments where a domain expert with a coding agent can produce something that runs and has no way to judge whether the design underneath it is the safe one. The agent will offer several approaches with equal confidence; choosing between them is experience, not instruction.

It is the point at which a non-technical builder is genuinely on their own — and the cheapest place in the whole arrangement to spend an hour.

Taking money Payment flows, refunds and what happens when a charge half-succeeds.
Who can see what Access rules across four kinds of user, decided before the schema hardens.
Anything irreversible Data migrations, deletions and imports that cannot be run twice safely.
Choosing between agent answers Three plausible designs offered with equal confidence, one of which ages badly.
07 · The central finding

The fix lands where it was found. The next surface never gets it.

Across three cycles one pattern appeared often enough to be called a law rather than a lapse. A problem is found and properly fixed. Then a new surface is built — a new user type, a second portal, another importer — and the same problem is there, untouched. In the third cycle, eight of the twelve new findings were exactly this.

The fix that landedWhere it was never carried across
Lockout after repeated password guessesThe homeowner sign-up path
Clearing the screen when a session endsThe homeowner portal
Blocking admin pages from non-adminsThe architect workspace
Keeping customer data out of deployment logsThe second data importer
Requiring tests to pass before code mergesThe entire front-end repository

The fixes got dramatically better. The discipline of applying a fix to every surface it belongs on did not — because that discipline was enforced by memory. This is how agent-assisted development fails: not randomly, but predictably, on whatever was built last.

08 · The blind spot

Two reviews, five days apart, both correct.

The weekly audit asks whether the code is safe, isolated and tested. It does not ask whether the feature does what its screen says it does.

18 July · weekly audit

Medium-to-low riskZero high-severity findings — the strongest result of the engagement.

23 July · functional review of one module

48 findings, 16 blockersA drawing upload that confirms success on screen and never sends the file anywhere.

Both are true because they measure different things. Finding that out five days apart is the most useful thing the phase produced — it changed what we review, not just how often.

09 · What was actually in scope

“An application” turned out to be an estate.

One platform serving four kinds of user, two standalone applications, and two more still being scoped. Sizing the estate honestly is the first piece of work, every time.

Core platform 3 cycles
Drawings, site defects, quality checks, milestones, scope changes, payments and sales leads. Staff, homeowners, contractors, architects
Admin panel Split out
Platform administration, extracted into its own application with its own credentials. Administrators only
Payroll Built by us
Payroll processing for staff, built to the standard from the first line. Finance
Estimator Built by us
Bar bending schedules with paid per-project access, approval for offline payment, and export. Site and commercial teams
10 · How it unfolded

Guardrails went in eleven days before the first audit.

30 Jun
Guardrails installed — before any audit Guidance placed in the high-risk parts of both codebases so it loads automatically, plus a mandated review step after every change. The core idea predates the first audit by eleven days.
Foundation
11 Jul
First audit Forty-five findings. One critical: a deployment path could be turned into full control of the production server. Overall risk: high.
45 raised
12 Jul
Second audit — the new workspace Thirteen further findings on the module built since, including a data-isolation gap between customer records.
13 raised
18 Jul
Third cycle and guardrail review Risk down to medium-low, zero high-severity findings — and the pattern named: eight of twelve new findings were fixes that had not been carried across.
Strongest result
23 Jul
Functional review of one module Forty-eight findings, sixteen of them release blockers. A different question, asked for the first time.
Blind spot
Since
Weekly cadence, ongoing The loop runs every week. The estate keeps growing, and the standard now grows with it rather than behind it.
Live
11 · Who does what

Five roles, and one of them is the constraint.

Roles rather than names, because the arrangement is what transfers. Two sit with us; three sit with the client.

RoleSideResponsibility in the loop
Reviewer TGH Owns the audit programme, the reports, the guardrail corpus and the engineering roadmap. Runs the review each cycle and grades the previous cycle’s remediation.
Standing engineer TGH The escalation point between cycles — the person the client’s builders call when an implementation is too consequential to attempt unaided.
Remediation lead Client Closes audit findings alongside their own build work. The throughput constraint on the whole loop.
Infrastructure owner Client Cloud accounts, access and transactional email — everything the business must control rather than rent through a person.
Direction Client Prioritisation and scope: the balance between platform work and visible feature delivery, decided by the business rather than by us.

The remediation role is the throughput constraint on the whole loop — findings are raised faster than one person can close them. Naming that early is more useful than discovering it in month three.

12 · Where it stands

Four applications went from ungoverned to governed.

Every claim below was verified by re-reading the fixing code, not accepted from a commit message.

Applications moved from ungoverned to governed 4 Each verified against the fixing code by a later cycle.
Automated tests on security-critical code 0 → 540 Gated: the suite must pass before anything merges.
Database tables given customer-level isolation 17 Previously enforced only in application code, not by the database.
Paths to full control of the production server 1 → 0 Found in the first audit and closed in the same cycle.
Said with the same directness

The work is not finished.

Roughly eighty findings remain open across three applications, and the functional gap the late review exposed is being worked through rather than closed. Phase I is a floor, not a finish line.

And equally true

They still build. We never took it over.

The domain knowledge never left the building, the team kept shipping at its own pace, and what changed is that somebody can now say with evidence whether the result is safe to run a business on.

13 · The model

You build. You buy assurance, not output.

Phase I was a delivery engagement. It was also, without setting out to be, a working prototype of an operating model for any business with deep domain knowledge and no appetite for an engineering department.

Software servicesGoverned self-build
Who holds the domain knowledge Transferred to a vendor, lossily, over months Never leaves your building
Who builds Vendor engineers Your own functional team, with coding agents
What you are buying Output — features, delivered Assurance, standards and capability
Cost scales with Scope. More features, more cost. Risk and estate size. Features are nearly free.
When it ends You start again with someone new You keep the code, the standard and the people

Your team can build it. We make it safe to run on.

If your people are already building with agents, the question is not whether it works. It is whether anyone can tell you it is safe. That is a conversation, not a proposal.

Start a straight conversation See the rest of our work