A Parable
cs.virginia.edu
cs.virginia.edu
If I may venture an explanation for that, it is that the different groups identify with different people in the story.
Managers identify with the cost-cutter. It is a story about the futility and difficulty of doing their jobs, particularly in the midst of unpredictable technical problems. Above all, it is about engineers' failure to just get things right the first time. It is a tragedy.
Engineers identify with the shunting-yard folks and especially with the final brilliant solution. It is a heroic story, a story about succeeding against unreasonable demands, dominating an unkind and unfair world with a simple idea.
Mathematicians identify with no one in the story. It is a mundane story about an uninteresting and unnecessary practical problem, self-inflicted and then solved in an elementary way. The problem is not general, the solution is not interesting, and no one in the story is very smart.
I think, as far as the part about mathematicians goes, that the point is that once the problem is stated sufficiently abstractly and sufficiently precisely, there is no problem.
Forget all the nonsense about trains and toilets and rail yards and whatnot. You start with a single linear, symmetric object, and you don't have a problem. Then you break it into two sub-objects, one of them asymmetric ...
|-T-| = |-| + |T-|
... and now you have a problem. If you want the problem to go away, just un-break apart the pieces. QED.(As Dewey said, "A problem well posed is half-solved." And sometimes doesn't even exist.)
They started out with a toilet on each car and ended with a toilet on each car, the cars just happened to be twice as long in the end.
+---------------+ +-+ +---------------+
| | |T| | |
+---------------+.+-+.+---------------+
O O O O O O
Then all carriage-cars and toilet-cars are…• reversible
• interchangeable with others of their type
• easily externally identifiable at shunting yards
• able to represent either the original 1:1 carriage:toilet ratio, or the cost-saving 2:1 ratio, or any other ratio that might be desired
• able to represent any desired min-distance/max-distance in carriage-car-lengths to the nearest toilet
• able to be upgraded/serviced independently (including occasional periods of operation outside of usual ratios, as trials or when cars are out-of-service)
Of course the costs of extra couplings (in construction, linear deadspace, and operational overhead), and effects of such unevenly-sized cars on travel characteristics (stability, wear, fuel-economy, etc) might outweigh the explicit flexibility benefits.
But such flexibility is less risky in the abstract and more easily-rewritten world of software where I practice, as opposed to the world of railroad engineering, as practiced (perhaps not coincidentally) by my father's father.
Because your solution needs more CS thinking. Your carriage cars are not reversible when used in any ratio other than 1:1 because they need an arrow inside to point to the nearest toilet-car. Also, in odd-numbered ratios (3:1, 5:1), you would really need a car with arrows going both ways, starting from the middle of the carriage. Or maybe you are selling a programmable LCD arrow signage for the carriages...
There is also one issue with Dijstra's parable: although the new coupling solution doesn't require ever turning carriages around (as long as they are shunted as pairs), it also means carriages cannot be turned around without extra effort. Assuming the turning platforms can only take one carriage, you have a lot of extra work to turn around a pair and get them back together correctly. However, there are track configurations that can turn the paired cars around more easily. In any case, this probably explains why all trains have seats facing both directions: they never need to turn them.
Certain costs are very visible to business leadership. Like the costs of toilets. Others, not so much. Like the time lost in the shunting yard farting around with the cars. Or the costs of people that used someone else's train service because they were pissed at not finding a toilet.
Business, on a whole, is great at optimizing those visible costs, but only the good companies are good at managing those soft costs. All other things being equal, how you manage those soft costs is how you beat your competition.
What a spectacular tautology. But, yes, you are right. More importantly: It's an easy place to win or lose dollars.
Thanks for the backhanded compliment, but no, how you manage hidden 'soft' costs is how you beat your competition.
Extending that to be "value x" is simply a race to the bottom. Measuring (and reducing) costs that other people also have but don't realize is the kicker.
For example: Understanding the cost difference between client acquisition and client turnover. Everyone focuses on growth, but in reality it's often cheaper to retain a client - even if you do things like give your product away - than it is to lose them and add a new one. (Which can often looks better on the surface).
Another one: Firing bad customers. Telling a customer that pays you a large sum that you aren't interested in the relationship anymore looks bad on your bottom line. Recognizing that you were actually putting 120% more money into servicing them than they were paying (or even worse, recognizing that those services are out of your preferred scope) is what puts you ahead of the game overall. You don't see that on any report though, at least not right away.
No joke, they even came up with the brilliant idea of handing out plastic bags for "emergencies"...
Especially the latter, since this isn't the first time they've done something insane for a few extra seats.
Putting the air intakes at the bottom of new trains (instead of on top as was the original manufacturers design) comes to mind, which lead to dozens of trains becoming unusable and needing weeks of repairs after a bit of snowfall...
So I'm not a manager, and not a programmer... I'm a sysadmin at heart.
The planner in me therefore would have liked to see a bit more planning upfront, less knee jerk reaction to each issue, and more consideration to the costs to the org as a whole of each change...
But it was fixed. It just took a clever enough incremental improvement to move back to square one.
Presumably, the previous single-car size had already been optimized for pre-toilet criteria, and changing that by a factor of two probably massively screws with at least some of those criteria. It's hard to believe that the costs savings for having half as many toilets significantly outweigh those other factors.
"Look at those idiots who tried to cut costs myopically and ended up at a net loss" is a common story, and I've heard it used to kibosh good ideas.
The point of the parable, to me, is that you need to think the whole process through. It's about good, thorough engineering. It is NOT about not trying. People get reflexively pessimistic about improvement ideas, which is a real shame. Perhaps I'm sensitive to it because I've often been the guy trying to change "the way things are done." :-)
Sometimes this lack of end-to-end attention to a process results in serious mishaps. Let me give you a concrete example - thin provisioning in SANs. It can help you efficiently use your storage, but if no one on staff has time to keep a watchful eye on storage utilization growth rates, you can get into a situation where the SAN fails in a way that's very difficult to fix. If hiring isn't possible and you lack the resources to automate storage monitoring, it's probably better to switch to thick provisioning, even though on paper it's a less efficient use of the SAN. I'd argue that an opaque LUN that goes down because it can't expand is harder to recover than a file system that's full.
Change isn't only good, it's critical to continued success. That said, too many people optimize a process or service prematurely, without a deep understanding of the process or service. This, I think, is why Dijkstra describes how managers get more and more annoyed as the story progresses.
One penny pinching solution, improperly evaluated, pissed off customers, made the company less efficient (man hours working on a previously smooth process), and resulted in a direct capital expense.
All in all, they probably took a loss.
The manager did a good job to find a way to cut down the costs but didn't get the specifications right so the engineers, although they could deal with the issue, didn't even know that an issue existed.
I guess in the day, they didn't have UX designers.
As for the article's point, it probably is nor managers, nor engineers, nor mathematicians really get the point of the parable.
Your reading works too.
I wonder though if this lesson has the same value nowadays as it had on its day. Maybe it is because of such lessons that this design procedure is common today.
They're falling out of favor on New York's MTA system, but Chicago's newest 5000-series cars are still configured in married pairs.
Hypothetically, with married pairs you never need to turn cars around, each unit is independently functional, and the number of many expensive components is reduced by half. Quite elegant, if you ask me.
Romantically(?) divorce among married pairs is rare, and in the case of Chicago, fan-sites document the handful of mis-matched cars.
Finally the real take-away here is that cost-cutting always has external costs that are seldom thought of, and especially when they harm the product experience, should definitely be re-evaluated :)
edit: I realize I was wrong, you don't need to ever put pairs on a turn-table as long as you keep them paired correctly.
+----------------+ +---------------+
| T| | |
+----------------+ +---------------+
O O O O
where 'T' marks a toilet. You build your train from a bunch of those cars, and now it does not matter how you connect them, you'll always have a toilet within a car's range, plus at worst the additional cost of crossing into the next car (since you can't put the toilet between two cars, there's a slight asymmetry).Of course, this is exactly equivalent to just making the cars so that they all have restrooms, but are twice as long...
Regular switching track suffices to switch which end of a train a motor units runs on, and some smaller passenger trains can work fine in "push" instead of "pull" mode.
* Toilets every n cars (from 0 to 3)
* Asymmetrical vs symmetrical ordering of toilet enabled cars.
* Helvetica vs Times for signage.
etc.
Second of all this does delight me. I feel like I deal with this on a daily basis with scope creep in my projects.
On one end of the spectrum you can have an over-engineered project and take forever to get to a requirements decision only to keep kicking down a bad requirement down the chain due to the investment involved.
On the other end you have little to no requirements and you keep discovering new requirements all the time. Scope creep can get ugly here.
Maybe it is a parable against yet another workaround?
It is NOT obvious that they should have put a toilet in every car. The solution works quite well and you save a potentially large amount of money.
Unless of course you built them like the large buses with a swivel in the middle, but then you get into non-standard stuff.
And they're always interleaved like this: chphphphphc (c - car with a cabin, p - car with pantograph, h - hummy car) I wonder if it ever caused logistical problems when assembling trains from cars. Probably not since they are visually different and not sensitive to flipping.
P. S. And toilets? You only had two - one in each cabin cars.