Protocol Buffers (and systems patterned after them) give you version control for your data structures, which are far more important than code and far harder for refactoring tools to handle.<p>It can be like ActiveRecord migrations but for live wire protocols -- independent apps built against different versions of the structure definition all see the data in the form they expect, not the form it was sent in. protobuf and thrift only support the simple case of adding new fields in new versions, but binprot supports full translation functions: <a href="http://janestcapital.com/?q=node/41" rel="nofollow">http://janestcapital.com/?q=node/41</a> -- and none of them involve an iota of on-the-wire self-description bloat.