/

/

How to Audit Code You Cannot Read: A Founder’s Checklist

How to Audit Code You Cannot Read: A Founder’s Checklist

You cannot read the code, so audit the artifacts it produces. Start with a clean checkout on a machine the author never touched.

M. Sabir Junaid

Founder • CEO

8min read

Published: October 16, 2026 Updated: October 24, 2026
Code audit concept showing disorganized source code being reviewed and turned into a clear founder-friendly checklist
On this page

Key Takeaways

Six artifacts a non-technical founder can verify without reading a line of code, and how to read a security report without panicking.

  • You cannot judge code quality without an engineer. You can judge whether the code produces the evidence a healthy project produces.
  • The clean checkout test outranks every opinion. If a stranger cannot run it from the written instructions, nothing else is measurable yet.
  • OWASP’s 2025 list put Software Supply Chain Failures at A03, which means your inherited dependencies are now a named top-three risk.
  • A scanner’s severity count is not a priority list. Severity describes the vulnerability. Exposure describes your product.
  • GitHub states plainly that Dependabot “doesn’t scan archived repositories,” so an abandoned repo reports zero problems by design.

The fastest useful code audit a non-technical founder can run takes about forty minutes and involves no code. You ask for six artifacts, and you note which ones do not exist.

That is not a trick. A project that was built carefully leaves evidence behind: a readable setup document, a test suite, a dependency report, a license list, a deploy anyone can run, and a record of decisions. Missing evidence is itself a finding, and it is a finding you are qualified to make.

Here is the honest frame. You cannot assess whether the code is well written. You can assess whether it is verifiable, whether anyone other than the author can run it, and whether the known risks in it have been looked at. Those three answers decide most of what you need to decide.

Accept what you cannot check, then audit what you can

Separate the two lists before you start. Confusing them is why founders either overpay for an audit or skip one entirely.

Quick Verdict: Do not try to judge the code. Judge the evidence around it, starting with whether a stranger can build and run the project from its own written instructions. Velcod does this as part of web application development, and once you have the findings, deciding whether to harden it or rebuild it is the next question.

Call it THE OUTSIDE AUDIT. You are not reading the code. You are reading what the code produces, and that output is objective in a way an opinion about architecture never is.

You can check this yourselfThis needs an engineer
Does it build from a clean checkoutIs the architecture appropriate
Do tests exist, and do they passAre the tests meaningful
Is there a dependency vulnerability reportIs a given finding reachable in your code
Are the licenses listed and compatibleIs the data model correct
Can someone other than the author deploy itIs the code readable to a new hire
Are decisions written down anywhereWill this scale to your next tier
n opaque grey CODE block connects through six orange evidence arrows to a setup doc, test run, dependency report, license list, deploy log, and decision record. Caption: “you read the outputs, not the box”

The left column is not a consolation prize. Every item on it is a yes or no answer, every one of them is cheap to get, and a project failing three of them is in trouble regardless of how elegant the code turns out to be.

Do this: Copy the left column into a document and leave the right column for whoever you hire. You now have an audit scope.

Run the clean checkout test before anything else

One test, about an hour of someone’s time, and it reorders everything that follows.

Hand the repository and its setup document to a competent developer who has never seen the project. Ask them to get it running on their own machine using only what is written down. Do not let them ask the original author a single question.

Synthetic terminal transcript showing repository setup failing because DATABASE_URL is missing, with the error highlighted in dark red.

The result is one of three things. It runs, which is a strong signal. It runs after a few undocumented steps, which is normal and tells you the setup document needs an hour of work. Or it does not run at all, which means nobody can verify anything about this project yet, including the person who wrote it.

That third outcome is more common than founders expect. It usually means the project only ever ran on one machine, which also means nobody has tested the instructions a future hire will depend on.

Do this: Pay a developer for two hours to attempt a cold setup and write down every step that was not in the document. That list is your first deliverable from the next team.

Ask for the six artifacts by name

Specific requests get specific answers. Asking “is the code good” gets you reassurance.

Send the list below as a written request and give a deadline. A team in good shape produces most of it the same day, because these are files that already exist rather than documents someone has to write.

ArtifactWhat its absence tells youHow you read it
Setup documentNobody has onboarded anyoneTry the clean checkout test
Test run outputChanges cannot be made safelyLook for a pass count above zero
Dependency vulnerability reportNobody has looked at known risksCount the critical and high entries
License listLegal exposure was never checkedScan for copyleft licenses
Deploy recordReleases depend on one personCheck who ran the last five
Decision recordThe reasoning is goneAny dated file beats none
Repository README showing Node.js and pnpm prerequisites, package installation commands, and the command to start the development server.

The two most informative requests are the deploy record and the decision record. If the last five deployments were all run by the same person, you have a key-person risk whatever the code looks like. If no decisions were ever written down, every architectural argument you have in the next year will start from zero. The same pattern shows up in inherited internal systems such as a custom ERP, where undocumented choices outlive the people who made them.

Do this: Send the six requests in one email with a date on it. Note what arrives, what is promised, and what nobody mentions.

Read the dependency report without panicking

A long vulnerability list is normal. A long list nobody has triaged is the actual finding.

