Mobile App Audit: What's Really In Your Own App

A mobile app audit of your own app establishes what the shipped build actually contains, collects and sends, independent of documentation. It is not a security audit. It is not a compliance audit. It is not a third-party risk assessment. It is the owner's version of the same evidence work: knowing what is in the app you ship, when the people who built parts of it are no longer available to explain it.

This closes the Appnalysis /insights cluster. The eleven articles before it looked outward: at competitors, at agencies, at vendors and SDKs, at the wider software institutions arriving to hold the industry accountable. This one turns the observable-evidence lens inward. The app you own is a third party to itself, in ways most teams underestimate, and the shipped binary is the source of truth that survives every handover, every departure and every relationship breakdown.

Why teams often do not know their own app

The buyer situation for a mobile app audit is broader than the "we bought this and inherited it" case. Seven inheritance patterns show up repeatedly in practice, and most product owners recognise more than one of them.

Inheritance patternWhat happenedHandover realityWhere the evidence lives now
Agency friendly handoverAgency delivered, moved on to other workDocumented handover, some post-launch support, then silenceRepo, patchy docs, shipped binary
Agency relationship breakdownCommercial dispute, scope war, acquisition mid-project, or in-housing without noticeMinimum viable handover, sometimes actively obstructiveSometimes a repo of unknown completeness, always the shipped binary
Contractor-builtIndividual contractors delivered pieces of the appSource handover of variable quality, contractor may or may not be reachableRepo of uneven state, shipped binary
Historical teamOriginal engineers have left over timeInstitutional knowledge dispersed, documentation driftedRepo, outdated docs, shipped binary
Acquisition-inheritedCompany bought the product mid-lifeTransition period ended, key people may have exitedEverything in principle, comprehension of it in practice varies
Bus factorOne person understood a specific area, and they leftRepo intact, but the theory is goneRepo, and the shipped binary
LLM-generatedVibe-coded or heavily AI-assisted developmentCode shipped, no human owns the internals line by lineRepo, and the shipped binary

The common thread across all seven is not that documentation is bad, though it often is. It is that the shipped binary is the artefact that always remains. It is what users experience, what regulators can inspect, and what a serious audit can work from even when nothing else survives.

For the acquisition case specifically, Technical Due Diligence for Mobile Apps covers the pre-transaction assessment that sits alongside legal and financial due diligence. This article is the everyday-ownership version of the same evidence work, applied after the deal or without a deal being involved.

The 90/10 pattern, from hand-tuned assembly to LLM-generated prototypes

Software has always had a specialist minority. Most application code is written at whatever the productive abstraction of the day happens to be, and a small percentage is hand-crafted for reasons the abstraction cannot address.

In the 1990s and early 2000s, high-level languages (C, C++, Java) covered the 90% of general application code. The 10% that did not was hand-tuned assembly: graphics inner loops, DSP routines, game engine primitives, embedded firmware timing paths, and CPU-specific instructions (MMX, SSE, AltiVec) the compiler could not yet emit. Further back, FORTRAN with assembly hot loops served the same shape for scientific computing.

The pattern continues in modern form. SIMD intrinsics in performance libraries. Hand-tuned CUDA kernels. Cryptographic primitives written and reviewed at instruction level for constant-time guarantees. Safety-critical automotive and medical code. Mobile has its own version, covered below in the FAQ.

Vibe-coded and heavily AI-assisted development is the same shape at a new abstraction layer. Most application code becomes LLM-generated. The 10% that does not, where correctness, performance, safety, licensing, cryptographic strength or a specific hardware paradigm matters, remains hand-crafted or heavily reviewed by someone who can read what the LLM produced at that level of scrutiny. The abstraction shifts. The specialist minority does not disappear.

What does change is the ownership of understanding. Peter Naur's 1985 paper "Programming as Theory Building" argued that a program is not just its source code. It is the theory in the developer's head about how the code works and why it is shaped the way it is. When the developer leaves, the theory dies. The code still runs. The ability to change it safely goes with the person.

Vibe-coded code makes the same point more starkly. If no human wrote it line by line, no human holds the theory of it either, even at the moment it ships. The shipped binary is what remains, more clearly than ever. For the fuller pattern of why this changes what agencies and teams need to check, The Vibe-Coded App: Here's What You Actually Shipped covers the vibe-coded angle directly.

When knowledge concentrates in one person

The bus factor is the software engineering shorthand for the risk that concentrates when one person is the only one who understands a given piece of the system. A bus factor of one means the loss of one person breaks the team's ability to work on that area.

One compliance manager at an insurance company described a piece of software where only one person in the organisation understood what it did. When that person left, the software continued to run. It continued to be relied on. But every subsequent question about what it did, whether it was still compliant, whether it could be safely changed, had no confident answer.

Michael Feathers' 2004 book Working Effectively with Legacy Code offered a working definition that has held up: legacy code is code without tests. It is not about age. It is about the tools you have to understand and safely change what you have now. By that definition, a lot of code becomes legacy the moment its author leaves, whether it was written last decade or last month.

