Backend engineer · Bengaluru

Hirnaymay Bhaskar

I design and run messaging, billing and event infrastructure. Mostly: something at scale is slow, wrong, or quietly setting money on fire, and I go find out why.

Experience

Where I've worked

BIK.AI · YC + Sequoia · Bengaluru

Software Engineer II Apr 2026 – Present · Software Engineer Dec 2024 – Mar 2026

Shopify sync
Replaced the codebase's #1 acknowledged tech debt with a resumable orchestrator/executor state machine. 250+ stores, 2M+ records, zero duplicates.
Campaign analytics
Rebuilt the read path as an on-demand Postgres materialization over Elasticsearch, with age-tiered Redis caching. 20s → 200ms, at double the page size.
External webhooks
Per-store delivery isolation on Cloud Tasks, with a health evaluator that cuts off any endpoint failing more than half the time.
Alerting platform
Multi-channel alerting with role-based routing. The other three engineering pods ship every alert type on it.
Operations
On-call for all of the above. Drove SOC 2 Type 2 and ISO 27001 to certification; company-wide AWS/GCP administrator.

Writing

Three problems, written up properly

Each one is a general class of problem before it is anything I did. I hit an ugly version of all three in production — that's where the numbers come from.

01 — Queues & throughput BIK.AI

How to create a consumer for all your queues

Most people don't know when to add a worker and when to raise the ingestion rate. They're not interchangeable, and picking wrong is how a 1.26M-message backlog survives 38 workers.

The fleet wasn't too small. It was feeding the backlog. Half the connections, moving more.

Read the guide
Backlog over time Backlog holds at its peak while the fleet grows, then collapses to near zero once flow control and backpressure are fixed — with no capacity added. 1.26M <4K
Backlog, before and after the fix. No nodes added.
Average delay
2.4 h 94 s
Combined backlog
1.26M <4K
Scale-out
38 0 extra

02 — Usage billing BIK.AI

How to bill AI usage without making a loss

Accounts drawing 2–10× what they paid for. A dollar charged for a fraction-of-a-cent call. 12.5% of revenue dropped by a daily cutoff. Every one of them silent — nothing ever errored.

All three were the same mistake: a number that decided the bill and appeared on no screen. Fixed with one versioned rate card and credits denominated in money, not counts.

Read the guide And the timezone one
Contracted allocation versus drawn usage What the customer paid for stays flat while what the account could draw runs two to ten times higher, until credits are re-denominated in money. PAID 1× DRAWN 2–10× 0.1 typed
One free-text field, read as a divisor.
Revenue recovered
12.5%
Silent overdraw
2–10×
Hardcoded midnight
5 call sites

03 — Analytics BIK.AI

How to show analytics for a high-throughput system

A dashboard over an event store has to be instant and fresh at the same time, and those pull opposite ways. Aggregating on every load took 20 seconds. Serving a saved copy meant a live campaign showed numbers from ten minutes ago.

200ms, at double the page size. Materialise the numbers, refresh only what's actually stale, and tier the recompute by how much each screen needs.

Read the guide
Page load, before and after Aggregating on every request took twenty seconds. Serving a materialised copy paints in about two hundred milliseconds, with a second request quietly refreshing anything stale. BEFORE 20s — aggregate every load AFTER 200ms then refreshes what's stale
Same query budget. The page stopped waiting for it.
Page load
20 s 200 ms
Rows per page
Recompute tiers
2

Also

Earlier writing on Medium and the MuseScore blog.

Projects

Open source, built for myself

Nobody asked for either of these. One I use daily, one my team does.

Earlier repositories

  • Quack Searches YouTube comments with an inverted index, because the native search doesn't exist.
  • google-trends-api-toolkit Python wrapper over Google Trends' undocumented endpoints, worked out by staring at network traffic until it made sense.
  • Coloc Roommate matching via Gale-Shapley and Elo ratings. Yes, really.

About

What I actually do

I'm a backend engineer who designs infrastructure and then carries the pager for it. Billing ledgers, webhook delivery, event pipelines, multi-channel messaging — the layer that is invisible when it works and a company-wide incident when it doesn't.

Most of it is decided at design time, before a line gets written. A billing system is really an argument about what a credit is — a count, or an amount of money — and picking wrong costs you a rewrite and a few angry invoices. A webhook system is an argument about whose failure becomes whose problem. Draw those boundaries right and the code turns boring, which is the goal. Draw them wrong and no amount of clever code buys you out of it.

Most "scale problems" are correctness problems in a costume.

I learned that the unflattering way. The webhook system shipped before I had thought about ack deadlines at all, and merchants found the duplicates for me — the worst possible way to find them. Per-store isolation and the health evaluator both came after that call. Both are things I would now build first.

The rest of it: I read a great deal of git blame, I think the obvious explanation is usually the wrong one, and I will cheerfully spend a weekend on a CCTV app for my television because every existing one treats a remote control like a mouse.

Stack

What I reach for

Languages
TypeScript · JavaScript · Python · SQL · C++/Qt
Data
PostgreSQL · Elasticsearch · Redis · Firestore
Backend
Node.js · Express · REST · GraphQL · microservices · event-driven architecture · message queues
Cloud
GCP (Pub/Sub, Cloud Tasks, Cloud Run, Cloud Functions, GKE) · AWS (Step Functions, Lambda, IAM) · Docker · CI/CD
Also
React · Redux — internal dashboards fronting the systems above.