Sometimes we can understand concepts without ever ‘knowing‘ the concept. As an example; few people would claim to ‘know‘ how learning occurs, however we are all capable of learning. Clearly the understanding of, and ability to do so, are quite separate skill sets.
Layers of abstraction is one such concept — we make use of layers of abstraction every day and yet it allows us to better understand the world in which we work. Take for example, the never-ending debate as to whether WYSIWYG editors or plain text editors are better; whilst each camp have their own set-in-stone, definitive views, the question should be less about ‘what’s best‘ and rather about ‘with which layer of abstraction am I most comfortable‘.
Layers of abstraction can be most succinctly defined as tools, classifications and technologies we use to simplify and arrange our interactions into manageable groupings. Or in less words; tools we use to make complex tasks… simpler.
A great example of layers of abstraction at work can be seen in the typical setup of any University/College, first there is the University, then the Social Sciences division, then the Business School, lower down the levels still, we get the Entrepreneurship department before finally getting the Undergraduate class on Business Startups. Each layer exists simply to explain how each part relates to the others and make the management and organization of them a more realistic task.
There are limitless applications of this simple concept, even to the extent that its boundaries are not a little blurred — indeed making it rather hard to conceptualize in a succinct way. However if we turn our attention to the world of computing and the professions of web design and development we can see a more useful application of the concept.
At its heart every piece of code ever written requires us to embrace layers of abstraction, each time we add a technology between us and the very silicon which powers the computers of the world, we add a layer of abstraction, something to make the process simpler, cleaner or easier.
The layers of web design & development
Whenever we boot up our computer we introduce, without thinking, numerous layers of abstraction, the electronic signals passed between the silicon chips are converted to binary, which in turn is converted into Machine Code, I think you can see where this is going…
Eventually we get the web browsers, which we create content for, that themselves provide a layer of abstraction from native code on our users platform of choice. The same applies to our image or code editors, themselves layers of abstraction away from further, less human-friendly, code.
So why does it matter?
Aside from helping us understand why other designers and developers have different preferences for tools to us, layers of abstraction provide a useful framework within which to view the web as a whole.
When creating a new-site a developer must consider at which layer the client will be most comfortable and at which layer they are most comfortable being. Is the client totally unversed in all things web-related, unknowing of the differences between PHP, HTML and PNGs, or are they tech-savvy, closet-geeks, who want control over even the finest of details.
Whilst we often assume clients are perfectly happy with WordPress or our CMS of choice, it can often be the case that they would prefer a more detailed level of control over their content, perfectly happy to write the HTML of each article by hand. I for one find myself in WordPress’ HTML view far more often then the Visual view.
So what’s the solution
As an industry there is a need for us to move away from a ‘one-size-fits-all‘ mentality when it comes to CMS and client sites in general. Sure WordPress is a brilliant system, but the IT department at an engineering firm may be far more comfortable writing their own HTML, sometimes we need to allow for exceptions to the rule and consider each unique user.
That said there is obviously an important case to be made for WYSIWYG editors and their place in most modern CMSs. Often the very reason you, as a designer or developer, have been employed to work on their project is because they, themselves are not capable or confident enough to manage it — that or they are simply too busy with other things.
Layers of Abstraction — what and why
In short we utilize layers of abstraction every day without realizing it, both in the process of our work and the product of our work.
Sometimes however we need to be aware of how we impose layers of abstraction on our users and clients — being aware of how others work and what level of abstraction they are comfortable with will not only improve the client and user experience we provide but also allow us to better understand them.
I hope you enjoyed this article! Feel free to chime in and leave a comment below :)