The Broken Chain Problem
seekingquestions.blogspot.com
seekingquestions.blogspot.com
My favourite example of this was the introduction of the Microsoft Distributed File System (DFS) service into a customer environment. We were only using the DFS Namespaces feature, which is like DNS for file shares: the client downloads a blob of metadata and uses it to find an underlying file share for a logical name. The caching is very effective and the additional delay is negligible.
They had a file performance problem. So of course, they point the finger at the last thing that has changed in the environment: DFS! It must be DFS! I calmly point out that if the performance is bad after a connection has been made, it can't possibly be DFS, it's out of path after the initial negotiation. It's like blaming DNS for slow downloads. Makes no sense! But nope. They just won't accept that. It's the last thing that has changed!
I came back a week later to discover that instead of 2 redundant DFS servers, there are now 6 redundant DFS servers "for performance". To their surprise however, the file shares are still mysteriously behaving poorly.
They dragged me along to a meeting with a cast of thousands to discuss the issues. One guy spent most of the time arguing for increasing the number of DFS servers to 8, 10, or perhaps even more to solve the issue!
Meanwhile I'm having a side-conversation with the storage guy, who sheepishly admits that 3 out of 4 fibre channel paths were down, and this started at about the same time frame as the deployment of DFS. I point this fact out to the room. Everyone looks at me while blinking slowly. A few more moments of silence pass. Then someone helpfully suggests adding more CPU and RAM to the DFS servers. Maybe 8 processors and 64 GB will do the trick!
This is exactly like the boy looking for the coin under the light. It feels like it could be productive, versus definitely not being productive. It doesn't matter that logically it won't work, it's the feeling that matters.
An architect had decided we should build this as microservices, coupled by message queues. There was one microservice which split the file into records and parsed each one, one which validated each one, and one which handed off to the gateway.
In the first demo of the system, it took half an hour to process a file with a few thousand instructions in it. This was a ludicrous amount of time: it really should have been done in seconds.
The team met, and one of the senior developers pronounced the solution: since this was a microservice system, we would simply split one of the microservices in two, so we could scale out the amount of hardware we were using. The service selected was the first: rather than splitting and parsing the file in one pass, a first microservice would split the file into chunks, and pass each one onto a second microservice, which would parse them.
I asked where we thought the problem was, why we thought splitting a service would help, how we would measure the improvement, and, moreover, why we thought that adding a network hop would make things faster rather than slower. My questions were rejected as self-evidently unnecessary: it is well-known that you can improve the performance of a microservice system by scaling out.
The service was split. There was another demo. It was just as slow as before.
The project was removed from that team, and transferred to a new team under my leadership.
(this is a true story; the one fact omitted for the sake of drama is that the transfer of the project wasn't due to the embarrassing demo, it was purely down to staffing and logistics)
The Scream Test: If you see something and you don't know what it does, remove it and see if anyone screams.
Chesterton's Fence [0]: "reforms should not be made until the reasoning behind the existing state of affairs is understood" (Though the purpose of this fence is not obvious, there may be valid reasons for its presence.)
[0] https://en.wikipedia.org/wiki/Wikipedia:Chesterton%27s_fence
Option one assumes that you can easily reverse your action with no damage done, which very often isn't the case
If you applied the "Scream" test for a component you don't know what it does in an airplane, it might fall/explode/whatever.
If you do it in a non-critical codebase, it might just break the build, and have someone call you for it.
In the first case, the Chesterton's fence caution is more advisable. In the second, you could go with a "remove it and see what happens" approach.
If the risk is low it may be simpler/quicker/more cost effective to turn it off and see if anyone screams. So long as you are listening for the scream and can easily turn it back on. Obviously this can be abused but there are times when it is useful.
If the risk is high, definitely spend the time to understand why, even if it is non-obvious.
But when asking the users you rarely get told to go ahead with removal.
I imagine that none of the people criticizing the idea worked for long on any large organization.
Or what they worked on was too important for this risk to be taken. In my case, people could have literally screamed.
Spoken like someone who works on pure software, with Undo!
Out in the physical world, the screaming would be followed by a loud crash. You don't touch anything if you don't know what it does. That's how equipment is destroyed, and people die.
How can we know when an action is causally connected to an effect? Western philosophy since David Hume has struggled to find a solution to this problem. The 'problem of causality' is that it is extremely difficult to establish cause and effect with any degree of certainty. All we have is correlation. Modern thinkers (e.g. Judea Pearl) are still grappling with this problem today.
Pearl's fascinating talk on this subject at PyData 2018 is available on YouTube: https://www.youtube.com/watch?v=ZaPV1OSEpHw
Also, the inhabitants' action is basically what scientists do all the time when they run experiments. Correlation is not causation, but quite often it is a good lead.
They averaged everyone's estimate of the emperor's nose.
Also this article mentions two observations of Richard Feynmann and I just can't stop admiring the curiosity and wit of the man. His biography totally inspired me and made me laugh a lot
Now I wonder: what should the central planners give as metrics? Is there anything that works?
(e.g. a 2-inch finishing nail weighs 0.79 g; if a factory reports 1 mil units, take a random .8 kg sample, check if there's ~1k nails).
Certainly the practical issue of what to use as performance indicator is a deep one, at least if one wishes to have a system that efficiently satisfies the needs of the population rather than their stated wants.
Today we could probably build some decent abstract indicator out of a myriad of detailed statistics, but the soviets didn't have much IT infrastructure in place and had to make do with simpler indicators. The linked memoir has the following summary of how the planned economy worked in practice:
> The Soviet manager’s success indicator was a measure of gross output, such as weight, quantity, square feet, or surface area. [...] The Soviets experimented by adding other indicators, but in the end a gross output indicator always determined the manager’s success or failure.
> Soviet managers were as autonomous as their market counterparts. They set their own plan targets by disguising their productive capacity and overstating their resource needs. Soviet planners served primarily as supply agents for enterprises, endeavouring to supply the enterprises with sufficient inputs to fulfill their gross output targets. The system of material supply could seldom perform this task, and Soviet factory managers made barter arrangements with one another and produced their own inputs. This activity led me to the conclusion that the Soviet economy, like a market, was organized polycentrically and not hierarchically as a planning system. The “central plan” was little more than the summation of the factory manager's individual plans.
I would caution that this account seems like it overstates the actual independence of the managers, no doubt there were many political restrictions on their freedom of action in practice, but the general account that the plan essentially comes from the low level managers seems sound.
According to Goodhart's Law, no. As he originally explained it: "Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes."
Metrics of GDP, inflation, and employment are commonly used in macroeconomics to approximate quality of life, but they're subject to the same problem. For instance, you may be able to increase GDP and employment by increasing violent criminality, expanding the markets for private security, insurance, weapons and prisons, but harming general quality of life.
The book Red Plenty gives an informative and compelling lightly fictionalized account:
https://slatestarcodex.com/2014/09/24/book-review-red-plenty...
Markets mostly work.
No. You can't set a metric and let the metric do your governing for you. There needs to be a human in the loop. In other words, the system has to be run by people who are making a good-faith effort to achieve the real objectives.
Markets partly solve the problem. You can have a market economy that optimizes the production of nails and other widgets according to the metric of profit, but if that's all you have, you will end up with corporations that produce lots of widgets at a huge profit, but in the process burn out workers, pollute the environment, and fill news channels with scandals about how Acme knew for the last thirty years that its products were poisoning consumers, but kept the truth hidden. So you need regulations to mitigate these problems. But this in turn requires that the regulators are acting in good faith instead of trying to game a metric. There always needs to be someone in the loop.
We don't have time to analyze entire chains so we make assumptions about chains that should be unbroken. Occasionally but inevitably we make wrong assumptions.
They do. They are humans, and humans have noses.
Using the statistical method decreases the chance that a wild guess by the sculptor ends up angering the Emperor and causing deaths in the village.
The story isn’t about the selection of outlier data points as being representative - its more about drawing conclusions through seemingly plausible sounding methods that are nevertheless completely disjoint from the thing you’re reasoning about.