Releasing Calendar-Versioned Software
summary
Advocates of calendar-versioned releases argue for time-based, frequent rollouts instead of semver guarantees, and show how Twisted makes it work: automated testing, CI, news fragments to collect changelog items, version-compare utilities, coverage aggregation and micro/macro benchmarks. The project keeps trunk releasable, runs about 5 releases/year, enforces one-year deprecation (or two releases) and treats security fixes as exceptions. Result: large Python codebases (Twisted ported 40,000+ lines to Python 3) ship smaller, safer updates with fewer surprise breakages.
AI-written summary · about
chapters (38)
- 0:00Intro
- 1:33Consistency in your software's characteristics
- 2:11Upgrading to Version Y is explicit, repeatable
- 2:26Feature releases Bugfix releases Repackagings
- 2:53SemVer "Semantic versioning"
- 3:18A new version of Java is available! Java 8 Update 101 build 13 is now available
- 4:45Fits well with planning, roadmaps, "top-down"
- 5:38Easy for developers to understand and use to communicate intent
- 5:57Why SemVer does not fit reality
- 6:18No such thing as a "safe release"
- 6:37Doesn't scale well to complex software (frameworks, languages, operating systems)
- 7:32"It's okay, we can update the major version number" hurts your users
- 8:06"Agile" developed software does not fit a "top down" model
- 10:43Reduce the friction for a user to upgrade constantly
- 12:59Realities of Software
- 13:32Regressions will happen
- 14:23Effective calver requires you adopt better processes
- 14:42Implementing Calver
- 15:21Operating systems, enterprise software
- 15:46Software that talks to external services, software with security implications, libraries/frameworks
- 17:19Constantly changing software needs to have different QA processes
- 18:11Issue release candidates and encourage users to run their tests against it
- 18:50Q: What is a regression? A: When user's software stops working through no fault of their own.
- 19:16Python import locations Argument names + types Return value types Behaviour
- 19:42Have A Clear Public API
- 19:58Abstract interfaces over concrete implementations
- 20:37Test ONLY using your public API
- 20:50Mock-based testing means you may hide bugs in the underlying layers!
- 21:12Re-Export Functionality
- 21:27Write private modules, re-export into a public one
- 21:51Can't accidentally export implementation details
- 22:18Track Your Performance
- 22:45Microbenchmarks (Black Box)
- 23:46Implement Code Review
- 24:20What Aren't Regressions
- 25:01Safely Making Breaking Changes
- 27:43tl;dr: Six Steps To Calver
- 28:15Don't break the user's software!
related talks
43mDownstream Zephyr RTOS Release Management - Keeping up With Upstream Pace
30mPutting the Semantics into Semantic Versioning
41mFrequent Releases & Major Changes
44mRelease Early, Often, Stable
08mIGNITE: Did Anyone Say SemVer?
10mLightning Talk: Policy as [Versioned] Code - You're Doing It Wrong.
34mPolicy As [Versioned] Code
27mDevOps Patterns and Antipatterns for Continuous Software Updates
