A while back I needed to re-implement the wheel, an extremely minimalist routing protocol. I asked my smart friends what to do and one of them helpfully gave me a really good book by a guy that spent about 30 years implementing networking &#x27;stuff&#x27;. Reading through it he pointed out that at the bits&#x2F;bytes level a lot of protocols are broken because of the lack of a version field[1].<p>If you have proper versioning you can say; for packet format 001, the field foonarg[1:3] must be 000. And if it isn&#x27;t it must treated as garbage and tossed. If you don&#x27;t have versioning, you&#x27;re kinda stuck with a bunch of ad-hock methods. Stuff like the this unused (we hope) bit in this field is never set this way for this format. Or this packet is 87 bytes long thus it must be this format. <i>head desk</i><p>If you ever have to design binary or even text based data format that needs to be shared add a version field, you&#x27;ll hate yourself less later.