Avik Mukherjee

Breaks prod so you don’t have to.

Backend engineer · Go, Postgres, distributed systems · Hyderabad, India

I build systems that have to survive reality. Right now that is AI and security infrastructure at SuperAlign, from endpoint ingestion to the data layer underneath. On my own time I rebuild systems to understand them, then write down what broke.

SuperAlign AI (current)2025 — now
Software Engineer, Backend
  • Own the Go backend for Surface end to end: asset inventory, auth (RS256, OIDC), dashboard APIs and scanner policy distribution
  • 10K assets/s idempotent ingestion as the fleet grew from 200 to 1,000+ devices
  • 11s → 1.5s listing for the S3 and Splunk prompt extensions, built on a generic Parquet parser; now building cloud sync for Copilot Studio and Cursor Cloud Agents
  • ~70GB in under 4 min: a memory-bounded DuckDB pipeline from firewall logs to report
  • Infra: self-hosting on Coolify behind Cloudflare Tunnels, GitLab CI/CD pipelines, and the Jamf integration that connects Surface to MDM
  • DataFoundry AITrainee Engineer2024 — 2025

    Azure Data Factory pipelines, Python backend work, and frontend RBAC in React with Axios.

  • DankMobile Developer Intern2023 — 2024

    Built the complete React Native app and its API layer, following React Native best practices; page loads down 40%.

  • Auctopus TechnologyFrontend Developer Intern2023

    Frontend pages, forms with React Hook Form, and Cypress tests that halved manual testing.

Selected work

All projects
QueryGuardnewp99 8.1 → 3.5 msPostgres proxy that stops one tenant slowing down everyone else
noisy tenant's reads
45 straight to Postgres8 through QueryGuard
innocent p99
8.1 ms straight to Postgres3.5 ms through QueryGuard

The hard part. The scheduler was the easy part. The hard part was what a proxy must understand first: what Postgres means by the same query, transaction and cancel. The benchmark caught six scans passing one budget check at once, so checking and charging now share a lock.

Go · PostgreSQL wire protocol · pgx · pg_query · PrometheusCode for QueryGuard on GitHubWrite-up on QueryGuard
Governorp95 553 → 27 msBudgets, leases and deadlines for task trees that fan out
quiet tenant p95
553 ms without27 ms with Governor
retries per call
27 without2 with Governor
peak concurrency
81 without6 with Governor

The hard part. A charge must fit under the task, its tenant and the root, all or none. I kept the tree in memory behind one lock and commit every change before replying, so a restart replays exactly what callers were told.

Go · gRPC · Postgres · SQLite · PrometheusCode for Governor on GitHubWrite-up on Governor
Term Bridge0 bytes relayedShare a real terminal with a 6-digit code, peer to peer
  • 6-digit pairing code
  • 0 bytes of terminal data through my servers
  • P2P after handshake
  • DTLS-encrypted DataChannel

The hard part. Signaling has to be central; terminal bytes must not be. A Durable Object relays only SDP and ICE, then leaves the path, so nothing I run sees your shell. Handing control between two PTYs was the harder half.

TypeScript · node-pty · WebRTC · Cloudflare Workers + Durable Objects · HonoCode for Term Bridge on GitHubWrite-up on Term Bridge
Sidecar~10 ms hook pathLocal-first hub for Claude Code, Codex and Cursor sessions
  • 3 agents: Claude Code, Codex, Cursor
  • ~10ms hook event write path
  • SQLite-backed local session and token index
  • 0 terminal/chat data sent to Sidecar servers

The hard part. Transcripts can't tell a finished turn from a pending permission prompt, so hooks are the only source of live state. They write to an atomic file spool, not SQLite, which keeps the agent's path near 10 ms even when Sidecar is closed.

TypeScript · Electron · SQLite · macOS · Claude Code · Codex · CursorCode for Sidecar on GitHub
miniqueue35 s max recoveryPostgres-backed job queue with leases and crash recovery
  • at-least-once delivery
  • 35s worst-case crash recovery
  • 30s lease, 10s heartbeat
  • zero duplicates via idempotency key

The hard part. SKIP LOCKED over NOWAIT, so a poll moves past locked rows instead of erroring. Recovery is a lease plus a reaper, not LISTEN/NOTIFY: slower, but it survives a worker dying mid-job, with a 35 s worst case.

Go · Postgres · pgx/v5Code for miniqueue on GitHub

Writing

All 42 posts →

Approach

Generating code got cheap. Deciding whether it is correct did not. So I spend my attention on the parts a model cannot hand me.

  1. Start with constraints.
  2. Prefer the simplest architecture that survives them.
  3. Measure before optimizing.
  4. Design for failure.
  5. Understand the abstraction.

Connect

If you're working on hard problems in infrastructure, AI systems or security, I'd like to hear about it.

Book a call