PVSR Development

A Little Analogy

I just added forward camps to Heart of the Mountain, a feature that no one has seen in the tabletop version yet. But there isn't much to say about that, and this is something that's been rattling around in my head since wrestling with some new light switches a couple months ago. I'm going to just ramble a bit to get it out so I can go back to work. This analogy might benefit from some illustrations, but I'm not sure it's worth the time to create them now. Perhaps if I reach the end of this and feel like there's enough here to fill it out further into a genuine article that can be published to a wider audience…

When we bought our first house, I had almost no experience doing construction and home repair. We rented for most of my life growing up so it just wasn't a thing. Left to my own devices, I might have been ok with doing my own painting, but I would definitely not have laid my own carpet. And the idea of replacing a furnace or stripping a bathroom down to the studs and rebuilding it from scratch? Totally laughable.

Of course, I married into a family that was the complete opposite: paying someone to fix or replace something in your house is anathema. There's almost nothing you can't do yourself with a little effort. Therefore, over the last 20 years and with the help mostly of my father-in-law and brother-in-law, I've picked up quite a bit. I've been part of multiple complete bathroom remodels by now, in multiple houses, plus many other projects. We're currently planning to raise the ceilings in a couple of rooms and that feels perfectly normal, not daunting at all. Kinda bizarre when I step back and look at it.

I've also spent the last 20+ years developing websites and web-based applications. And I started to compare the two. Inside my head, it makes a bit of sense, but it also mostly remains just some broad generalities. I'm going to try to detail it out and see whether this holds up at all.


There are three fundamental elements to a modern website: HTML, CSS, and JavaScript. But the only one that is absolutely required in order for a website to BE a website, the only one that existed when the web was first invented, is HTML. This is the basic underlying structure of your site: markup tags wrapped around the text you want to display. They transform an undifferentiated string of text into a tree of distinct elements that let the browser know how to make sense of your site. This is similar to the raw structure of a house. The framing, the walls, the ceilings and floors. Doors and windows (directly analogous to hyperlinks, maybe?). If you are old enough to remember the earliest days of the web, when sites were just plain text on a gray background, doesn't that seem a bit like Little House on the Prairie? A bunch of handmade log cabins, each one unique, each one only as good as its builder could manage on their own or with the help of their neighbors, each one offering shelter from the elements and not much more.

With the introduction of IMAGES and TABLES and FORMS, the web moved away from its log cabin days. And there was a lot that could be done to make really interesting-looking sites with some pretty useful functionality. Most of "Web 1.0" was built on plain HTML. Billions of dollars were made and lost.

If you could go back and look at the HTML of those early websites, it was a total nightmare by today's standards. A page as simple as the one you're reading now could easily have had twice as much markup as it has content. Something more complicated like CDNOW would have far more complex markup; changing a word of text on the homepage of CDNOW required a search, since that was guaranteed to be faster than trying to find that word manually among the layers and layers of nested table tags. That isn't necessarily an indictment of the people who built those sites; I was one, obviously, and even taught classes for others to learn how to do the same. It took a certain amount of skill to build something people wanted to use given the limited tools of the time. In my house analogy, I'd probably compare it to a facade. It's a structure unto itself that is meant to cover up the underlying, utilitarian building. They could be quite elaborate and beautiful, but they required a tremendous amount of effort just for the sake of appearance, and virtually no one bothers with them today when we have far better ways of making our homes look good, inside and out.


CSS controls the appearance of modern websites. If you "View Source" on this page, you'll see it's almost all just the text you're reading. The HTML that's there is minimal, just what's required to say what each piece of text means: this is a heading, this is a paragraph, this word should be strongly emphasized. Everything else about how the site looks and feels is done in styling.

CSS is everything that makes a house look like a home. It's the stucco or adobe or brickwork. It's the paint on the walls and the finish or carpet on the floors. This was how CSS started, with really basic things like changing the size and color of text. But it's also the cabinets and countertops in the kitchen – a wall of looming cabinets hiding away the food and dishes feels completely different from a bright open space with pots hanging from the ceiling. It's the light fixtures – a row of subtle recessed lights give a room a very different feel than a gaudy chandelier. It could even be extended to the yard: a tightly manicured lawn vs a meadow filled with flowers and native grasses vs a sea of asphalt with a basketball hoop.


And then there's JavaScript. This is where my analogy struggles the most, but let's see. On the web, JavaScript handles user interaction and functionality. In the "olden days", any attempt to interact with a site required sending a message back to the server. You would click a link or press a button, and the entire page would reload with the result of whatever you did – your item was added to the cart, your comment was displayed, your star rating was recorded. If there was any JavaScript on the page at all, it was probably just to make some mouse hover effect work, or possibly a pull-down menu.

Skip ahead to today. JavaScript is the most popular programming language on the planet. Web-based applications are commonplace, and can behave like native apps in so many ways. There is no JavaScript on these simple blog pages, but Heart of the Mountain is built entirely on it. But these logistics are not really relevant to my analogy. Instead, let's think a little more fundamentally about what JavaScript does.

HTML is the structure of a webpage. CSS is the appearance and feel. JavaScript, on sites that rely on it, handles functionality. It's what lets you interact with the page and have the page react to you, without having to go back to the server with every click.

What does that relate to in a house? I'm of two minds on this. On the one hand, perhaps it's the plumbing, the wiring, the ductwork, the phone line and the internet hookup. The "functional" parts of the house that work behind the scenes to make your home livable. But on the other hand, those things feel a little too fundamental to relate to JavaScript. It is perfectly possible for a modern website to exist and to function without JavaScript; this page you're reading right now is an example. A modern home without electric wiring or indoor plumbing? Not so much. Maybe those things are more like the newer elements in HTML 5, tags that didn't exist in the early days but are a given now.

So maybe instead, it's the fixtures and appliances. Sinks, tubs, refrigerator, stove. Garage door opener. Things you use directly, that you hardly even notice when they're working well but that can completely ruin your week when they work poorly or not at all. They are deeply connected to the house, and usually included when you are buying or selling a home, but they are not truly part of the house. They can be replaced, albeit with significant effort.

Kinda like all those bathrooms I've helped rebuild. Which is still bizarre when I think about it.