Originally published on 2010-02-17; fully revised and updated.
Versioning is the backbone of reliable builds, releases, and support. This guide is for build engineers, release managers, and developers who need a practical way to trace binaries to source, rebuild past releases, and reduce upgrade breakage.
This article updates and expands guidance from the original DevOpsSchool post, Why Worry About Versioning?, while preserving its core operational recommendations.

Why versioning is a build and operations concern
A good versioning scheme is not cosmetic. It directly affects incident response, release safety, and engineering velocity.
- Traceability: map shipped binaries back to exact source and owners.
- Reproducibility: rebuild a previous release when a hotfix or audit requires it.
- Upgrade safety: prevent accidental downgrades or mixed component states.
- Support efficiency: let QA and support identify what they are testing quickly.
- Release discipline: enforce consistent labels and handoffs across teams.
Use a four-part version scheme with clear ownership
The original guidance recommends a four-part file version: Major.Minor.Build.Revision. The key is not only the format, but also who controls each part and when each part changes.
| Part | Primary purpose | Typical owner | Change cadence |
|---|---|---|---|
| Major | Represents a significant product generation | Product or component owner | Rare |
| Minor | Represents incremental feature release level | Product or component owner | Infrequent |
| Build | Identifies the specific build output | Build or CI system | Every build |
| Revision | Tracks servicing context (for example, patch lineage) | Build or release team | As needed for servicing |
Build numbers should be unique, monotonic, and automation-friendly
A practical pattern is n = n + 1 for each release build. This gives simple ordering and avoids ambiguity when multiple builds happen on the same day.
| Build identifier style | Strength | Operational risk |
|---|---|---|
| Monotonic counter | Clear ordering and uniqueness | Requires centralized state management |
| Date-based value | Human-readable timestamp context | Can collide with multiple same-day builds unless extra suffix rules exist |
| Commit SHA only | Exact source traceability | Harder for non-engineering teams to reason about quickly |
#!/usr/bin/env bash
set -euo pipefail
BUILD_FILE=.build-number
current=$(cat "$BUILD_FILE")
next=$((current + 1))
echo "$next" > "$BUILD_FILE"
echo "Assigned build number: $next"
VERSION="2.3.${next}.0"
echo "Version: $VERSION"Code language: PHP (php)
If you need file timestamps for forensic or support workflows, keep them as file metadata rather than overloading the version format itself.
Release traceability workflow
flowchart TD
A[Developer commit] --> B[CI assigns next build number]
B --> C[Compile and test]
C --> D{Checks pass}
D -- No --> E[Stop and fix]
D -- Yes --> F[Embed file version during build]
F --> G[Create release tag]
G --> H[Publish artifacts]
H --> I[Support maps artifact to source]
Label source control at release time
Whatever source control system you use, create an immutable release label (or tag) that maps to the exact source snapshot used for the build.
VERSION="2.3.145.0"
git tag -a "v${VERSION}" -m "Release ${VERSION}"
git push origin "v${VERSION}"Code language: JavaScript (javascript)
.NET note: file version and assembly version are different levers
The source article distinguishes daily file tracking from assembly binding semantics. In many .NET environments, teams keep AssemblyVersion more stable and update FileVersion more frequently.
| Identifier | Main use | Typical change frequency |
|---|---|---|
| FileVersion | Operational tracking of produced binaries | Often every build or release |
| AssemblyVersion | Runtime binding and compatibility identity | Less frequent, policy-driven |
| InformationalVersion | Human-readable release metadata | Per build or release |
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>2.3.145</Version>
<AssemblyVersion>2.3.0.0</AssemblyVersion>
<FileVersion>2.3.145.0</FileVersion>
<InformationalVersion>2.3.145+sha.abcdef</InformationalVersion>
</PropertyGroup>
</Project>Code language: HTML, XML (xml)
Installer and component versioning practices to reduce conflicts
The original post emphasizes setup discipline to avoid DLL and component conflicts. The same principle still applies: installers must make deterministic version decisions.
- Install components compatible with the detected OS and locale.
- Avoid writing into global system locations unless explicitly required.
- Never overwrite a newer component with an older one.
- If a component is in use, schedule replacement safely (for example, on reboot when required).
- Register runtime dependencies correctly and validate permissions/security settings.
- Back up replaced components so recovery is possible during troubleshooting.
- Distribute a controlled installer package rather than loose raw binaries.
- Test installs on clean machines and on machines with realistic third-party software already present.
Reference attribution: The original article cites The Build Master: Microsoft’s Software Configuration Management Best Practices as source context for these recommendations.
Common pitfalls to avoid
- Using inconsistent version formats across teams and repositories.
- Tagging source after manual edits instead of tagging the exact built commit.
- Treating file version, package version, and runtime binding version as the same thing.
- Relying on post-build binary patching for version injection without strict controls.
- Skipping installer regression tests on real-world target environments.
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services — all in one place.
Explore Hospitals