Thursday, July 22, 2010

Train Model of Software Development

Traditionally software development has been considered a process in managing a classic 3 way trade-off, which looks something like this:


The basic idea is that there is always a tension pulling in opposite directions in each of these dimensions. If you add more features you need to lower the quality or deliver later. If you compress the schedule you will need to reduce the quality or the number of features.

However, the relationship is not that simple. Because software development is an exercise in constant refinement of unknowns, the three way trade-off ignores the fact that these decisions are made in the face of imprecise information. As a result there is a tendency to underestimate the effects of one of choosing these trade-offs. In particular trading off quality almost always leads to schedule slip, due to the accumulation of technical debt.

Agile development in part works because there is a recognition that this three way trade-off model is fundamentally flawed. In a classic Agile project (e.g. SCRUM) you have a fixed schedule (the iteration), a fixed level of quality (passes the acceptance tests), and it is only the features that change.

In a pure Scrum project, you would end every sprint with a release candidate. However, in practice the length of iterations does not accurately reflect the ebb and flow of a traditional software lifecycle, and as a result there has been a move towards a higher level release cycle which layers on top of this.

The analogy used is to think of software releases like a train. A train leaves the station at regular intervals following a timetable published in advance. If someone/something misses the train then another one will come along soon. Releases are planned at regular intervals (e.g. quarterly, every six months), and features are sized accordingly to fit that schedule. If a feature looks like it won't make it, it will be dropped and appear in the next release.

