How Apache YuniKorn Taught Our Kubernetes Cluster to Play Tetris
A story about Spark, scheduling, and a cloud bill that refused to make sense. Chapter 1: A Fresh Start on Kubernetes Every migration story starts with optimism, and ours was no different. We had just moved our Spark workloads from EMR to Kubernetes (EKS). On paper, it was…
You already have the data. Compass is how everyone asks it. You already know the question. What was DAU today? What’s the order’s success rate over the last few months? How many new users did X and Y, and are they sitting at the stage of doing Z? This escalation just landed.…
Search That Gets You: Inside Instamart’s LLM-Powered Search
How large language models help shoppers find what they mean, not just what they type. Author: Aarav Nigam Introduction Every search box eventually hits a wall where traditional search stops being useful. Searching tide powder 100g on Instamart works seamlessly. Exact keywords…
How Razorpay Moved 2,500 DAGs to Airflow 3, One DAG at a Time
Airflow, the scheduler behind Razorpay’s batch data pipelines, now runs on version 3.3, and we led the move from 2.10. It runs more than 2,700 DAGs and about 11,000 task runs a day, and we got there without a big-bang cutover. The official upgrade guide is the place to start for…
Nobody Knows What's in the Wire: How Groww Moves Money Between India and Wall Street
How Groww tracks cross-border payments between India and the US, ensuring every dollar is accounted for. Author: Aditi Gour Introduction Every business day, SWIFT wires cross between India and the US, and each one carries many people's money in a single lump. Deposits travel out…
Most production incidents do not begin with a server dying. They begin with a deployment: dozens a day, across hundreds of services, each the moment risk enters the system. We run payments infrastructure at Razorpay. When a payments system degrades, transactions fail: merchants…
The JioHotstar platform receives in excess of 40TB data every day. At 2.1 million messages per second. At this scale, every superflous byte is costly, like real money costly. In this blog, we cover strategies that helped us optimise our ingest workflow which ultimately saved…
BrowserStack Load Testing runs real browsers and API traffic in one test, so you can see how your web app holds up for real users before your busiest day.
Inside Razorpay’s RTO Model: The Engineering Behind its ML Lifecycle
Contributor: Abhik Debnath In this article, we use Razorpay’s Return to Origin (RTO) risk model to explain the ML lifecycle: how we build a reproducible release, deploy it into checkout, monitor its behaviour, and use later outcomes to evaluate whether it needs retraining. We…
This article explains how a Storage Pool absorbed the boot disks and made them almost free. The same boot disks also became home to ephemeral data such as Trino cache, task spill, and Spark shuffle through emptyDir. But this introduced an unexpected problem: deleted transient…
Cost-Optimized Kafka Architecture on GCP Storage Pools
This article explains how multiple Kafka clusters went on a storage diet when we moved from a traditional fixed-cost disk architecture to a Storage Pool model. We will follow Kafka from its recovery and performance requirements through Strimzi KafkaNodePools, zonal placement,…
Solving Regional Consistency of Delivery ETA with a Deep Probabilistic Framework
1. Introduction In the on-demand food delivery ecosystem, an app’s Expected Time of Arrival (ETA) is the foundation of customer trust. Promise 25 minutes for a 40-minute delivery, and you leave a customer frustrated. Show 50 minutes for a 30-minute delivery, and that customer…
Kafka Inconsistencies and the Silent Failures Behind Real-Time Decision Platforms
A field guide to the duplicate events, stale state, rebalances, and deployment traps that quietly distort real-time decisions — told through one decision that should have fired and didn’t. Note: This piece assumes working familiarity with Kafka and event-streaming fundamentals —…
Migrating Swiggy Partner App’s Deep Link Engine at Scale
The OS decides whether your app may open a URL — before any of your code runs. We swapped the SDK underneath that, without republishing the links we already owned.A partner taps a link in an SMS, a push, a share sheet — and lands on the exact screen they needed. We changed the…
From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA
It’s 3:00 AM. The glare of a monitor cuts through a pitch-black room as a critical alert pierces your sleep. Seconds later, you’re locked in a familiar, exhausting ritual: eight browser tabs open, bouncing frantically from Grafana metrics to Loki log streams, then over to Jira…
You already have the data. Compass is how everyone asks it. You already know the question. What was DAU today? What’s the order's success rate over the last few months. How many new users did X and Y, and are they sitting at the stage of doing Z? This escalation just landed.…
One Autovacuum Away: Partitioning slice’s Billion-Row Transaction Tables Without Downtime
Preface One evening Postgres ran a routine ANALYZE on one of our tables. Within minutes, one of our payment products was degraded. Nothing had been deployed. No migration, no config change, and traffic was normal. Yet the database writer was saturated, latency on the transaction…
Scaling ML Model Inference through architectural separation
The model is only one part of the inference pipeline. At scale, the work happening around it, from routing requests to coordinating downstream dependencies, can have a much bigger impact on latency and efficiency. We addressed this by separating model execution from request…
From Experimentation to Scale: PhonePe’s AI Journey in HR
At PhonePe, our strategy for AI in HR was never about deploying a single, generic solution. Instead, we set out to build a fit for purpose ecosystem prioritizing speed, flexibility, and accuracy embedded directly into daily workflows. AI Readiness began before AI. We have been…
Groww Lite: Building a Disaster-Resilient Trading System
How we built a minimal, independent path to the exchange that stays up even when the rest of Groww doesn’t. Author: Gaurav Agrawal Why Groww Lite Exists Every large trading platform eventually runs into the same uncomfortable truth: A rich product experience might involve using…
Zoomable RecyclerView: Enabling Pinch-to-Zoom and Panning in Android RecyclerViews
Introduction Android’s native RecyclerView is exceptionally efficient at handling large datasets through item recycling, but it lacks native support for spatial interactions like pinch-to-zoom and canvas-level panning. For complex layouts—such as interactive retail grids or…
Preface The UPI Switch at Razorpay has evolved significantly in the five years since we started building it. The Switch is the platform that enables real-time payment processing with NPCI. When the team began, it was little more than an idea. Today it powers more than 70% of…
The Meesho Mantras, Explained: The Operating Principles Behind How We Work
What are the Meesho Mantras, why do they exist, and how do they actually shape decisions? The complete explanation - one mantra at a time. Ask anyone who has worked at a fast-growing company the same question, and you'll get some version of the same answer: the hardest part was…
The Right Pixels: Optimising Images at Meesho’s Scale
Client-side engineering lessons from optimizing billions of image loads every day in Meesho’s Android app. Within the Meesho app, images serve as the product surface itself rather than mere ornamentation. Users judge fabric, finish, colour, fit and detail through pixels, while…
How Razorpay Cut Its Metrics Bill by 62% Without Losing a Dashboard
Contributor: Saijal Shrivastava We cut our metrics ingestion by 62% without deleting a single useful dashboard or breaking an alert. Daily ingestion dropped from about 450 billion samples to about 170 billion. The surprising part was not one large optimization. It was three…
Solving an AAPT2 Auto-Versioning Mystery The discovery APK size is a core performance metric for us. We track it continuously, investigate regressions, and regularly inspect what is actually shipped, not only what exists in source control. That habit led us to an unusual…
Lens: Give Your Entire Team X-Ray Vision Into Your Android App
Lens lets your team see what is happening inside a running mobile app—from a normal web browser. You Know This Bug, Right? It is Friday afternoon. QA tells you that the profile screen is blank after login. You open the same app, follow the same steps, and everything works. The…
Holding Revamp Went Live. Then Reality Check Hit Hard
Introduction In the previous article, we shared how we redesigned Holdings retrieval to eliminate unnecessary work. The architecture looked solid, and the rollout was ready. Then we deployed it. With millions of users accessing Holdings every day, the rollout looked healthy…
CI Doesn’t Need On-Demand: Moving Our Build Pipelines to Spot Instances
Contributors: Guptaanuj CI/CD pipelines have always had a money-vs-stability problem. Run on-demand AWS instances and your build infrastructure is rock solid, expensive, and predictable. Run on spot instances and your costs drop 70–90%, but AWS can pull the rug with 2 minutes of…
How ShareChat rebuilt subscription billing on Temporal and reached 99.9% reliability
Recurring subscription billing in India is deceptively complex. A single billing cycle has to send a mandated pre-debit notification, wait a regulator-defined window, then attempt collection by coordinating
LLMs for Relevance: Automating High-Quality Product Relevance Labeling in Flipkart Search
Amey Patil , Shreya Malani· November 2025 Every product you see on a Flipkart search results page is there because a system decided it was relevant to what you typed. But how do we know those decisions are good? Someone — or something — has to look at a query and a product and…
Quality in the Loop: Measuring and Enforcing Build Quality in Agentic Development
More than 70% of the code my team ships is now AI-generated. Velocity stopped being our constraint a while ago. What replaced it is a question the team asks several times a week, and until this year we had no defensible way to answer it. The question every developer on my team…
Refusing the Haystack: How Groww’s Cyber Defence Team Scales Detection and Response
There’s a version of a security operations centre that exists mainly to be pointed at. It ingests every log it can reach, lights up a wall of dashboards, and staffs a rotation around the clock so that, if anyone asks, the answer is “yes, someone is watching.” It satisfies an…
TraceMind: Automating the Chaos of Crash Debugging
The Debugging Dilemma: Why TraceMind? In a complex mobile ecosystem, debugging a single production crash is rarely a straightforward task. Historically, developers at PhonePe faced a fragmented landscape of data points. When a crash alert hit, an engineer would often spend…
The Inner Loop Is Solved. The Outer Loop Is Yours.
Agents now write most of our code, and the panic about what that means for engineers is aimed at exactly the wrong half of the job. A mental model I keep coming back to, what it says about the engineer we are all becoming, and why the engineers with the most to gain are the ones…
Decoding Customer Value: pLTV Models for India’s Quick Commerce Delivery Wars — part 1
Author: Jayshmi A Special thanks to soumyajyoti banerjee , Meghana Negi, Shaik Masihullah, Akash Deep for their contributions throughout this project and Sunil Rathee for his guidance. The counterintuitive story of how 350+ carefully engineered features + a simple MLP matched…
DE Dost: Teaching Machines to Be a Friend on the Last Mile
Building Swiggy’s AI onboarding companion for delivery executives, where accuracy alone wasn’t enough and mentorship had to scale.For a new Delivery Executive (DE) joining Swiggy, the experience is often overwhelming, throwing a world of SOPs, incentive structures, zone…
Engineering across all Swiggy Apps has always had a simple problem with a very large surface area: we ship fast, but every release, every production signal, and every operational review touches too many systems. For a single release manager or on-call engineer, the day could…
From Gatekeeper to Strategic Catalyst: How GenAI is Transforming Compliance at PhonePe
India is undergoing a massive digital transformation, and at the heart of this revolution is PhonePe, enabling seamless payments and financial services for over 700 million registered users across Bharat. When you build at this kind of population scale, handling millions of…
3DS vs 3DS2 explained: risk-based authentication, frictionless flow, global mandates in the EU, India, Japan & Australia, and what changed after 3DS1's sunset
TrustMesh: How We Built a Real-Time Fraud Brain That Thinks in Graphs and Sequences
TrustMeshDownload to access the paperTRUST.pdf1 MBdownload-circle Every day, millions of Cash-on-Delivery orders flow through Meesho. The vast majority are legitimate: a first-time buyer in Patna ordering a kurta, a reseller in Surat stocking up on inventory. But tucked inside…
How We Refresh Razorpay's Data Warehouse 10x Faster with Graphs and Indexes
Contributors: Utkarsh Koppikar Rohan Background Razorpay provides the payment infrastructure for millions of merchants globally. Behind every payment, settlement, and refund is a microservices architecture where each service owns its own database. While this keeps services…
Improving the Efficiency of Rendering User Holdings
Introduction At 9:15 AM IST, the opening bell rings on the Indian stock market — and millions of investors reach for the same screen. Within seconds, millions of investors open the Holdings page. They want to know how overnight news has impacted their stocks, whether they’re in…
How AI-Driven Automation is Scaling PhonePe’s Customer Support Framework
At PhonePe, we process a staggering 400 million transactions a day—amounting to over 10 billion monthly, operating at a scale that places it among the largest payment platforms globally. Managing such scale would typically require a massive customer support infrastructure for…
Running Hermes at Razorpay: a Network-isolated, Self-improving “Second Brain” for every Employee
How we run a personal AI agent for everyone at Razorpay: always on, multi-model, and safe by construction. Contributors: Siddharth Tripathi Today, more than 220 Razorpay employees each have their own always-on AI agent. On a typical day, about 84 of them are actively working.…
How Swiggy Saved 3.7 MB by Solving a Vector Drawable Mystery
🎭 The Mystery Begins Picture this: You’re a responsible Android developer. You’ve done everything right. You’ve replaced those bulky PNGs with lighter, elegant, scalable SVGs. You’ve patted yourself on the back. You’ve probably even tweeted about it. Then one day, you open the…
How Swiggy Migrated from protobuf-java to Square Wire
At Swiggy, we use Protocol Buffers everywhere. Nearly every message exchanged between our backend services and our mobile apps is a protobuf. On Android, the default and most widely adopted way to work with those schemas was protobuf-java, Google’s official Java runtime, with…
Scaling Android CI: From 44 → 10 minutes — A Deep Dive into Build Time Optimization and Best…
Scaling Android CI: From 44 → 10 minutes — A Deep Dive into Build Time Optimization and Best Practices Android monorepos get expensive and slow as they scale. We re-architected CI/CD caching, trimmed the Gradle graph, tuned the JVM, modernized the toolchain, and finally moved to…