Dependency scanners report known weaknesses in the packages your product depends on. GitHub’s documentation describes Dependabot alerts as a feature that helps you “find and fix vulnerable dependencies before they become security risks,” and says each alert includes “A link to the affected file,” “Details about the vulnerability and its severity,” and “Information about a fixed version (when available).”

Illustrative Dependabot dashboard showing 12 open alerts: 2 Critical, 4 High, 4 Moderate and 2 Low, labelled as synthetic data.

Two cautions change how you read the number. GitHub states that “Dependabot doesn’t scan archived repositories,” so an abandoned project reports a clean slate by design rather than by merit. GitHub also says plainly that “Alerts can’t catch every security issue,” which means a short list is not a certificate.

Call it THE SEVERITY TRAP. Severity is a property of the vulnerability in general. Exposure is a property of your product in particular, and only the second one tells you what to fix this week.

FindingWhy severity alone misleads
Critical in a build-time toolNever runs in production
Medium in your login pathSits on the route attackers try first
High in an unused code pathReal, but not reachable from your app
Low in a library handling paymentsYour blast radius is money

Context decides the order, and regulated data changes it again. A medium finding in a product handling patient records is not a medium problem, which is why building a HIPAA compliant web application starts from a different baseline than a general consumer app.

Do this: Ask for the report plus one sentence per critical and high finding saying whether it is reachable from your running product. The sentences are the audit.

Check the licenses before you check the architecture

License problems are the cheapest serious risk to find and the most expensive to discover late.

Your product almost certainly includes open source packages, and some open source licenses carry obligations that conflict with selling closed software. Copyleft licenses are the ones to look for, because they can require you to offer your own source code to anyone you distribute to. Network-facing variants extend that to users who merely interact with your service over a network.

The artifact you want here is a software bill of materials. NTIA’s report on the minimum elements of an SBOM, published 12 July 2021, sets out three categories: “Data Fields,” “Automation Support,” and “Practices and Processes,” describing them respectively as “Documenting baseline information about each component that should be tracked,” “Allowing for scaling across the software ecosystem through automatic generation and machine-readability,” and “Defining the operations of SBOM requests, generation and use.”

In plain terms, ask for a machine-generated list of every component and its license. Then have a lawyer look at anything copyleft before you raise money or sign an enterprise contract, because both processes will ask.

Synthetic terminal report listing dependency versions and licenses, with the GPL-3.0-only license highlighted in pale orange.

Do this: Request a generated component and license list, not a hand-written one. A hand-written list is a claim. A generated one is evidence.

Separate a choice from a defect

This is where founders get the most bad advice, usually from the next developer in the chair.

A new engineer looking at inherited code will find things they would have done differently. That is not the same as finding something wrong. The test is whether the thing causes a problem you can name: a bug, a security exposure, a cost, or a change that is impossible to make safely.

OWASP’s current list is a useful boundary for this conversation. The OWASP Top 10:2025 names A01:2025 Broken Access Control, A02:2025 Security Misconfiguration, and A03:2025 Software Supply Chain Failures as its top three categories, with Injection at A05 and Insecure Design at A06. Those are defects in anyone’s language.

So is anything on the 2025 CWE Top 25, whose page was last updated 15 December 2025 and which ranks CWE-79 cross-site scripting first, CWE-89 SQL injection second, CWE-352 cross-site request forgery third, and CWE-862 missing authorization fourth. A framework choice you dislike is not on either list.

The distinction gets harder with machine-written code, which now makes up a meaningful share of what gets handed over. Code generated quickly can be correct and still carry no reasoning behind it, which is a documentation problem rather than a defect, and it is worth asking about directly on any recent AI app development project.

Flowchart classifying a report finding as a defect if it causes a bug, exposure, cost or unsafe change; otherwise, as a preference.

Do this: For every criticism in your audit report, ask which named problem it causes. Findings that survive that question are the report.

Hire the auditor, then grade the report

An audit is only as useful as the report, and reports vary more than the audits behind them.

Expect a written document with findings ranked by what they would cost you, each one naming the file or component, the risk in plain English, and an estimate to fix. Expect an explicit statement of what was not examined. A report with no stated limits is marketing.

NIST’s Secure Software Development Framework, defined in SP 800-218, describes a set of “fundamental, sound, and secure software development practices” intended to help producers “reduce the number of vulnerabilities in released software.” A good auditor can tell you which of those practices your project does and does not follow, in your language rather than theirs.

Price it before you commission it. A focused audit on a small codebase is days of work, not weeks, and an auditor who cannot scope it after seeing the repository is telling you something. Our case studies include the findings we started from, because the report is the part that gets reused.

Five-point checklist for grading a code audit report, with an orange checkbox highlighting whether it states what was not examined.

Do this: Ask for a sample redacted report before you hire. If none exists, ask what the deliverable will contain, in writing.

What this will not tell you

The outside audit is a filter, not a verdict. It catches the problems that leave traces.

It does not tell you whether the code is maintainable. That needs a developer to read it and form a judgment, and judgments vary between competent people. The six artifacts tell you whether such a judgment is even possible yet.

