Thought: Two Reasons Why Software Is Difficult to Use

I don't have much trust in software. If I can help, I avoid using software. I prefer to walk to the bank than to use online banking. Same for doing government paperworks. Software most of the time doesn't work, or at least, doesn't work the way I expect.

I think the main reasons why using software is confusing, when compared to other domains, are two things: the lack of locality and the lack of observability.

Lack of locality

Compare: physical objects, and things in general, exhibit locality, and that allows us to make sense of the world. You don't expect to find a shampoo container on a bookshelf in living room. It belongs in the bathroom. Things that share a common aspect are located close to each other. And they can only interact with the other things in proximity. If that were not the case, predictably life would be chaos. Locality applies to social and organizational domains, too. You are not going to find a random social worker in an I.T. department of a company, nor a daycare center in a military base. Thanks to locality, things in the world stay predictable most of the time.

On the other hand, computers are locality-defying systems. It is just as easy to change a bit on one end of the memory as to change a bit on the other end of the memory. It is just as easy to change a file in one directory as to change a file in a totally unrelated directory in another part of the filesystem hierarchy. Take two similar-looking statements in a code, one could be performing an arithmetic while the other could be communicating with a server on the other side of the globe. How many times have you gone on a troubleshooting wild goose chase the cause of which ended up because one script was reading or writing an unexpected file/variable?

Lack of observability

Observability is expected in everyday life. The most things that we interact with in everyday life are visible, as otherwise life would be a very hazardous venture. Boiling water makes boiling sound. A failing engine would start to vibrate differently. Observability is a built-in feature of the physical world. Whenever we glance around the room of multiple people and immediately understand which persons are in what relationship with whom, we are unconsciously performing an amazing feat of observation.

In software however, observability is usually an additional feature, often an afterthought, or not even present. Systems get increasingly more complex with thousands of components interacting inside the computer at a time, but users do not have much better view of the system than in the time of early PCs. Do you not think that this is why the state of confusion is the norm, not an exception, when dealing with software?

Computer operating systems have evolved for more than a half century, so it is surprising to me that there still doesn't seem to be much attention to these points. Containers and access control systems help with locality, and sophisticated monitoring and profiling tools are available too, but I think software can be much more understandable if the notions of locality and observability are incorporated at the platforms level, such as the operating system and programming language. I'd like to think more about this.