Nathaniel Knight

Reflections, diversions, and opinions from a progressive ex-physicist programmer dad with a sore back.

Transparent vs. Invisible

One way that folks talk about "transparency" is as "organizations should share details of their operations with the people they affect" (employees, customers, the public, etc.). This kind of transparency is good! Being able to see things lets people make informed decisions; not being able to hide things prevents bad behaviour.

However, in computer systems transparency tends to mean something like "replacing a component with a different one that has the same interface but a different implementation". It's a seductive notion: systems that are designed this way can sometimes have one component change without breaking others, or add capabilities by inserting new components that mesh with what's already there.

For example:

This kind of design has it's place (and isn't the topic of this article), but I don't think it's "transparent". A better word for something that you can't see is invisible.

I think it feels good to call a design "transparent" because it suggests that it's elegant and principled, and because the word has some lustre from its more common meaning. Also, calling a design "invisible" makes it seem like someone might be trying to trick you, or at least might be getting too clever for their own good.

I also think that pursuing a "transparent" design can minimize the degree to which these systems are never truly invisible.

For this reason I avoid describing computer systems as "transparent" and try to use more specific words like "independent" or "backwards-compatible" instead.