Everything in technology is an abstraction of something else. The browser is an abstraction, the keyboard is an abstraction, C# is an abstraction; they all sit on top of other things and hide the details, with the goal of making you productive. (And each of those layers is actually comprised of many substrata.)

An abstraction is successful when we no longer need to look under the covers. It takes a while to get to that point. Usually an abstraction layer is imperfect, requiring us to look behind the curtain more often than we’d like.

You might think in 2009 that nobody would need to write HTML anymore. And yet, Microsoft is taking the historically unusual path of moving toward less abstraction on its web platform. (MVC is much closer to the metal than webforms.)

Perhaps there is a “Goldilocks” level of abstraction that programmers settle into: not too much, not too little.

For example, I am willing to define my own HTML, but not necessarily write it. What’s the difference? It’s worth my effort to declare “put a div here and a table over here, with these specs”. I try my best to avoid “bracket-table-space-open-tr-tag…close-td-tag-wait-did-i-close-the-last-one…”

And so it is with data centers and web services. The NYT reminds us that “the cloud” is made of ugly, hot, fallible wires and plastic. It is usually a successful abstraction; you and I have very little idea about the power supplies and air conditioners and security cameras that keep these things online.

While the benefits might seem magical, the cloud is more the result of perspiration than waving of wands.