Skip to content
Diosh Lequiron
Systems Thinking12 min read

How to Audit a System You Have Never Seen Before

When you enter an unfamiliar system, the instinct to immediately assess what's wrong is a trap. The first task is understanding what the system actually does and why it was built that way.

The assignment comes in different forms. You are brought in to evaluate an organization you have not worked with before. You inherit a codebase built by a team that is no longer there. A cooperative that has been managing its supply chain on paper and informal protocols asks you to help them transition to a platform. An institution invites you to assess a program that has been running for seven years without external review.

The surface framing is always "tell us what''s wrong and what needs to change." This framing is a trap, and walking into it produces bad audits. Not because the question is invalid, but because asking it first causes you to look for problems before you understand what the system is doing and why. Systems are optimized over time. The patterns that look like inefficiencies or failures often exist because they solved a real problem. Removing them without understanding what they were solving produces new problems — sometimes worse ones.

The first task when auditing an unfamiliar system is not to identify what is wrong. It is to understand what the system actually does, why it was built that way, and what it has been optimized for. That understanding creates the foundation for a useful assessment. Without it, you are cataloguing surface features and calling it analysis.


Phase 1: Observe Before You Assess

The instinct when entering an unfamiliar system is to map it quickly — produce a picture of the structure, identify the obvious problems, and begin forming recommendations. This instinct should be actively resisted for the first portion of any serious audit.

Observation before assessment means spending time watching the system operate before you evaluate it. In an organizational context, this means attending meetings without agenda-driven attention — watching what actually gets discussed, what gets avoided, who defers to whom, what causes friction and what moves smoothly. In a technical context, this means reading code without immediately flagging issues — tracing what the system actually does from inputs to outputs, following the data flow, noting where complexity lives before judging whether it should be there.

The reason this phase matters: every unfamiliar system looks inefficient before you understand the constraints it is operating under. Bureaucratic processes that look like overhead often exist because a previous version without those processes produced audit failures, compliance violations, or operational disasters. Code that looks overly complex often reflects a hard constraint — a third-party API behavior, a legacy data format, a performance requirement — that is not documented anywhere but is real. Workarounds that look like technical debt often represent genuine knowledge about where the system breaks that does not exist anywhere else.

During the observation phase, you are collecting two types of information. The first is behavioral data: what actually happens, step by step, in the real operation of the system. The second is anomaly data: where people work around the system rather than through it, where exceptions accumulate, where the formal process and the actual process diverge. Both are necessary for an accurate picture. Neither is available from documentation alone.

One practical constraint: the observation phase has to be bounded. For a system of moderate complexity, two to five days of structured observation is usually sufficient to surface the most important patterns. For very large systems, you need to identify the highest-leverage observation points and concentrate there rather than attempting comprehensive coverage.


Phase 2: Trace Actual Flow, Not Documented Flow

Documentation of organizational and technical systems is almost always incomplete, often outdated, and sometimes actively misleading — not through deliberate deception but because documentation is produced at a point in time and systems evolve continuously while documentation typically does not.

The audit method I use starts from the actual flow: trace a transaction, a request, or a process from entry to completion, following what actually happens at each step rather than what the documentation says should happen. This produces a map of the real system, which is the only map that is useful for diagnosis.

In organizational systems, this means following a decision from initiation to completion — who actually touches it, what approvals actually occur versus which are pro forma, where it waits and why, what the last five exceptions looked like and how they were handled. The exception handling is particularly informative. Exceptions reveal the system''s actual decision rules, as distinct from its documented rules. An organization that has developed a stable pattern for handling exceptions to its formal process has usually embedded real operational knowledge in that pattern — knowledge that will not survive if you simplify the system without capturing it.

In technical systems, this means reading actual request logs, tracing actual data through the actual codebase rather than through the architecture diagram, and following a real user session from first action to last. Legacy codebases particularly reward this approach. The parts of the code that look most problematic — the complex conditional branches, the unusual data transformations, the functions that do too many things — often exist at exactly the points where the domain is most complicated. The complexity is a signal, not just a bug.

