Lessons Learned: The Importance of Abstraction
In a previous blog, I ruminated on the evolution of constraints and their effect on how we design and operate systems along with the influence that constraints have upon our expectations for applications and systems. This time I would like to talk about abstraction because of its power to help and hurt everything we do in IT.
Growing up as a teen in NYC, “abstraction” was a word that triggered the concept of art. The craze for abstract art in the 1960’s and 70’s was still very strong and in many ways very new due to changing social attitudes and availability of material. In the 20th century it seemed almost natural that discoveries in science would influence art and “non realistic art” influenced those in the sciences and engineering.
The Power of Abstraction to Effect the Real World
So when I first thought about the true “dictionary meaning” of abstract in high school, it really caught my attention. “to draw from”. In art, you can feel how that works, perhaps in music as well. Now let’s take a step back and truly ponder our modern digitized, virtualized world in terms of abstraction in IT.
Download a chess game to your smart phone. Pick a skill level to play at, say intermediate. Choose to be white and go first. As you proceed through the moves, it is important to note that once you started, every move your “digitized opponent” makes is calculated by the state of the board and the skill level constraints on how far it can look ahead to guess which of the many alternatives you will make over the next 5-10 moves.
The opponent you are facing is an abstracted set of rule and value judgments, run by an algorithm created in a programming language based upon a collective “understanding” of how best to apply strategy and tactics in chess.
All of these rules and algorithms need to run in a platform that does not care about the speed of the CPU, the amount of memory, how the input of moves from the user is captured, how the state of the board is presented or in fact HOW it got downloaded to a phone, tablet, or PC to begin with.
This set of ideas are set in motion by you as you play the game, it affects your choices in the game and could have an effect on your mental mood once it is over. A collective set of abstractions can have a real world effect on a person which in turn could affect others.
So a time killing app to get you through another day waiting at the airport, theater, coffee shop or DMV (make that 2 days), is delivered for your pleasure through a set of abstractions that are critical to the game’s success meme.
Apply those same concepts to a programmable, digitized medical device that is monitoring vital life signs of a patient in order to determine how much medicine to drip into that patient. Suddenly this “abstraction meme” seems so much less philosophical.
Abstraction in Practice
Abstraction is a powerful way of organizing, by burying details at one level to make important design decisions, free of clutter. Abstraction helps designers of all kinds in all fields focus on a set of relevant fundamentals. The details get to be focused on later, when more appropriate. It does not mean the details go away; instead they are layered and handled at an appropriate level of focus. This approach isolates aspects of a complex design. You see this in a blueprint of a skyscraper, as you delve deeper into its drawings.
Abstraction – The “IT” Phrase
So what about our daily job of running the IT world by sticking fingers in leaky infrastructure and apps? The concept of “virtualization” or “abstraction”, often used interchangeably depending on the hype cycle, has been with IT ever since programs stopped addressing device specifics directly. This occurred as early as the late 1950’s. The reasons were obvious then: avoid reprogramming when a new improved device was available. Over time operating systems and their device drivers took care of this kind of abstraction. Environments like UNIX and Java enable us to free ourselves from the shackles of particular vendor devices, and CPU or memory architectures. Now of course “the cloud” allow us to take a greater leap – we don’t have to pay full price for hardware platforms we barely use, while paying small spike fees for unexpected usage.
Following in the footsteps of all hyped advancements, abstraction as manifested by the movement to the cloud or by the virtualization of infrastructure is the new magic. But magic has a price, likewise abstraction. Many systems that are being moved to the cloud are barely understood. They have enough abstraction to be opaque to their caretakers (due to lack of documentation), but not enough abstraction between layers (data, processing and network) to run effectively and grow with business demand. The abstraction is insufficient to create effective elastic resource pools that can dial up and dial down infrastructure based upon the arrival of demand. Data access is not abstracted very well from its source.
The application owners and their new hosts, the cloud providers, will soon come to the realization that the mess has moved from the enterprise to the cloud. Then what? In my next blog, I will address and answer this WHAT – pattern-based design and reasoning.