The protobuf example seems best handled with version numbers in the messages. Designing protocols without them is almost an antipattern, especially when the designer says "there's no version number because I'm so smart, I'm going to get it right the first time". The examples that I remembered now seem to have been scrubbed from the web ;).