Contents
Share this article
Key Takeaways
An audit trail proves who changed what, when, and under whose approval. In most cases, outsourcing breaks it at attribution.
When the engineer works for another company, their identity, their authorisation record, and their offboarding evidence all live in a system you don't own, and your auditor still holds you accountable.
Unfortunately, hiring in-house for every position is not feasible for all firms, especially in industries like fintech where talent is more scarce and costly.
Let’s take a look at how to maintain an audit trail with outsourced engineering teams, so you can take advantage of the many benefits of alternative hiring models without creating issues with regulators later.
If you are interested in putting together an outsourced or augmented team with production fintech experience who is already familiar with best practices for auditability, book a call.
The auditor pulls the full population of changes from the observation period and picks a sample, commonly somewhere between twenty-five and forty for a SOC 2 Type 2. The sample is sometimes fewer for a smaller population, more if the control runs daily and the risk is high.
For each sampled change, they ask you to produce the chain. No context, just the artefacts in sequence. If producing any single link requires a phone call to someone who no longer works on the account, that's the exception they write up.
Here's that chain they will usually be looking for:
We can call this the golden thread, since it's the artefact that most frameworks in the fintech space actually want.
SOC 2 Type 2 wants consistency across the full observation period. PCI DSS wants it for anything touching cardholder data. DORA wants ICT change and third-party oversight evidence.
A sponsor bank's diligence team wants it before they'll extend the program, while an enterprise customer's security questionnaire will need it from you before they'll sign.
The framework changes, but you are always being asked to prove that a specific, authorised human made a specific, reviewed change, and that you can still prove it a year later.
Access provisioning and revocation, who could get in and when their access ended, is also important, but think of that as a separate control set. Usually, the auditor will ask for both, but make sure that you clarify what they actually need.
There are seven different places we have noticed the audit trail chain break when companies utilize outsourcing without being prepared.
Here's each one in full.
This could be something like a commit attributed to a generic contractor-01@vendor.com, or three engineers working behind one shared VPN certificate.
The thread terminates at an account, and there's no way to work backward from "contractor-01" to a specific individual six months later, even if you wanted to.
Often, we see this happening with outsourced teams specifically because vendors optimize for fast onboarding and account reuse across engagements.
This makes operational sense. Standing up one shared login for a rotating bench of engineers is genuinely easier than provisioning and deprovisioning individual accounts for every person who touches a project.
The fix is quite simple. Every credential is attached to one named human, one identity, no exceptions, no matter how short the engagement or how junior the role.
Git tracks an author and a committer, but neither is necessarily the person who approved the merge.
Rebases, squashes, cherry-picks, and CI bots all rewrite attribution along the way. A single squash-merge can collapse four engineers' work into one name in the history, and a rebase performed by a release manager can silently replace the original committer field entirely.
Outsourced engineers more often work through forks, mirrors, or a proxy repository, which adds another rewrite step, and they're statistically more likely to have moved on by the time someone needs to reconstruct what happened, so there's nobody left to ask about who wrote what.
To fix this, you need to use signed commits, enforced branch protection, and merge records kept separately from the git history itself. Treat the pull request record as the actual evidentiary artefact, since the PR captures the reviewer and the approval.
In this instance, the engineer authenticates through the vendor's own identity provider. Their joiner/mover/leaver record, background check, and training completion all sit in a system you can't export from, and you may not even have visibility into which specific records exist.
Realistically, no vendor is going to hand over their own internal HRIS as a courtesy.
You need to federate the engineer into your identity provider, or require the vendor to deliver identity attestations on a defined cadence in a format you can actually retain. We recommend at least quarterly exports.
If you need to keep requesting and waiting for evidence, you are creating a massive dependency.
In some cases, companies have realized that the engineer a previous vendor assigned turned out to be employed by someone else entirely, perhaps a sub-vendor the original firm brought in to cover a capacity gap.
In these cases, the attribution chain has a link nobody has ever audited or even known to ask about.
Usually this isn’t malicious; capacity gaps just get filled through partner networks, sometimes without notification, because of scheduling.
The fix is a contractual bar on subcontracting without written consent, plus periodic verification that the named individuals actually match the invoiced ones, not just at signing but at intervals throughout the engagement.
Make sure to ask this question directly during vendor selection.
Your auditor wants the full twelve-month observation window. You may run into issues if the vendor's platform only retains ninety days.
Since there's no way to retroactively generate a log that was never written, you need to know about this ahead of time, or you could run into serious issues.
Vendor retention windows get set by the vendor's own economics. Storage costs money, and a shorter window is cheaper to run, not your audit calendar, so there's no reason to expect them to line up by default unless someone specifically negotiates it.
To fix this, make sure that you are shipping logs to storage you control, in near-real time, and verifying retention windows during procurement.
This is, in our experience, the single most common preventable failure on this whole list, and it's also the cheapest one to fix in advance.
The engagement may end, but auditors can still sample a change from that period.
Again, you will run into issues if records live in a system belonging to a company you no longer pay, that has no particular incentive to keep paying for storage on your behalf once the invoices stop.
You need an explicit evidence-return and retention clause, specifying format, scope, and window, combined with continuous export rather than relying on an exit process.
Some people can show that production data was accessed, but not from where, which matters directly for data residency and cross-border transfer questions.
By definition, the outsourced engineer is somewhere else, often somewhere with a different legal posture on data than your own jurisdiction.
You need to be logging source jurisdiction alongside identity for any production data access, and aligning that with your existing data protection documentation.
A useful test is to pick a change your outsourced team shipped four months ago. Try to produce the following without contacting the vendor. If you can't, a gap exists.
| Artefact | Must show | Common gap with outsourced teams |
| Work item/ticket | The change was authorised before it started | Vendor worked from a Slack message |
| Branch and PR | The code change itself, linked to the ticket | Link exists in the vendor's tracker, not yours |
| Reviewer identity | A named human who wasn't the author | Reviewed by a teammate at the same vendor with no separation |
| Approval record | Who approved the merge, and when | Approval implicit in the merge, not recorded separately |
| Test/staging evidence | It was validated before production | Vendor's CI, vendor's retention |
| Deploy record | What went out, when, by what mechanism | Deploy triggered under a service account |
| Identity attestation | The human was authorised on that date | Lives in the vendor's HR system |
| Rollback record (if applicable) | What happened when it failed | Handled verbally during an incident |
Two points here matter more than the rest of the table.
If the author and the reviewer both work for your vendor, some auditors will treat the separation-of-duties evidence as weak. A workable pattern here is requiring one internal reviewer on changes above a defined risk threshold.
Approval should also be seen as a distinct artefact. A merge is not an approval. If the only record that a change was approved is that it got merged, that's a circular record, the same event serving as both the action and its own authorisation.
In our experience, the audit trail that actually gets maintained is one that nobody has to remember to maintain.
If producing evidence requires someone to recall something, it will fail during the one month the auditor happens to sample.
Five design rules worth building in from the start:
All of this adds friction to onboarding an external engineer, but trading a couple of days of setup for a year of defensible records is a good trade.
Five clauses that are specifically about evidence are essential to include in your contract:
These sit alongside the standard commercial and IP terms, which are a separate matter entirely. This governs who can prove who did it. Both chains have to hold, and they fail in different ways, so don't assume solving one solves the other.
At Trio, we specialize in fintech engagements, whether it’s staff augmentation, outsourcing, or dedicated teams.
We are well aware of the challenges our past clients have encountered and can assist them with the best way forward to ensure they are prepared for all future audits.
Your contract should cover named individuals with notice on substitution, no subcontracting without written consent, audit cooperation within a defined response window, evidence retention and return surviving termination, and background check and training attestations delivered on a set cadence.
Technically, a vendor engineer can review another vendor engineer’s code, but some auditors treat separation-of-duties evidence as weak when the author and the reviewer both work for the same third party. Resolve your own auditor’s position on this early. A workable pattern is requiring one internal reviewer on changes above a defined risk threshold.
At minimum, you should retain audit evidence for any outsourced work for longer than your longest observation window, typically twelve months for a SOC 2 Type 2, and often longer for other obligations. The common failure is a vendor platform retaining ninety days while the auditor samples from month eleven.
If outsourced developers support the in-scope system, the processes around them need to be included in SOC 2 scope, including access provisioning, change management, and vendor oversight, regardless of employment status. Scope is defined by the system description, so align it with your auditor early rather than assuming contractors sit outside it by default.
Outsourcing generally breaks the audit trail at attribution. The engineer’s identity, authorisation record, and personnel evidence live in the vendor’s systems rather than yours, so producing evidence becomes a dependency on a third party, one that may no longer be under contract by the time the auditor actually asks.
The audit trail in software engineering is the chain proving who changed what, when, and under whose approval, ticket, branch, pull request, reviewer, approval record, test evidence, deploy record, and an attributable identity at each step. Auditors sample changes from the observation period and ask you to produce the full chain for each one.
Expertise
Subscribe to our newsletter
Related
Content
Continue Reading