A couple of years back, while I was involved in a group that eventually created the ScALeD principles, we were of course discussing the benefits of the different scaling approaches out there. One of the participants – I think it was Andreas Schliep – mentioned to me that the release train concept in the scaling approach that Mike Beedle always referred to as S_Fe was pretty clever. Since I spent some amount of time on trains in the past twelve years, I tend to disagree. Let’s see how I perceive the release train metaphor based on my experiences in the German train infrastructure.
I recall an earlier critique I heard from Dave Snowden. Basically, he said that a train runs on linear tracks, and oftentimes it’s impossible to change directions when you are on a linear track. Why is that a bad thing?
The agile world tries to address complex problems. Complex problems can be defined as “you will find out new things along the way”. Well, if you’re on a train on a linear track, and find out new things that might shift your desired destination, it’s hard to change course. Obviously.
But it gets worse when you experience the train situation in the real world. This week, I was headed to Dresden from my hometown close to Bielefeld. Before October there used to be a direct train connection from Bielefeld to Dresden. But since October that line no longer operates, so I need to take a different route over Berlin. Usually, it’s a 3-4 hour train ride to Berlin, then another 2 hours to Dresden.
Unfortunately, there has been a crash of trains on the tracks towards Berlin, and the cleanup activities will take another week or so before the fast route is enabled again. So we were diverted from Hannover to Uelzen over Stendal to Berlin. Since there had been snow on Monday in Germany, some trains were running late, so I was glad to hop on a one-hour earlier train heading toward Berlin. I arrived there three hours later than initially scheduled. Why?
All trains were diverted between Hannover and Berlin through that route. This also affected the counter-direction from Berlin to Hannover. On the route, there is a single track serving both directions with some points where trains can pass by each other. So, between Uelzen and Stendal we spent the majority of time mainly waiting for by-passing trains on the single-track course.
Relating back to release trains, if you want to or have to change course, make sure there is enough side-track capacity. Otherwise, you will spend most of your time just waiting.
But it gets worse.
Trains are on time
Anyone who has recent experience riding a train somewhere in Germany probably laughed at this headline. I hear similar stories from some other countries, yet I also hear on-time pride from other countries as well. On my way to Dresden this year, the single-train connection up until October managed to get me seven minutes ahead of schedule to my destination three times this year. Since I had some spare time this week, I was thinking through why this is so rare.
If you have a train scheduled to stop at three stops along the route, people that want to ride that train show up around the scheduled departure of the train. If the train arrives seven or even twenty minutes ahead of schedule, it will stop there until the planned departure to make sure to get everyone on board.
On the other hand, if the train runs five or twenty minutes late, well, there is close to no measure to get ahead on that lost schedule.
But it gets even worse. Since that one train is now late, the remainder of the schedule for the train station, indeed the whole journey is now messed around with. Assume your train is twenty minutes late, but another train in the same direction was scheduled just ten minutes behind your delayed train. Since the other train can’t overtake the late train, that train will also be delayed by at least ten more minutes.
And for all the three stops your train makes on its journey, the schedule will be screwed up further for the net effects in play.
Then, consider the train running to its final destination before changing directions, and heading back to its origin. Those twenty minutes of delay will have a postponement effect on the later run as well. Anyone who has boarded the famous doubled-ICE trains from Berlin towards Düsseldorf or Cologne knows this.
So, relating back to release trains, if you slightly have to postpone a release train for whatever reason, be aware of the ripple effects that will cause – especially when the coordination of multiple interdependent component teams is necessary to catch up, you will likely be in a situation pretty similar to the ones in real-life trains in Germany.
But it gets worse.
Getting ahead of the schedule? How?
How was I able to arrive seven minutes ahead of schedule in the first place? Well, I’m so glad you asked.
Here is an abbreviated schedule from that train run as I recall it:
- Herford (1 minute stop)
- Minden (1 minute stop)
- Hannover (20 minutes stop)
- Magdeburg (15 minutes stop, change of travel direction)
- Köthen (1 minute stop)
- Halle (Saale) (5 minutes stop)
- Leipzig/Halle airport (1 minute stop)
- Leipzig (20 minutes stop, change of travel direction)
- Riesa (1 minute stop)
- Dresden-Neustadt (1 minute stop)
- Dresden Hbf. (final destination)
As you can see, there are several longer stops along the route. Some of them were quite purposeful, for example, Leipzig Hbf. has a dead-end train station. So, trains run into the central station, but can’t directly continue their journey. Instead, the train driver needs to exit on his end of the train, go all the way to the other end of the train, and turn everything ready before the train can leave the station again, having changed its travel direction for the passengers. In Hannover usually, there is some material re-supply for the onboard restaurant as well as some personal change halfway along the route.
My point is, if you want to occasionally be able to deliver early with a release train, you have to buffer your schedule by a lot.
So, the bottom line is, that in my experience trains are rarely on time for the systemic effects that take place when you have dependencies and deal with them appropriately. Trains are rarely on time because no traveler wants to have too many buffers built into their schedule, and if something unexpected happens, it’s hard for trains to change course in a meaningful, yet time-saving way. That’s why I think the idea of a release train is a terrible to start with.