
Switching to calendar-based versioning
- Tom Estelrich
- Opinion
- July 13, 2025
Table of Contents
For years, I used semantic versioning (1.0.0, 1.1.0, 2.0.0, ..etc.) as the default way to track app releases. It made sense: major for breaking changes, minor for new features, patch for fixes. But the more I built and shipped across my career at multiple companies and more recently as an indie developer, the more I found myself questioning what those numbers were really telling me, or anyone else.
So, a few months ago, I decided to switch. Since then, I have been using calendar-based versioning: 2025.0.0
, 2025.1.0
, and so on. It’s simpler, clearer, and frankly, a better reflection of how I work and release all kinds of apps.
Why semantic versioning isn’t working for me
Semantic versioning sounds great in theory. In practice, I found myself second-guessing every bump:
- “Is this a breaking change?”
- “Do I call this 1.1.0 or 2.0.0?”
- “Will users or clients even know what changed?”
This emotional friction and time overhead can slow momentum, especially in small teams or solo projects where there isn’t a dedicated release manager. The constant debate over version semantics can lead to inconsistency, confusion, and sometimes unnecessary delays. Instead of focusing on shipping and iterating, a disproportionate amount of time gets spent on deciding how to number a release, which ultimately distracts from the product itself.
Why calendar versioning works better
With calendar versioning, I use the year as the anchor:
2025.0.0
is the first release of the year.2025.5.0
reflects the number of sprints or releases that have happened up to that point.2025.8.1
is a bug fix or quick patch.
It aligns with how I plan my work. I think in terms of quarters and yearly goals, not abstract concepts like “major” or “minor” changes. And for users, it’s instantly understandable: a 2025 version is clearly newer than one from 2024.
Beyond development, this approach integrates well with marketing campaigns, project management timelines, and customer communication. It makes it easier to coordinate release announcements, track progress against business goals, and provide clear context to stakeholders who may not be familiar with semantic versioning nuances.
It’s not just about code
This isn’t just a technical change, it’s also a mindset shift. I want versioning to reflect how I actually work and ship:
- I iterate fast.
- I prioritize clarity over theoretical correctness.
- I care more about momentum and transparency than rigid rules.
Versioning should mirror the rhythm of the product and the velocity of the team, not just API compatibility or technical constraints. It’s about capturing the pace and flow of development in a way that feels natural and meaningful to everyone involved.
When semantic versioning still makes sense
Semantic versioning still has its place. Especially for libraries, SDKs, or APIs with downstream consumers who need to know exactly what’s going to break. For example, if I were maintaining a networking library used by multiple projects or companies, strict compatibility guarantees would be essential. In such cases, semantic versioning helps communicate breaking changes clearly and prevents integration issues.
If I ever publish a Swift package, I’ll probably stick to semantic versioning there.
But for apps, internal tools, or products I control end-to-end, calendar versioning is just more practical.
Final thoughts
This change might seem small, but it’s made versioning feel lighter, faster, and more aligned with how I actually develop. If you’re a developer tired of overthinking every version bump, give 2025.0.0
a try.
For indie developers and small teams especially, this approach can reduce overhead and help maintain momentum. Sometimes the best versioning system isn’t the most technically correct but the one that lets you keep building and moving forward with confidence.