If it is unwise to trust other people's claims for “one
true way”, it's even more foolish to believe them about your
own designs. Never assume you have the final answer. Therefore,
leave room for your data formats and code to grow; otherwise, you
will often find that you are locked into unwise early choices because
you cannot change them while maintaining backward compatibility.
When you design protocols or file formats, make them sufficiently
self-describing to be extensible. Always,
always
either include a version number, or compose the format from
self-contained, self-describing clauses in such a way that new clauses
can be readily added and old ones dropped without confusing
format-reading code. Unix experience tells us that the marginal
extra overhead of making data layouts self-describing is paid back
a thousandfold by the ability to evolve them forward without
breaking things.