Monolith, then inconsistent microservices⟶Grab-Kit (standardized Go microservices)
Grab broke up its monolith and got a new problem — every team building services their own way, with logs in different formats and alerts nobody set up. Grab-Kit made the right way the fastest way.
Splitting the monolith solved the coupling and quietly created a hundred ways to be inconsistent.
Grab evolved from a single monolithic application into a microservices architecture — the standard arc, and by 2018 an accomplished one. The company was growing fast and needed the architecture to keep up.
But splitting a monolith doesn’t distribute only the code. It distributes every decision the monolith used to make once, on behalf of everyone.
REQUIREMENTS
What a team should get for free
The requirement wasn’t “make everyone follow the standard.” It was to make the standard arrive automatically. A new service should come into the world already able to authenticate and authorize requests, throttle abuse, balance load across clients, emit logs in the shared format, and report metrics — before anyone writes a line of business logic.
Framed that way, the target is a floor, not a rulebook: engineers should focus on business logic, because everything below it is already there.
OPTIONS
Go-Kit was close, and close wasn't enough
Go-Kit was the obvious candidate, and Grab drew inspiration from it. Their objection was specific rather than ideological: Go-Kit proposes techniques for building microservices, but a lot of manual work remains. It tells you how to do the wiring; you still do the wiring.
That distinction decided it. A library that documents good structure still leaves each team to assemble it — and the assembly step is exactly where consistency had been leaking away.
THE CALL
Generate the service, don't document it
Grab’s Developer Experience team built Grab-Kit, a framework for Go microservices that produces fully functional scaffolding in seconds. Service interfaces are defined in .proto files and the code is generated from them, so the transport layer and clients stop being hand-written per team.
Even the small edges were smoothed: stack traces are rendered readable using the panicparse library, because a stack trace nobody can read is another quiet way an incident goes unnoticed.
CONSEQUENCES
Seventy percent, and a monthly climb
Grab-Kit was released in November 2017. The GrabFood team reported saving up to 70% of the development time it used to take to create a new service, and Grab credits the framework with improvements in the stability and availability of its services. Adoption grew month over month rather than by decree.
The trade being made is the usual platform bargain, and worth naming: teams gain speed and give up some freedom over their own plumbing. Grab’s write-up doesn’t dwell on that cost, but it’s the price of the win — every service that gets consistency for free also inherits someone else’s opinions for free.
Microservices don’t fail because services are hard to build; they fail because each one is built slightly differently — so ship the standard as a generator, not a guideline.
A plain-language, AI-drafted and human-edited retelling of the article published on engineering.grab.com, reorganized and explained in our own structure and words, with original analysis in the editor's note above. The facts, numbers, and decisions belong to the original author and are not altered. For the full depth, read the source.