Skip to content
Legacy Rescue

What a code audit actually tells you

What an independent software audit covers, what it costs, and how to read a report that says everything is terrible without being talked into a rewrite.

4 min read
What a code audit actually tells you. An article by Athabasca Solutions.

A code audit is what you buy when you are responsible for software you do not understand and have to make a decision about it. Keep it, fix it, or replace it, and roughly what each costs.

It is also a service that is easy to sell badly, because the finding “this is a disaster, we should rebuild it” happens to be the most profitable conclusion available. Here is what a real one covers and how to read the output.

What gets looked at

Whether it runs anywhere but production. The first question, and often the most damning answer. If nobody can start the software on a laptop, nobody can safely change it, and everything else in the report is secondary to fixing that.

What it depends on, and whether those things are still supported. Every library, the language runtime, the database, the operating system. End-of-life components are the clearest, least arguable risk in any audit, because there is a date attached and no amount of opinion changes it.

Where the data goes and who can see it. How authentication works, whether passwords are stored properly, whether one customer’s records can be reached by another, whether anything sensitive is logged in the clear.

What happens when it breaks. Backups, whether they restore, whether anyone is alerted, and how long recovery takes. Frequently the largest real risk and the least discussed.

Whether tests exist, and whether they run. Not as a quality opinion. As a practical measure of how expensive the next change will be.

How a change reaches production. A documented deploy is a maintainable system. Files copied over FTP by one person is a single point of failure with a pulse.

What a good report looks like

Not a list of code smells. A useful audit report has:

  • Risks ranked by what happens if they are not fixed, in business terms. “Customer records are reachable without logging in” and “the code does not follow current conventions” should not appear in the same list.
  • A cost against each fix, in days.
  • Options, not a verdict. Keep as is, stabilise, partial rebuild, full replacement, each with a number.
  • An explicit “do nothing” line, with its consequences stated. Sometimes it is the right answer, and a report that cannot say so is a sales document.

If what comes back is a long list of style complaints and a recommendation to rewrite, you have learned about the auditor, not the software.

How to read “this is a mess”

Almost every developer says this about almost every codebase they did not write. It is close to a reflex. So separate the claims:

Actual risks. Unsupported software, exposed data, no backups, no way to deploy safely. These are facts with dates and consequences.

Maintenance costs. No tests, no documentation, tangled logic. Real, and they show up as every future change being slower and riskier than it should be. Worth money, not worth panic.

Preferences. Old framework, unfashionable language, formatting. Mostly irrelevant. A boring, unfashionable stack that a business has run on for a decade is not a problem to be solved.

The trap is a report that mixes all three so the total looks alarming enough to justify starting again.

The rewrite question

Rewrites fail more often than anyone expects, for one specific reason: the old system encodes years of behaviour nobody wrote down. Every strange condition in it is either a bug or a business rule, and from the outside they look identical. A rewrite reintroduces every one of those cases as a fresh discovery, usually after launch.

Rebuild when the platform is genuinely end-of-life, when you cannot hire anyone who will touch it, or when the thing it does has fundamentally changed. Not because it is ugly. The build or buy question applies here too, and “keep the thing that works” is a legitimate answer to both.

What it costs and how long it takes

For a small business system, an audit is days rather than weeks, and it should be a fixed price. You are buying a document and a conversation, not an open-ended investigation.

Insist on two things. The report is yours, in writing, whether or not you hire the auditor to do the work. And the auditor should be willing to say the software is fine, which is a question worth asking before you engage them.

When to get one

Before you buy a business that runs on custom software. Before you commit to a major feature on a system nobody understands. After your developer has disappeared. And when your instinct says something is wrong but you cannot articulate what.

Not when you simply want a second opinion on a quote. That is a shorter, cheaper conversation.

If you have inherited something and need an independent read before deciding, tell us what it does and roughly how old it is.

Related: taking over software nobody understands, cleaning up a neglected database, and our legacy rescue work.

Further reading

Sections covered in What a code audit actually tells you: What gets looked at, What a good report looks like, How to read "this is a mess", The rewrite question, What it costs and how long it takes, When to get one
The shape of the argument, in order.

Get new articles by email

One email when something new goes up, roughly twice a month. Plain writing on what software costs and what is worth building. No sequences, no sales calls, and one click to leave.

We use it for the newsletter and nothing else. Unsubscribe any time.

Have something you need built?

Tell us what the problem is. You will get an honest read on whether it is worth building, what it would take, and roughly what it would cost. No pitch deck, no pressure.

Replies within one business day. Mon to Fri, 9am to 5pm MT.

Call Start a project