Consulting, Product & Talent
Code review and architecture audit
An independent written verdict on what your system is actually in — what breaks first, what to fix, and what each fix costs in developer-days.
- From
- $800–$10,000
- Typical time
- 1–4 weeks
- Usually bought by
- CTOs, investors
What this actually solves
Three situations bring people here and they look different from the outside, but they are the same purchase underneath.
The first is an owner who paid an agency to build something, watched the agency move on, and has now hired a developer who says the whole thing needs rewriting. The owner has no way to tell whether that is an honest engineering judgement or a new person who would rather start clean than read someone else's work. The second is a CTO who has been saying the same thing internally for three months and cannot get the budget, and needs an outside voice to say it in a document that a board will read. The third is someone about to buy or invest, who needs a lighter version of due diligence before committing.
In all three cases you are buying one defensible sentence you can put in front of somebody else. Not a list of observations. A verdict, with the reasoning attached, that survives being argued with by the person who wrote the code. That is a different product from a code review inside a team, and it changes how the work is done and how it is written up.
The two halves of the name matter too. A code review is the close view — files, functions, patterns, the specific line where a token is logged. An architecture audit is the wide view — which components exist, how they talk, what is exposed, and which big decisions have already boxed you in. Systems fail in both directions, and looking at only one of them is how an audit misses the thing that actually takes the site down.
What we do, and in what order
- Scope and read-only access. Which repositories, which environments, what is explicitly out of scope, and a written undertaking that nothing will be modified. This is agreed before a single file is opened. Half a day.
- The automated pass. Linters, static analysis and dependency auditing, plus
clocfor a first map of size and language mix andgit logfor where change actually concentrates. Semgrep for security patterns, ESLint or Ruff depending on the stack,npm auditorpip-auditfor dependencies, SonarCloud for a quality overview. This is not the work. It is the first page of the work, and your own team could run it. Half a day to a day. - The structural pass. A module map, and then an architecture diagram drawn by hand in Excalidraw or Mermaid — what calls what, where data is stored, what is reachable from the internet, where configuration and secrets are read from. Drawing it is not decoration. Until the diagram can be drawn, the system has not been understood, and the places where the pen stops are usually the places worth investigating. One to two days.
- The manual pass on five files. Only five, chosen deliberately, read line by line. They are almost always the same three kinds of file — anything touching payment, anything touching authentication, and the old one that everybody on the team refers to as the file nobody touches. Depth on five beats a skim across the whole repository. Two to four days.
- One hour with the lead developer. The most valuable question in the engagement is what they are most afraid of at night. Tools find patterns; only the person carrying the pager knows which subsystem has been surviving on luck. One hour.
- Findings, written to a fixed shape. Each one carries a severity of Critical, High, Medium or Low and four fields — what it is, where it is with file and line, what it costs the business if it happens, and how long the fix takes in developer-days with the assumption about developer familiarity stated separately. Anything we cannot tell apart from a deliberate choice goes into a separate list headed questions for the team, not into the findings. Two to four days.
- Remediation plan and readout. The plan is ordered, not alphabetised, and the readout is a live call where the report is walked through and argued with. Half a day.
What moves the price
The range is $800–$10,000 over 1–4 weeks, and three things decide where in it you sit.
Size and spread. One service of forty thousand lines is a different exercise from a system spread across many services, several languages and a mobile client. Spread costs more than raw line count, because every boundary between components is a place where the interesting failures live.
Who reads the report. A document for your own CTO is a working artefact. A document going to a board, an acquirer or an investor is a different one — every claim has to survive hostile reading, every number has to carry its assumption, and our name and our responsibility sit on it. That difference is real work, not a markup.
Whether the people are available. With an hour of the lead developer's time, access to the git history and a running environment, we can confirm things quickly. Without them, everything has to be inferred from static code alone, which is slower and produces a report full of hedges. If access is going to be limited, we would rather price it honestly at the start than discover it in week two.
What usually goes wrong
The report is hundreds of findings long. You open it, scroll three pages, close it, and do nothing at all. That is the most common way this service fails, and it fails while looking thorough. The point of paying an outsider is to have somebody decide what matters, and a report that refuses to decide has quietly handed the hardest part back. The first page must be an executive summary with no more than five items, each with money or time next to it, and one sentence saying what to do if you only ever do one thing. Everything else belongs in an appendix.
Findings get ranked by how ugly the code is rather than by blast radius. Inconsistent naming, missing formatting, a file that is too long — these are real and they are also what a linter already reports for free. When they appear as findings they bury the three items that could actually take the system down or leak data. Style and formatting are excluded from the report entirely, and every finding that stays has to cite a file and a line. An uncited claim is deleted rather than softened.
Somebody promises a security verdict. The sentence this system is secure is the single most expensive thing that can appear in this kind of document, and the pressure to write it comes from your side of the table, because you want something clean to forward. It is a claim from a different discipline, with its own testing regime and its own liability, and it cannot be supported by a four-week read. What replaces it is narrower and more useful — these specific areas were examined, these specific problems were found, and these areas were not looked at. The same applies to timelines for somebody else's team. We can estimate developer-days with the assumption stated; we cannot promise the date your developers will hit.
See where the site stands before you brief anyone.
If the site is already live, start from what it scores rather than from a guess. The audit reports what it checked, what it found, and — the part most tools leave out — what it could not check, and why.
Questions people ask before they commit.
- Will you change anything in our code?
- No, and that is written into the engagement before access is granted. We work read-only. Nothing is committed, nothing is refactored, no branch is opened. If we find something that needs fixing today rather than next quarter we tell you in the same hour we find it, and your team makes the change.
- Our new developer says the whole thing needs rewriting. Will you tell us whether that is true?
- That is exactly the question this answers, and the answer is usually more specific than either yes or no. Systems described as unrewritable tend to mix genuinely dangerous areas in with code that is merely unfashionable, and the two are not the same problem. We will name which is which, with file paths, and cost both paths in developer-days so you can compare them properly.
- Does this mean our system is secure afterwards?
- No. We will not write that sentence and you should be careful with anyone who will. A security certification is a different discipline with its own testing regime and its own insurance behind it. What we can write is precisely what was examined, what was found in it, and what was out of scope, which is a defensible statement rather than a comfortable one.
- Do you need to talk to our developers?
- We want one hour with whoever knows the system best, and that hour is usually the most valuable in the engagement. The question that earns it is what keeps them awake at night. Tools find patterns. Only the person who has been paged at 3am knows which part of the system has been quietly held together for two years.
- What do we actually get at the end?
- A report whose first page is an executive summary of no more than five items, each with a cost in money or time attached and one of them marked as the single thing to do if you only do one. Behind that, an architecture diagram, the full findings with severity and file references, a remediation plan in order, and a live readout call to walk you through it.
- Why is the price range so wide?
- Because the codebase size and the audience for the report both move it. Forty thousand lines in one service is not the same exercise as a system split across many services and several languages. And a report written for your own CTO is a lighter document than one going to a board or an investor, where our name and our liability sit on every claim.
Often taken together.
Start with the brief, not the invoice.
Send what you are trying to achieve. You get a written scope, a price and a date — or an honest “this is not the right service for that”.
Talk about Code review & architecture audit All Consulting, Product & Talent services