Skip to content

Commit f44e901

Browse files
committed
feat: publish versioning post
1 parent 79d0a47 commit f44e901

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

content/blog/versioning.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: "Releasing v1.0.0"
3+
date: 2023-12-30
4+
description: "When should small projects release their first major version?"
5+
author: Jacob Lindahl
6+
twitter: sudo_build
7+
license:
8+
name: CC BY-SA 4.0
9+
link: https://creativecommons.org/licenses/by-sa/4.0/
10+
---
11+
12+
`1.0.0`
13+
14+
What does this number actually mean? Of course, [semantic versioning (SemVer)](https://semver.org/) says this means "major version 1, minor version 0, patch 0," but there seems to be a certain significance, a psychological _weight_ to releasing major version 1.
15+
16+
Many projects never make it to version 1, languishing in the trench of eternal `0.*`. The release cycle has long since stabilized, and the project has been a production-ready—even LTS—state for many years.
17+
18+
I'm not here to tell you that you're managing your project wrong. If you have a process that works for you and your users, heck, if you simply have a process that you like, then don't worry about it.
19+
20+
SemVer is a standard that many ecosystems have adopted. The Rust ecosystem has it baked into the package manager. Projects that never make it to major version 1 despite being stable, production-ready, etc. are missing out on some of the value that the versioning standard can provide. They are more difficult to use, because every minor version (0._**X**_.0) upgrade must be treated as breaking. Failing to release version 1 while the project is an active part of the ecosystem is failing to follow the versioning standard.
21+
22+
Let's review: `major.minor.patch`. First off, obviously, if the major version is locked to 0, version numbers will be missing a significant amount of granularity. Further, the SemVer spec itself says that "Major version zero (0.y.z) is for _initial development_"[^semver-zero] (emphasis added).
23+
24+
[^semver-zero]: <https://semver.org/#spec-item-4>
25+
26+
What concerns might be at play here?
27+
28+
**Perspective 1**: "Releasing version 1.0.0 is a commitment to the project being 'complete,' in some sense. Therefore, as long as the project isn't done[^done], it would be dishonest (i.e. exaggerating/overpromising to users) to announce the release of 1.0.0." \
29+
**Perspective 2**: "Because the major version number has to change to indicate backwards-incompatible changes, if the project API isn't stable yet, releasing version 1.0.0 too early would lead to a weirdly high major version number by the time the API _is_ stable."
30+
31+
[^done]: Feature-complete, 100% test coverage, industry adoption, passed security audit&hellip; "done" could mean a lot of different things.
32+
33+
With that in mind, when should a project finally release that "milestone" 1.0.0?
34+
35+
It seems to me that the longer 1.0.0 is delayed, the less likely it is to be released at all. Therefore, I am going to recommend that 1.0.0 be released sooner rather than later. Especially for small projects&mdash;they can usually reach MVP within a few months. That should be version 1.0.0.
36+
37+
Version 1.0.0 does not mean "this project is done." It does not mean that the project does not have bugs. It does not mean that the project is feature-complete, supporting every platform and integration planned. It simply means that the API is stable _enough_ to use.
38+
39+
Finally, to relieve some of the pressure: the SemVer standard does not enjoin a duration of support or maintenance on major versions. You don't have to be married to major version number. If you want to release a new major version and be done with the old major version, go for it. Release those breaking changes.[^disruption]
40+
41+
[^disruption]: Of course, if it would disrupt the ecosystem around the project, maybe don't. But if that is the case, you should have released version 1.0.0 already.
42+
43+
Don't fear version 1.
44+
45+
It really is just a number.
46+
47+
---
48+
49+
Thanks to [Don Dall](https://github.com/dndll/) for his advice in constructing this rant.
50+
51+
{{% bio %}}

0 commit comments

Comments
 (0)