There are a few topics that are almost guaranteed to cause groans from experienced engineers. If you bring up localization, merge conflicts, or time zones in conversation, be prepared for a frosty reception. Versioning falls into that category too. It’s a fact of life, but many of us put off working out how we’ll handle it for far too long—partly because it can feel like a waste of time. You’ll hear very few positive comments when a product, library or API gets versioning right, but it can be a major source of complaints when it’s done badly.
In this chapter we’ll offer some perspectives on versioning that can help you design an appropriate versioning strategy for the product you’re working on. We’ll provide some concrete guidance and suggestions, but ultimately, it will be up to you to balance competing concerns and technical challenges.