It also does not prove the product is secure. GitHub says it directly about its own tooling: “Alerts can’t catch every security issue.” A clean dependency report means the known problems in known packages were checked, which is a narrower claim than safety.

And it will not tell you the cost to finish. That needs scope, and scope needs a decision about what you are building next, which no audit can make for you. Anyone quoting a build price off an audit report alone is guessing.

The forty-minute version

Six questions, in this order. None of them requires you to read code.

  • Can a developer who has never seen this project run it from the written instructions?
  • Do tests exist, and what does a test run actually print?
  • Is there a dependency vulnerability report, and has anyone triaged it?
  • Is there a generated list of components and their licenses?
  • Who ran the last five deployments, and could anyone else?
  • Is there a single dated document explaining why anything was built the way it was?

Ask all six in writing. The pattern of what arrives, what gets promised, and what nobody mentions is most of your answer, and this is the same list we start from before any web app build we inherit.

Where we fit

We audit inherited codebases and we also build, which means we are the wrong people to ask whether a rebuild is necessary without a second opinion.

What we can do honestly is the outside audit, delivered as a written report with findings ranked by cost, each one naming the component and the named problem it causes, plus an explicit list of what we did not examine. You keep the report whether or not we do the work that follows.

This is not always worth buying. If the build is small and the original developer is available and cooperative, a conversation and a clean checkout test will tell you most of it for free. If you are mid-acquisition, you want an independent auditor with no interest in the build contract.

If you want the six artifacts chased down and graded this week, book a call with us and send whatever repository access you have.

Frequently Asked Questions

How much does a code audit cost?

Scope drives it more than codebase size. A focused outside audit covering build verification, dependencies, licenses and deploy risk is usually days of work rather than weeks. A full architectural and line-level review is a different purchase. Ask any auditor to quote the two separately so you can buy the cheaper one first.

Can I audit code without a technical background?

You can audit the evidence, not the code. Six artifacts tell you whether the project is verifiable: a setup document, a test run, a dependency report, a license list, a deploy record and a decision record. Missing artifacts are findings you are qualified to make. Judging code quality still needs an engineer.

What is the difference between a code audit and technical due diligence?

A code audit examines the software itself. Technical due diligence is broader and usually runs during an investment or acquisition, covering the team, the processes, the infrastructure and the roadmap alongside the code. The checklist here is the software half, and it is the half that most reports treat too briefly.

Should I use an automated tool instead of hiring someone?

Use both, in that order. Automated scanners produce the dependency report and the license list cheaply and well, and you should ask for their raw output. What they cannot do is tell you whether a finding is reachable in your product, which is the judgment you are paying a person for.

How do I know if the audit report is any good?

It names files or components, ranks findings by what they would cost you, and states what was not examined. It separates defects from preferences. If every finding is a framework the auditor would have chosen differently, you bought an opinion. Ask for a redacted sample before you commission the work.

Resources

M. Sabir Junaid

Founder • CEO

M. Sabir Junaid is founder and CEO of Velcod, the senior product studio. He leads product and delivery across MVPs, SaaS platforms, and mobile apps — system architecture, no-code and low-code engineering, and AI integration. An official Bubble partner, Sabir has shipped products across fintech, marketplaces, edtech, and creator platforms. He works with founders raising pre-seed to Series A who need a product built to launch and scale in weeks, not a six-month agency build.

Share

Ready to build?

Your idea, live in 3 weeks.

Book a free strategy call and get a fixed-price roadmap for your MVP, SaaS, or app.

Book a Free Call →

Related articles.

Software maintenance after launch concept showing a live server, unanswered support phone, alert light, and repair tools
M. Sabir Junaid

The Build Finished and Nobody Is On Call: Software Maintenance After Launch

Launch moves work from the build contract to nobody. Name an on-call owner, then split the work into four queues.

October 19, 2026

Read More
Two laptops connected by an orange arrow, showing a stalled software project moving from error alerts to an organized recovery checklist.
M. Sabir Junaid

Your Developer Stopped Replying. Here Is the Recovery Order.

Recover account control first, code second, assessment third. Legal almost never. The accounts hold the clocks, and some clocks cannot be restarted.

October 8, 2026

Read More
Fractional CTO vs agency concept showing solo technical leadership compared with a collaborative development team for non-technical founders
M. Sabir Junaid

Fractional CTO vs an Agency That Explains Itself: What a Non-Technical Founder Actually Needs

A fractional CTO is paid to decide. An agency is paid to build. Non-technical founders need the deciding first, in writing.

October 7, 2026

Read More
💬

Still reading? Let's build your product.

Book a free strategy call — fixed-price roadmap, shipped in 3 weeks.

Real client results

What you can expect to gain

Outcomes founders see after shipping with Velcod.

+370%

Increase in qualified leads

3 wks

Average time to launch

2×

Faster iteration cycles

+92%

Client satisfaction rate

Start the conversation
Replies in ~1 business day

Tell us what you're building

What an MVP really costs, and the exact scope to launch — in weeks, not months.

Real cost ranges by type
No-code vs custom
The 3-week build checklist

Straight to your inbox. No call. No pitch.