The gap between documented flow and actual flow tells you something important: how much operational knowledge has accumulated outside the formal system. A large gap means the organization has substantial undocumented knowledge embedded in practice. This knowledge is valuable. A redesign that does not capture it will lose it.


Phase 3: Identify What the System Is Optimized For

Every system that has been operating for more than a few years is optimized for something. The optimization target is usually not what the system was originally designed to optimize for. It is what the system has been rewarded for over time.

Identifying the actual optimization target requires looking at what succeeds and what fails in the system''s current environment. What metrics does leadership actually use when evaluating the system''s performance? What behaviors are rewarded explicitly and which are rewarded implicitly through recognition, resources, or reduced friction? What does a good outcome look like to the people operating the system, and how does that compare to what the system was designed to produce?

In an agricultural cooperative''s supply chain, the stated optimization target might be "fair prices for all members." The actual optimization target, after years of operating under specific market conditions, might be "minimum transaction friction for the highest-volume members." These are not the same. A cooperative that has optimized for minimum friction for high-volume members will have built processes that work very well for those members and may work poorly for low-volume members who have less bargaining power and less operational sophistication. Redesigning the system without recognizing this will either replicate the same skew in a new form or create new friction for the high-volume members who are keeping the cooperative solvent.

In a technology system, the stated optimization target might be "data accuracy." The actual optimization target, after years of maintenance under resource pressure, might be "minimizing the time cost of the team that maintains the system." This produces a very different codebase than data accuracy would — one that is highly optimized for the maintenance team''s workflow and may have made significant compromises on data handling complexity along the way.

The question to ask at this phase is not "what should this system optimize for?" That comes later. The question is: "looking at the evidence of how this system actually behaves and what succeeds within it, what has it been optimized for?" The answer is often uncomfortable, because it reveals the gap between organizational intention and organizational reality. It is also essential for designing any intervention that will actually work.


Phase 4: Map the Constraints the System Was Designed Around

Systems are not designed in abstract conditions. They are designed around specific constraints: resource limitations, regulatory requirements, technology boundaries, political constraints, skill limitations of the people who will operate them, and the capabilities (or incapabilities) of the people they serve.

Many of the features of a system that look like poor design choices are actually adaptations to real constraints that existed at design time. Some of those constraints still exist. Some have been relaxed. Some have become more severe. The audit needs to determine which category each constraint falls into, because that determines whether the adaptation it produced is still necessary.

In agricultural systems I have worked with, a common pattern is process complexity that was designed around unreliable communications infrastructure. Rural cooperatives that built their workflows assuming intermittent connectivity — because that was the reality for most of their history — have complex synchronization protocols, paper-based backup systems, and delayed reconciliation processes that look redundant in environments where connectivity is reliable. But the constraint is often still real, even if it is less severe than it was. Removing the offline-capable design choices entirely, because connectivity has improved, produces a system that fails catastrophically during the periods when connectivity still breaks down — which happen less often but still happen.

In technical systems, constraints from the original architecture — database schema choices, API contracts with third parties, data format requirements imposed by integration partners — often persist long after the original context has changed, because the cost of changing them is high. The code that has accumulated around these constraints is not necessarily bad design. It may be the least costly way to work within a constraint that cannot be removed without a major coordinated effort. An audit that recommends removing the constraint without accounting for the migration cost is not useful; an audit that identifies the constraint, quantifies its ongoing cost, and compares that to the cost of removal gives the organization something actionable.

Mapping constraints requires asking: "Why was this built this way?" This sounds simple. In practice it requires persistence, because the people who know why often left years ago, and the current operators are maintaining patterns they learned without learning the reasons. Good audit practice includes explicitly surfacing "this exists because of a constraint and I do not know if that constraint still applies" as a distinct finding category — separate from "this is clearly wrong" and "this is working as intended."


Phase 5: Identify What Needs to Change — and What Should Not

