Code Audit and Remediation
What we've learned so far
Every codebase accumulates debt. It used to happen slowly, through a hundred reasonable decisions made under deadline, and it now happens in weeks when a model does most of the typing. The speed is different. The underlying problem is not. In both cases the gap is between code that runs and code that is correct, and closing it takes someone who has reviewed enough complex systems to see what is missing rather than what is there.
What gets left out is consistent. Authentication that holds when someone actively tries to break it. Validation on every path rather than the obvious ones. Fallbacks for when a dependency is unavailable. Secrets kept out of the repository. Errors that fail safely instead of returning the database structure. Tests, so the next change does not quietly undo the last. Data handling that would survive a regulatory question. None of this is difficult to add. It is difficult to notice, because it is absent rather than wrong, and nothing in the product tells you it is not there.
The same applies in reverse. On a codebase that was written carefully, AI is a fast way to pay down debt, provided it works inside the existing conventions rather than importing its own. Point it at a well-structured system with clear rules and it will hold the line. Point it at an unclear one and it will confidently make things worse.
So the work has two halves. Fix what is there, in the order of what is actually dangerous. Then set up the rules, the review gates and the test coverage that stop it recurring, so the next hundred changes come out better than the last hundred did.
What this can involve
Reviewing security and compliance
Code Refactoring and Technical Debt
AI-assisted Code Review
Automated Testing Services
Technical Discovery
How we work
Read the codebase
We go through what is actually there, not what the documentation claims, and find the parts the rest of the system depends on.
Identify gaps and vulnerabilities
Security gaps, missing validation, absent fallbacks and exposed secrets, ranked so you know what is dangerous and what is merely untidy.
Document and plan delivery
How the system works and the rules new code has to follow, including how AI-generated code gets reviewed before it merges.
Fix according to prioritisation
The dangerous parts first, in small changes that can be reviewed and reversed. The application stays running throughout.
Build tests around what matters
Coverage on the paths that carry real consequences, so the next change cannot quietly undo this one.
Where this isn't the right fit
If the code is inconsistent but nothing is slow and nothing is unsafe, this work will cost you money and change very little. Untidy is not the same as broken. If the product is still changing shape every week, wait until the direction settles, because test coverage around features that get deleted next month is budget spent twice.
If you have already decided on a rewrite, you want a build team rather than an audit, and we would rather say so than bill you for one first. If releases are slow because of handovers or approvals rather than the code, fixing the codebase will not help. And if a customer has asked for a formal security certificate, you need an accredited assessor. We can tell you what to fix and fix it, but we do not issue that paperwork.

