Abstraction Distraction

November 2, 2020

After posting about renovating the site and designing my own HTML and CSS, I was asked why I didn’t use something like Squarespace.

There are a number of reasons: cost, control, and simplicity.


As far as I can tell, Squarespace charges per site, which really starts to add up if you tend towards multiple relatively low-traffic sites.

Since I seem to wind up working on loosely connected but disparate projects, I already have a few sites—often just single-page sites—with the prospect for more.

So cost is certainly a factor for me with Squarespace in particular.

Control and Simplicity

A bigger reason is control and simplicity.

I can never seem to find a template that I’m happy with. I can usually find a template that’s ‘good enough’. This is what happened with the original Wordpress version of this site. It is also currently the case with the LIVE near WWDC site which is hosted by Squarespace. Both Wordpress and Squarespace have visual page builders, but of course they are based on the chosen template. I also browsed through many Jekyll templates before deciding to do my own HTML and CSS.

What I’ve found in using Wordpress or Squarespace is if I can’t find an existing template that matches what I want I have two choices: settle for what the template already does or figure out how to modify the template.

Of course, a third choice is to not use a template at all.

Put another way, the choices are:

  1. Use the abstraction as-is
  2. Modify the abstraction as needed
  3. Don’t use the abstraction, use the underlying layer


Throughout my time writing software for macOS and iOS, I’ve followed the principle of working at the highest layer of abstraction that allows you to accomplish the task at hand.

Behind that principle is the idea that you can use that higher level of abstraction to get something done without needing a deep understanding of the underlying layers.

In this case, the task at hand is getting pages to look the way I want.

Option 1 is off the table since I can never find a template that fully accomplishes that. I can’t just use a template as-is.

Option 2 is to modify the abstraction as needed. Modifying the templates requires understanding the mechanics of the templating in that particular system. It also requires a strong understanding of the underlying layer, HTML and CSS. Finally, it requires understanding how that particular template is using HTML and CSS, so that tweaks to the template don’t introduce bugs.

Option 3 requires a strong understanding of HTML and CSS and no understanding of templates at all. But, it also does require creating an entire design from scratch and figuring out how to handle things that are handled automatically on platforms like Squarespace or Wordpress, like RSS feeds.

So the first option is out because it does not provide enough control. The second option seems to combine the worst of both worlds—a need to understand the underlying layer, plus a need to understand the mechanics of the abstraction.

It’s no spoiler that I’ve gone with the third option. If I want to do any customizing at all, I need a decent understanding of HTML and CSS anyway, so I might as well put my focus there and not worry about templates at all for the moment.

When you can’t use an abstraction as-is, it loses its simplicity. A hybrid of the abstraction and the underlying layer typically combines the complexity of the underlying layer with the complexity of the abstraction. When that happens, there may be more simplicity in working at the underlying layer. That’s where my thinking has led me in this case.

Whew! That’s a long answer to a short question! •