Only after the four preceding phases does the assessment phase produce reliable output. At this point you have: a map of what the system actually does (Phase 1), a trace of the actual flow versus the documented flow (Phase 2), an understanding of what the system has been optimized for (Phase 3), and a map of the constraints it was designed around (Phase 4). Now the question of what needs to change is grounded rather than speculative.

The three categories of findings from this analysis:

Change immediately. Problems that impose ongoing cost, produce genuine failures, or reflect constraints that no longer exist and have no offsetting function. These are the relatively easy cases: clear diagnosis, manageable intervention scope, low risk of losing embedded knowledge.

Change carefully. Patterns that look problematic but have embedded functions that are not immediately obvious. Changing these without capturing the embedded function first will produce new problems. The right approach is to document what the pattern is solving before removing it, design the replacement to solve the same thing in a better way, and pilot the replacement in a bounded context before system-wide rollout.

Do not change. Patterns that look inefficient but are actually well-adapted to real constraints that still apply. Changing these will impose costs without benefits. These findings are some of the most valuable outputs of a thorough audit — because the pressure to "modernize" or "simplify" systems often focuses on exactly these patterns, and resisting that pressure when it is not warranted is a significant service.


The Most Common Mistakes New Operators Make

Three failure modes are recurring enough to be worth naming explicitly.

Moving too fast. The pressure to produce rapid assessments and actionable recommendations is real — it comes from clients, from organizational expectations, and from the natural impatience of people who are paid to improve things. Moving fast through an unfamiliar system means missing the knowledge embedded in the patterns. The cost of missing that knowledge materializes later, when the recommended changes produce unexpected problems. The first two to five days of an audit should be structured to resist this pressure.

Anchoring to the wrong comparison. "This system should work like [the system I know from my previous context]" is one of the most common cognitive errors in system auditing. Systems are built for specific contexts. The practices that are right for a venture-backed technology startup are not right for a rural agricultural cooperative. The database architecture that makes sense for a multi-tenant SaaS product does not necessarily make sense for a single-institution data store. Carrying the wrong reference system into an audit produces recommendations that are correct in the abstract and wrong for the specific context.

Recommending more than the system can absorb. A thorough audit will surface many things that could be improved. Recommending all of them simultaneously, or even listing them all as equally important, is not useful — it produces an overwhelming picture that often results in either paralysis or a reorganization that tries to change too many things at once and produces chaos. Good audit practice includes sequencing recommendations by impact and absorptive capacity: what can this organization actually implement, in what order, with what dependencies? The priority list is as important as the findings list.


Auditing Without Destroying Embedded Knowledge

The specific risk in any audit that leads to significant redesign is the loss of operational knowledge that is embedded in the existing system. This knowledge is often not documented, often not held consciously by the people who operate the system, and often invisible until it is gone — at which point the new system starts failing in ways that the old system, despite its many flaws, never failed.

The method for auditing without destroying embedded knowledge has three components. First, make the embedded knowledge explicit before you change anything. Interview the people who have operated the system longest, specifically asking them to walk you through the cases where they deviated from the documented process and what they did instead. Document those deviations systematically. They contain the knowledge.

Second, treat the existing system as evidence of real constraints even when you cannot fully reconstruct why. When a pattern persists across multiple operators over multiple years without anyone changing it, that persistence is informative. Someone tried to change it, or the pattern would have drifted. The fact that it did not drift is evidence that the constraint is real, even if the constraint is now implicit.

Third, design the transition to capture and transfer the embedded knowledge, not just to replace the old system with the new one. The riskiest moment in any system redesign is the period between when the old system is retired and when the new system has accumulated enough operational experience to handle the edge cases competently. That period can be shortened by deliberately migrating the embedded knowledge alongside the formal structure — but only if the audit captured that knowledge first.

A system you have never seen before is not a blank slate. It is an accumulation of adaptations to real conditions over real time, made by real people doing their best with what they had. Your job is to understand that accumulation before you decide what to change.

ShareTwitter / XLinkedIn

Explore more

← All Writing