I Don't Use SemVer In My Projects
Mon, Mar 4, 2024 9:54 PM
Why I Don't Use Semantic Versioning (SemVer) for My Projects

As a web developer, it is always this question whether to use semantic versioning (SemVer) for my work. Some people have good things to say about SemVer, but I have found that it does not always work with my preferred development style or the needs of my projects.

Here’s why I choose not to use SemVer when developing my web applications.

Complexity Over Simplicity

Complexity is one of the main reasons I stay away from SemVer. SemVer has strict rules about how to format MAJOR.MINOR. PATCH, which can be hard to understand, especially on smaller projects where changes happen often and are usually small. Suppose I make a small change to the user interface that does not break anything but adds some functionality. Should I really update the minor version? I find it easier to use a single version number that shows the current state of the app rather than getting too caught up in semantics.

Breaking Changes Aren’t Always Clear-Cut

When using semantic versioning, any change that breaks things needs to be accompanied by a major version increment. In reality, though, it can be hard to say what a "breaking change" really is. A change that makes something not work for one person might not have any effect at all on someone else. Consistency issues can cause major version bumps that are not needed and make things harder for both users and developers. Personally, I like to clearly record changes in a changelog instead of being limited to a strict versioning system.

The False Sense of Security

If a developer uses SemVer, they know they can safely update dependencies without any problems. It is usually not true, though. Minor and patch updates can still bring in small bugs or changes in behavior that make things less useful. I know from personal experience that relying on SemVer can cause my app to break when updating dependencies, which makes me doubt its dependability as a versioning strategy.

Focus on Continuous Development

Continuous integration and deployment (CI/CD) is a big part of how I work. Instead of following strict versioning rules, this approach stresses quick iteration and regular updates. By not using SemVer, I can release updates more easily because I do not have to worry about whether a change is a major or minor release. Being flexible lets me respond quickly to feedback and make changes as needed.

Alternative Versioning Strategies Work Better for Me

I have switched from using SemVer to simpler versioning methods that work better for my projects:

  • Date-Based Versioning: This method uses the date the app was released as the version number (2024-10-22; for example). It lets you know right away how new the release is without having to figure out version numbers.
  • Incremental Versioning, which means that for each release I just add one to a single number (like 1, 2, or 3). This keeps things simple and lets me focus on development instead of sorting changes into groups.
  • Git Hash: Simply using git hash as my version numbers.

Personally, I think it is more important to communicate changes to users clearly than to strictly follow a versioning system. Maintaining clear documentation and changelogs lets me show what is new in each release without just using version numbers. These clear explanations help users know what updates mean and build trust in my development process.

Wrap Up

Semantic Versioning has its uses and is good for many projects. However, it does not work for me because I usually work on smaller projects that need rapid updates and deliverables. Complexity, lack of clarity about breaking changes, and reliance on version numbers can get in the way of my work instead of helping it. By using simpler versioning strategies and focusing on clear communication, I can keep my development process flexible while making sure that users are aware of any changes to my web apps. It is all about finding the best way for me and my projects to work. I still can not find the right time to use SemVer in my normal web development work.