Wednesday, February 15, 2017

Fixing a Chair

Fixing a Chair


I had to fix a reclining chair this weekend. After years or wear and tear, a rivet was broken. Two aspects of the chair could be easily related to software area: encapsulation and interfaces.

It is a nice chair, and looking under and behind it makes one easily notice how the exterior encapsulates a lot of mechanical and electrical connections. There is little worry about hiding the details, mainly under the chair. Literally, one has a “backdoor” that makes it easy to reach the mechanisms inside the device. I’ve barely worried about looking at those areas before. It wouldn’t pass a “security review” with software testers nowadays. One would point out that, if the chair is not in its normal position, a child could easily get to those inner components. Yet, I cannot remember this chair being in anything other than its normal position, except while I was fixing it. A beautiful and hard to remove cover for its bottom would have little return on investment. Why do we focus so much on such rare upside down scenarios in software?

Now to the beauty of the interfaces. I probably could have avoided having the rivet broken, since for a while I could perceive it was getting loose. However, it was loose and working. I could wait for the rivet to break by itself, or I could have broken it myself and replaced it sooner. This mirrors a little certain software scenarios in which you can sense things are “loose”. The problem is that having such warnings is not that common. Most times, software delivers a binary experience: it either works, or it doesn’t. And then, there is the beauty of easily replacing something broken, even not having exactly a perfect match for the replaced component (I used instead a screw and nut). Even computer hardware does already far better than the software business. Despite all the babbling about Xml, standard APIs, etc., the reality is that the end-user is basically stuck with a “stack of choices”, in which replacing a component most times simply cannot be done. Imagine a simple analogy of taking a font from a certain computer/word processor to another computer/word processor. Even ignoring all the licensing issues, it is almost impossible to deal with all the problems of registry entries, configuration files, etc. And that assuming you have similar computers and operating systems. I wish I could just “transfer parts” of my software and replace as needed, as I could do with the reclining chair.

Available link for download