Software Versions
Software is living and breathing, it is something that is continually changing with “the times”, to be successful over time you must continually be iterating and updating software, working to create the best experience for your end user. Software shouldn’t be stagnant.
Many vendors in the software industry are fighting with “The Innovator’s Dilemma“, where the company has not moved to building software in fast iterative cycles. The best way to create a nimble release cycle culture in your company is to have your software created and maintained in the cloud. For vendors pre-cloud movement, it is hard for them to move to a cloud software and to Software as a Service (SaaS) models when customers are paying for older software that is working right now for them. What will justify the moved to the cloud when the customer paid large sums of money for software that is working for them. Overtime, non-cloud base software will become stagnant, it is a struggle to keep all of your users up to date.
The risk of doing large software releases in the worst case scenario; when a large software update is released, users reject it and don’t use the software at all. There is also the risk that a large software update takes to long and the software is delayed to a point where the application is “stale” altogether or never released.
The Infinite Software Release
Have you ever heard of the “infinite release cycle”? The goal is to release often allowing continuous small daily, weekly or monthly incremental changes to software. Doing large/major version releases of software every year slows down developers from moving fast and getting input. A large software release benefit’s marketing the product, the product queues up for launch and gives the marketing team something big to announce, but doing so slows down getting the product out to market for real users to take advantage of getting feedback.
Software Reversibility
In a new world of cloud-based apps and services, rolling out software in the past was episodic. Now things are moving to an almost continuous release cycle, happening fast. In today’s environment aren’t products “done” like they used to be, they can’t be. Do you recall the days of software on DVD and CD? You can’t just ship a DVD with software on it and call it a day anymore. The focus has shifted to pushing code and having the capacity for reversibility. You need to build software in real-time so you can iterate fast but also build fail-safes in place so if there is an issue, the software can be fixed it before users notice it. Reversibility is very important if you’re rolling new software out that is broken. It must be tested, one great company that does testing is Rain Forest, they have an on demand Uber-like service for quality assurance (QA) testing. As part of the deployment cycle, you need to test and talk to customers, showing them the new software, react to feedback and iterate.
Move Fast and Release Often
Track Metrics
A critical metric to track is how long did a cycle take and what can you do to
Be sure to track after a developer writes code and committed to run the unit test and then how fast the code gets into production. If you can get the code out into production in 15 minutes from a change in code base out to users allows faster iteration and feedback.
- After developer code is written and committed track these
- Time after code was written, track how long until a unit test is run
- Time after code was written, how fast the code gets into production
If you don’t track that metric, release cycles will generally get slower and slower.
Many startups start moving fast and naturally slow down on release cycles, to bi-weekly, weekly, then semi-monthly, then monthly. It can get worse from there.
A great talk from Startup School 2017 from Adam D’Angelo about this. Watch from 43 minutes into the talk.
Love this concept.