Reach for Protocol Buffers when you control both ends of a connection and care about size or speed: internal service-to-service calls, mobile clients on slow networks, event streams into Kafka, or anything high throughput. With gRPC you get protobuf, HTTP/2 multiplexing, and generated client stubs as one package, which removes a lot of hand-written serialization code.
The cost is that the bytes are not human readable. You cannot curl an endpoint and eyeball the response, and you cannot debug a payload without the .proto file that describes it. JSON wins for public REST APIs, webhooks, config files, and anything a person needs to read or a browser needs to consume directly.
Schema evolution has firm rules you must respect. Never reuse or renumber a field that has shipped, because old data on disk still carries the old numbers. Add new fields with new numbers, and mark removed field numbers as reserved so nobody accidentally recycles them. Break these rules and you get silent data corruption, not a loud error.