A REST endpoint that returns an extra field nobody asked for costs nothing — the client's JSON parser ignores keys it doesn't recognize, and the mistake is invisible. A gRPC service that gets a field number wrong costs the request its meaning: the wire format has no field names on it at all, so a decoder given a number it doesn't understand behaves however the schema author decided it should, and a decoder given a number it does understand but that means something different now decodes valid-looking bytes into the wrong value with no error raised anywhere. gRPC's speed comes directly from stripping out everything a JSON parser has to do at runtime — no key lookup, no string comparison, no type coercion — and that same stripped-down format is what makes a careless schema change silent instead of loud.
Protocol Buffers exist to solve a narrower problem than JSON: given a message shape both sides already agree on ahead of time, encode it as compactly and as fast to parse as possible, and let a compiler generate the client and server code from a single source of truth instead of two teams hand-writing serialization logic that quietly drifts apart. gRPC builds a full RPC system on top of that encoding — request and response messages, streaming in either direction over a single HTTP/2 connection, and generated client stubs that make a network call look like a local function call. The payoff is real: smaller payloads, less CPU spent parsing, and a contract enforced by the compiler instead of by convention.
The cost of that payoff is that the contract you define is load-bearing in a way a REST resource's JSON shape usually is not. A REST client that expects a field and doesn't get one typically gets null and a chance to handle it. A gRPC client decoding a message where a field number now means something different gets a value — often a plausible-looking one — with no signal that anything is wrong. This lesson is about the specific, checkable rules that keep a protobuf contract evolvable for years without ever producing that failure mode, and about knowing exactly which changes are free and which ones are not.