Saturday, January 15, 2022

Good vs. Bad

A good technology helps you solve your problems.

A bad technology is one that misleads you into thinking it has solved the problems, but instead, its side effects are actually creating other problems that now you also have to solve.

A good technology works as expected. No matter what the circumstances are, you should be able to predict what it is going to do, and it will do exactly that. You can rely on it to behave as expected.

A bad technology sometimes does what you think it will do, but sometimes it does very strange or unexpected things. You can’t predict it in advance, it is basically random from your perspective. You are caught by surprise often when using it, shock and disappointment follow.

A good technology is deterministic, at least in its ability to arrive at an expected outcome. You know what it is going to do, so you can figure out how it will accomplish those goals. If it is distributed or parallel, there may be a little bit of uncertainty with the finishing order of some intermediate operations, but it will correctly get to the desired outcomes.

A bad technology is non-deterministic. It may complete the work successfully or it may not. It may be restartable if there was a problem, or it may have left the system in a bad state that requires some manual interference. You pretty much don’t have any certainty of success when using it.

A good technology is obvious to use. You may need a bit of coaching about what it solves at a higher level, but after that, you can use it to do all of the things that you think it should be able to accomplish.

A bad technology needs lots of additional help. It may have strange abstractions, twisted behaviors, rude side-effects, etc. It needs really super-strong documentation, which is exceptionally hard to write, and quite rare to find. If you are confused while using it, that isn’t a particularly good sign. If it is really a brand new revolutionary technology that actually does present a new and innovative paradigm never seen before, that conceptual shift needs its own documentation, but once you’ve understood that, more documentation should not be necessary for any specific instance.

A good technology is effectively transparent. You see it, you understand what it does, you can figure out what is happening deep in its encapsulation since at some level it is pretty obvious. You can string together a bunch of good technologies to accomplish larger goals, it’s fairly clear how you would do this if you already know the individual components.

A bad technology is opaque. It’s a mystery. It does things behind the scenes that you won’t guess or be able to reason about. It hides stuff from you, that you need to know about it. You can’t string bad technologies together easily, they tend to fight with each other. Using the technology is just painful.

A good technology is malleable. Small changes have noticeable but contained effects. Everything is localized and the scope of changes is obvious. You can guess the overall impact.

A bad technology is brittle. A little change causes huge and unexpected differences in behavior. You have to be terrified with any type of change, you can’t use size as a measure of impact. One day it works, the next it is broken for unknown reasons.

A good technology is smooth. You decide you need it, it fits in easily and you are ready to start utilizing it for your goals. It’s isn’t a big deal to add it, and there isn’t a steep learning curve.

A bad technology has a lot of friction. It’s hard to get it set up, it’s hard to deal with it, and it’s even harder to accomplish any type of work reliably on a schedule. You might get some traction, but you pay for every inch that you get. It’s slow and plodding and acts as a time sinkhole.