Journal / Security

SOC 2 and ISO compliance without an enterprise budget.

Compliance is often treated as a mandatory tax that requires buying expensive continuous monitoring platforms. In reality, clean technical hygiene implemented at the code level satisfies 90% of SOC 2 Type II controls.

RL
RBB LAB
Studio
Published 22 Sep 2026 8 min read
soc2:iso RBB/LAB SECURITY RBB LAB · JOURNAL 8 MIN READ

When early B2B startups pitch enterprise buyers, the compliance request arrives quickly: "Send over your SOC 2 Type II or ISO 27001 report." Startups often panic, hire expensive consultants, and install compliance vendor software that costs $30,000 annually.

Compliance platforms do not make software secure; they collect evidence. If your infrastructure lacks basic access control and automated deployment tracking, compliance platforms only produce dashboard alerts.

90%
Controls Handled in Code
$0
Extra Vendor Lock-In
100%
Auditable Git History

The Four Pragmatic Compliance Pillars

Instead of retrofitting compliance before a audit, we build four automated controls into every codebase from day one:

Pillar Implementation Pattern SOC 2 Control Target
Infrastructure as Code Terraform / Cloudflare Wrangler checked into Git CC6.1 (Change Management & Configuration)
Branch Protection Mandatory peer PR reviews & automated CI status checks CC6.8 (Software Development Lifecycle)
Structured Audit Logging Centralized JSON request & mutation event logs CC7.2 (System Monitoring & Event Logs)
Secrets Isolation Environment secrets via KMS or Vault (no env files in git) CC6.3 (Access Controls & Credentials)
Auditors care about evidence, not high prices. A clean Git repository with protected branch rules, immutable CI logs, and Terraform code is far more convincing than a PDF generated by a compliance dashboard.

Automated Audit Logging Code Pattern

To satisfy audit log requirements, every database mutation or authentication action should emit a structured JSON event containing actor, timestamp, resource ID, and client IP address:

src/logger/audit.tsinterface AuditEvent {
  action: string;
  actorId: string;
  targetResource: string;
  ipAddress: string;
  timestamp: string;
}

export function logAuditEvent(event: AuditEvent): void {
  const payload = JSON.stringify({
    level: "AUDIT",
    ...event,
    timestamp: new Date().toISOString()
  });
  // Output directly to standard out for centralized ingestion
  console.log(payload);
}

Passing the Audit

When the audit begins, your auditor asks for proof that changes are reviewed, access is revoked upon employee departure, and logs are retained for 12 months. When these rules exist as code in your CI/CD pipelines, gathering evidence takes hours instead of weeks.

For additional details on mapped attack vectors, read our guide on mapping the startup attack surface.