A mobile app audit of your own app is the direct counter to this specific failure mode. It does not restore the departed person's theory of the code. It does establish what the code actually does when it runs, which is often the answer the compliance manager, the QA team or the next engineer really needs.

two-column comparison of what a mobile app audit can establish from the shipped build alone versus what still requires source code or original team knowledge
two-column comparison of what a mobile app audit can establish from the shipped build alone versus what still requires source code or original team knowledge

What a mobile app audit can and cannot tell you from the shipped build

Honest limits matter here. Observable evidence from the shipped app answers many questions. It does not answer all of them.

Assessment areaFrom the shipped build aloneStill needs source or original team
SDK and library inventoryYes, extracted from the app bundleNot required
Runtime data collectionYes, captured on a real deviceNot required
Network endpoints and geographiesYes, from network traffic captureNot required
Permissions used and when triggeredYes, from runtime observationNot required
Tracking and identifier behaviourYes, from runtime observationNot required
Cryptographic implementation on the wireYes, from network captureDeeper crypto review needs source
Licence compliance surfaceLargely yes, from component fingerprintingFull audit of contamination needs source
Intent behind bespoke business logicNoYes, source and preferably the author
Architectural rationaleNoYes, source and preferably the author
Historical decisions and trade-offsNoYes, original team knowledge
Developer's theory of the systemNoYes, per Naur (1985)

The practical implication is that a mobile app audit produces an evidence base that closes most of the "what is happening in this app" questions without needing source access. Where source access is available, it accelerates the audit. Where it is not, the audit still produces a defensible answer to the majority of questions a product owner, compliance manager or incoming engineering team actually asks. This is a distinct category from a code audit or a source code audit, which start from the repo.

A five-step mobile app audit process

The process runs the same way whether the app is agency-built, contractor-built, historical, acquired, LLM-generated, or a mix of all five.

  1. Inventory the shipped binary. Extract the SDK and library inventory from the app bundle. Identify third-party components, their versions, and the fourth-party dependencies they pull in. This is often the first surprise.
  2. Map runtime behaviour. Capture what the app collects, which network endpoints it contacts, which permissions it requests and when, and how it uses device identifiers. This is the observable-evidence layer applied to your own product.
  3. Compare against your public claims. Your privacy policy, your store listing, your marketing, your compliance attestations. Where the shipped behaviour matches, the claims are defensible. Where it does not, the gap is the finding, and it is better that you find it than a regulator or a journalist does.
  4. Check platform and sector compliance. Apple's App Store review requirements, Google Play's Data Safety declarations, and whatever sector rules apply (GDPR, HIPAA, PCI, FCA operational resilience, DTAC, KCSIE). Verify the actual behaviour against the actual rules.
  5. Establish a baseline for change tracking. The audit is more valuable as a starting point than as a one-off exercise. Once you have a baseline, every subsequent release can be compared against it, and the "what changed?" question becomes answerable.

For the underlying evidence layer this process runs on, What Is Product Intelligence for Mobile Apps covers the wider observable-evidence work this audit is one application of.

Handover to QA and compliance: black box or full disclosure?

A related question, often unasked until an audit forces it: should the QA team and the compliance team know exactly what is inside the build, or should they treat it as a black box?

Both positions have valid defence. Black-box QA is often better than full-disclosure QA because it tests what the user actually experiences, not what the developer intended. If the user sees the wrong screen, it does not help that the code intended the right one. Black-box compliance is often required because the compliance duty attaches to the shipped artefact, not to the intent behind it. A regulator inspecting the app sees what it does, not what the team meant it to do.

Full disclosure matters more in specific cases: safety-critical software where sign-off requires known provenance, regulated sectors where the compliance regime demands documented lineage, and situations where the QA or compliance team needs to design tests that a black-box view cannot generate.

The practical answer for most product teams is not either-or. The QA team benefits from a black-box test discipline supported by an evidence baseline they can trust. The compliance team benefits from a shipped-behaviour evidence base that they can defend to a regulator, alongside a documented account of intent from the developers. A mobile app audit produces the evidence artefact that makes both handovers work without requiring either team to reverse-engineer the code themselves.

Tech debt, legal debt, and the refactor-or-remediate decision

An audit of your own app almost always surfaces two categories of finding: tech debt and legal debt. Tech debt (or, spelled out, technical debt) is Ward Cunningham's 1992 metaphor for the interest paid on shortcuts taken in code. Legal debt is the less-established sibling, and often the more urgent finding: what accumulates when the shipped app drifts away from the legal, contractual and regulatory position the organisation thinks it holds. Both accumulate quietly, and most inheritance patterns produce both. A software audit, in the sense that legal and licensing teams use the term, covers a specific slice of this: which open-source and commercial components are present and under which licences. A mobile app audit is broader and includes the same evidence.

The observable-evidence layer is well suited to finding legal debt in particular, because legal debt is about what the app actually does versus what the paperwork says it does. That is the gap a shipped-binary audit is designed to close. For the operational side of remediating compliance drift once the audit surfaces it, Compliance Automation Software for Mobile Apps covers the continuous-compliance layer.

