header-photo

Systems

Systems are only as good as the components that comprise them. While I’ve seen systematic approaches championed many times, I’ve also seen failures when particular components don't hold up under the system's stresses.

A classic system diagram comprises a bathtub. This system has an input— the faucet —and an output —the drain.
The system uses water as the physical thing it drives.
The faucet is a junction for two water inputs: cold and hot. The user can adjust these components to create a wide range of water temperatures coming into the tub. The flow for each can go from 0 to 100%.
The drain has a similar configuration. The flow can go from 0 to 100%.
The tub can hold a certain amount of water before failing. Typically, the system can drain water faster than it can take it in, but bandwidth ranges can occur.


Someone can tell you that the bathtub is a perfect system. It does everything you want it to. But what happens if the user demands more water than the system can handle?
Well, it doesn’t work any longer. The tub overflows, or the faucets can’t deliver it. The user starts bringing in five-gallon buckets and dumping them into the tub. This helps to fill the tub faster, but the drain can’t handle the amount of water coming in.
If the buckets help fill the tub faster, then suddenly the drain can’t remove it any faster. If there is a demand to empty the tub faster, an engineer drills an additional drain, or users start manually taking buckets of water out.
Then, when the smoke clears, you have a bunch of buckets, a hole in your tub, but hey, you got it all done faster.