This model is used very successfully in a number of products (e.g. Eclipse, Ubuntu), and is well suited to software products. The customers and the Product Manager (PM) know that there is going to be a certain release at a certain time and can plan around it. If the PM has a high priority feature/bug fix, they can tell the customer with some degree of certainty when that will appear. Marketing knows in advance when a product will be released (although they don't necessarily know in advance exactly what will be in it). Developers have a clear goal on what to deliver, and performance can be easily measured on a regular basis.

Each release has a lifecycle that gets it out on the release train. While obviously those processes can vary, there are some basic phases which I have given below:

  • Envisioning: This is the initial planning and R&D phase that begins each major release cycle. Features are planned for the release and broken down into user stories; UI mockups are developed and reviewed; any design or prototyping that needs to be done is covered.
  • Feature development: This is the standard sprint/iteration where features are developed and delivered. Care must be taken to ensure that this development is sustainable meaning that the testing effort can keep up with the development pace. Features should not be considered finished until they pass all their User Acceptance Tests which should be written at the time the story/feature is defined (and ideally automated).
  • Hardening: This is the end of phase when much more rigorous testing is performed, release engineering and packaging is performed and bug fixes are made to ready for release. If the feature development phase is done properly the bug fixing is going to be minimal, however there will always be some as testing becomes less confirming and more adverserial.

For example, suppose we want to develop a train schedule that allows for about 2 major releases a year, and allows for a minor release in the off quarters if required. This would require splitting the team into maintenance and research for about one quarter, before merging the development together. The train would look something like this:


At the end of every major release the team splits into two, with most people working on maintenance (bug fixes that didn't make the previous train, minor refactoring, automating tests etc), while a smaller group move into the envisioning phase for the next major release. In the second sprint, the minor release team moves onto minor features before hardening for a dot release in the third sprint. A fairly modest amount of work can be done in this amount of time so the focus is on improving quality and getting features that missed the last train. Meanwhile envisioning will take about 4-8 weeks after which time work on major features can begin. Depending on the resource needs there can be some drift between teams in this phase. If the needs of the minor release are modest more work can be done on starting the major features. If the minor release needs more polish/testing then resources can move on to this. At the end of the quarter the minor release should go out. Alternatively it may be decided that there is no pressing urgency to do a minor release and these fixes can simply go out in the next major release.

Now the major feature development begins in earnest. It is critically important at this stage that major features are correctly prioritized and that development is proceeding at a sustainable pace. The goal is to deliver only finished features, so that means not starting on features until others are finished in order to reduce the risk that in the hardening phase there will be an unsustainably large number of bugs.

There is a fair degree of flexibility in this release process. For example, a minor release can be all maintenance with no additional features, or not released at all. Envisioning may take only a short amount of time leaving more time for feature development, or it may take a full quarter meaning only a minor amount can be done. I have used a quarter as a unit of release, but six months, or an off number (say 7 or 9 months) may be more appropriate.

The only thing that needs to stay consistent are the release points. The reason for this is that if the tidal flow of the project stays consistent, then there will be much better predictability, a lot more happiness and much better results for customers and PM.

The train model has been well proven. I would argue it is a sign of maturity in most teams that they move to something like this more predictable process than the chaos that attends most software development. PM needs to be prepared to give up the fact that major releases will not have everything they want, but the train model allows them to get the things that are important out to customers sooner. I would argue that this delivers considerably more value to customers than shipping them features late that they may or may not need.

It also allows a much more agile response to the inevitable customer feedback you get as a result of releasing your product. If you can only do a major release once every 18 or 24 months then customers will die of boredom waiting for new features. If you can do it twice a year, with minor releases between for those things that are important but can't be delivered on time, your customers will love you.

34 comments:

karaatanasov said...

How would you suggest to handle feature that require more then 6 months of engineering work?

Dean Povey said...

Hi,

You can almost always break a big feature into smaller features that deliver business value. If you have other features you can deliver, then could still release but do your longer term work on a development branch and then release it it in the next release.

Jon Gecko said...

Hi Dean,
Thanks for the post.
This is excellent for product development but how do you see it working in an integrated shop where product development and customer projects with existing technology sit side by side?

Jon

ranjini said...



I actually enjoyed reading through this posting.Many thanks.














Wordpress Development India

Unknown said...

It was nice to read your blog. the thoughts are very well laid out and it was refreshing to read.modelismo ferroviario en valencia

qrenoir said...

What's with all the advertising on your blog. Is this a software educational site as in a ".org", or something more capitalistic in nature?

Allan said...

We are a leading software development company delhi,India which works as per the client requirements and give provide software.

Unknown said...

Thanks for sharing software development model then another software development company Software development companies|IT Offshoring and OutsourcingTop IT Companies In India

IICE-Indore said...

I am really happy to say it’s an interesting post to read. I learn new information from your article, you are doing a great job.
Software Development in Indore
Keep it up

ranjini said...


I havent any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us.


Scrum Methodology

Android App Development Company in Indore said...

Envisioning is first step of software development which affect next steps of software development. This phase of software development needs to be properly completed. After reading the half of your post, i found it quite interesting to read.

Software Development Company In Indore

Anonymous said...

I'm very pleased to uncover this website. I wanted to thank you for ones time due to this wonderful read!! I definitely liked every little bit of it and I have you saved as a favorite to check out new things on your website. besides this, I would like to introduce to you my website. Software development company profile, and it provide services to:
Iphone App Solutions | software outsourcing companies |

digiclayinfotech said...

Hi! Thank you for the share this information. This is very useful information for online blog review readers. Keep it up such a nice posting like this. We are most leading IT & Software company in India

Arbutus Infotech said...

I really like all these suggestions. Thank for sharing such a fantastic post.
Website Development company in Indore

abitcorpseo4 said...

Thank you for sharing information about Software Development. ABIT CORP is the perfect software development company in Indore having a professionally experienced team is work with WordPress, Joomla CMS, Codeigniter, Laravel open-source frameworks web development and our company is considered supreme Development Company which is available in Indore. Are you interested to develop customized software in your influential prices? Then you can get from ABIT CORP and make contact us, info@abitcorp.com or +91-8109045666. Visit for more details:  https://www.abitcorp.com/software-solution.php   

whatsapp plus themes said...

putlocker Thanks for sharing valuable Information, I really very impressive on your blog. I hope you continue on blogging job.

Anonymous said...

Thanks for sharing this information and nice it. For more or any information visit Software development company in Noida

Digital Marketing said...

Superb explanation & it's too clear to understand the concept as well, keep sharing admin with some updated information with right examples.Keep update more posts.

Digital Marketing Agency
Digital Marketing Company in Delhi

Prasantt Ghosh - India's Top/Best Fashion Designer & Choreographer said...

Thanks a lot for sharing this information. Keep posting such valuable blogs in future. Prasantt Ghosh - India's International Best/Top Fashion Designers & Choreographer North East & Assam has been working to promote haute couture in the region and showcase the potential of ethnic designs internationally for over two decades now.
India's best fashion choreographer
Best fashion designer of north east India

Emarketing Empire - Digital Marketing Agency | Best Digital Marketing Services | SEO India said...

Superb explanation & it's too clear to understand the concept as well, keep sharing admin with some updated information with right examples. Keep update more posts. Nice Article! Thanks for sharing such amazing information.

Digital Marketing company in Delhi
SEO Company
Digital Marketing Service

Book Cellar said...

Download MX Player Pro Mod Apk
in educating us. We are also same service provides in

apollonialucy said...

Software development services can offer a range of benefits to your organization.

bestpressurecooker said...

Digi Tech Tricks
Nice Article! Thanks for sharing such

Agra Escorts said...

i appreciate this talent of writing
Agra Escorts
Lucknow Escorts
Udaipur Escorts
Goa Escorts
Karnal Escorts

pratik said...

Good post. I learn something totally new and challenging on websites I
stumbleupon on a daily basis. It will always be exciting to read articles from other writers and use something from their websites.
Here My website SEO Company in Ujjain

pratik said...

Hi, Enjoy the article, I'm Manisha, I really want to say sincerely that this is amazing content that you have shared.
thanks for this. it's really very helpful for me.
Here My website for WEB DEVELOPMENT Company in Ujjain

Imdianaprince said...

Software Development in Dubai
https://www.nsreem.com/ourservices/software-development/
NSREEM develop amazing desktop and web applications that are tailored to your specific requirements.
NSREEM is #1 in Software Development in Dubai
1634697787990-10

samuelfrancis said...

Taking care of our bodies should be the foremost priority in our lives. To maintain that golden glow on our faces, we must pay special attention to our skin. It reflects confidence, power, and sincerity and speaks to people of our personalities without saying much verbally.
Samuel Francis Advanced Dermatology

samgulbahce said...

Dermatology can help you maintain your skin's health, and this blog will explore just a few of the advanced benefits that dermatologists offer. Whether it is removing moles or warts, or treating acne and rosacea, dermatologists can provide many treatments for all types of skin conditions.
Samuel Gulbahce

Digital Marketing said...

Digital Marketing Agency in India »Brainwork Technologies is a website development company in India that has served many leading brands across the globe. We have more services like Digital Marketing, Paid Marketing, SEO, SMO etc. Brainwork Technologies.

SMM Panel said...

This post is so informative content.It help me a lot.My self flower decoration Bangalore

Homepe Service said...

A very informative blog on the train model of software development. Also, ready informative blogs on appliance maintenance. AC Repair Service in Indore

Harsh SEO Agra said...

Wow, the digital marketing blogs are simply amazing! They are a true testament to the power of digital marketing and how it has become a cornerstone of modern businesses. The wealth of information, insights, and strategies shared on these blogs is incredibly valuable for anyone looking to build a strong online presence and reach their target audience effectively. The depth of knowledge and attention to detail that the authors put into their writing is truly inspiring. I can always count on these blogs to provide me with the latest trends, best practices, and innovative ideas in digital marketing. Kudos to the amazing minds behind these blogs!
here is my website for Digital marketing Company

Muskan said...

Your blog post provides a well-structured argument for the train model of software development and its benefits, while also highlighting the challenges and considerations involved.

The Future of Software Testing_ Trends and Predictions for 2023