Findings from either category feed into a three-way decision. An audit is enough when the shipped code works, meets its requirements, and the primary problem is that no one on the current team confidently understands it. Targeted remediation is enough when the audit surfaces specific items that can be fixed in place. Legacy application modernization, in the sense of a full rebuild or re-platforming, is genuinely required when the code has architectural problems that block business needs, when the tech stack is at end-of-life, or when accumulated debt of either category can only be addressed structurally. Before any legacy application modernization, a mobile app audit establishes what you actually have to work with. An application modernization assessment often starts with the audit and then decides which of these three responses fits each finding.

For the deeper security-focused version of this work, a source code audit remains the right instrument. It sits alongside the shipped-binary audit rather than replacing it. The audit-of-shipped-behaviour is often the cheaper and faster first step, and sometimes it is the answer on its own. Legal debt as its own subject warrants deeper treatment than a section here can give it, and is worth a dedicated future piece.

version-over-version behaviour delta diagram for a mobile app audit, showing how baseline evidence enables what-changed questions across subsequent releases
version-over-version behaviour delta diagram for a mobile app audit, showing how baseline evidence enables what-changed questions across subsequent releases

Where audit-of-your-own-app fits with the other audits

For the avoidance of confusion, an audit-of-your-own-app is a distinct exercise from several other things called audits in mobile software.

It is not a security audit. Security audits (OWASP MASVS, penetration testing, threat modelling) test whether the app can withstand attack. A mobile app audit of your own app establishes what it does. The two are complementary.

It is not a compliance audit. Compliance audits verify against a specific regulatory framework. Compliance Automation Software for Mobile Apps covers the continuous-compliance work that runs on the evidence a shipped-behaviour audit produces.

It is not a third-party risk assessment. That looks at the vendors and SDKs inside your app as external risks. Third-Party Risk Management for Mobile Apps covers the outward-facing version of the work this article's process is the inward-facing counterpart to.

It is not technical due diligence. That is a pre-transaction exercise for acquisitions. Technical Due Diligence for Mobile Apps covers the deal-time version of similar work.

The audit-of-your-own-app is the everyday ownership version, applied to your live product on your normal release cadence, without a specific external trigger.

How Appnalysis fits

Appnalysis produces the observable-evidence layer that a mobile app audit of your own app needs. The SDK inventory, the runtime behaviour, the network and permission profile, the cryptographic surface, and the version-over-version delta across releases.

For an in-house product team, this is the evidence base that answers the questions the departed engineers, the completed agency contract, the acquired product line and the vibe-coded prototype leave unanswered. For an agency inheriting a client's app to work on, or a new engineering team taking over from a previous one, it is the starting point that replaces guesswork. For a compliance or QA team, it is the artefact that makes their handover workable without requiring them to reverse-engineer the code.

What it does not replace is the engineering team's judgment about what to change, the architectural work of deciding whether to refactor, or the specialist review of the 10% of hand-crafted code where the intent still matters as much as the observable behaviour. The evidence layer supports those decisions. The decisions still belong to the people making them.

The /product and /agencies pages cover how the platform is used by in-house teams and by agencies respectively.

Closing

The shipped binary is the source of truth. It survives every handover, every departure, every relationship breakdown and every abstraction shift from hand-written to LLM-generated. Knowing what is in the app you own is not an extra step. It is the ownership itself.

Every article in this cluster comes back to the same observable-evidence thesis. The competitor analysis version, the compliance version, the vendor risk version, the agency pitch version, the institutional version, the product intelligence version. This final piece applies the same thesis to the case that is often invisible until it is urgent: the app you own that you do not fully understand, and the audit that lets you understand it without waiting for the crisis to force the question.

Frequently Asked Questions

Further reading

External references

  • Peter Naur, "Programming as Theory Building" (1985). The classic paper on why software is more than source code.
  • Michael Feathers, Working Effectively with Legacy Code (2004). The working definition of legacy code as code without tests, and the toolset for handling it.
  • Bus factor. The general software engineering concept for concentration-of-knowledge risk.
  • Ward Cunningham on technical debt (1992). The original OOPSLA experience report where the debt metaphor was introduced.
  • OWASP Mobile Application Security Verification Standard (MASVS). The reference for the security audit that sits alongside the audit-of-your-own-app.

From the Appnalysis /insights cluster

  • What Is Mobile App Intelligence?. The definitional piece for the observable-evidence layer this audit runs on.
  • What Is Product Intelligence for Mobile Apps. The wider product-intelligence frame the audit fits inside.
  • Technical Due Diligence for Mobile Apps. The pre-transaction version of similar evidence work.
  • Compliance Automation Software for Mobile Apps. The operational layer for remediating what an audit surfaces.
  • Third-Party Risk Management for Mobile Apps. The outward-facing counterpart, applied to vendors and SDKs.
  • The Vibe-Coded App: Here's What You Actually Shipped. The LLM-generated code pattern named in section 2.
  • Your AI Coding Agent Only Sees Half the Picture. Why specialist knowledge does not survive in LLM training data alone.
  • Software Is Growing Up. Now the Institutions Are Arriving.. The institutional context around observable-evidence work.