The Home I will Likely Never Build: The Elevator

I have a house in my head. There was a time I even owned a patch of land near Santa Fe I imagined building it on. But things change, and that land now has a completely ordinary home on it, and the home in my head, not constrained by any physical reality, continues to evolve.

This home, from its inception, has had stairs. Elegant stairs, with wood and wrought iron or whatever materials the artisans choose to use.

But not everyone can take the stairs! There has to be another way to move between the levels of this house. So there’s an elevator. But the elevator can’t just be a convenience begrudgingly installed for our less-abled friends; it has to be awesome, and fun, and every much a part of the experience of living here as all the other features.

It has to be a place the kids will ride, just for the fun of it. And while the rest of the house you have seen emphasizes old-world materials and design, the elevator is a place to let technology come to the front.

When you push the call button for the elevator, you realize it is already on its way. The doors slide open, and you step in. You turn to face the closing door, as you have been long-trained to do, and as they slide shut you feel as if the elevator is made of glass. You can see the other people nearby who have decided to take the stairs for some reason. On your other sides you see the walls of the elevator shaft.

It’s obvious this is video, of course, but it’s as immersive as you can get.

For the moment you choose to go up. There is a button to push, or you can just gesture, or you can say “up”. As the elevator starts to rise, the view in the video moves with you.

But in fact, the video is moving much more quickly than you are, and between the actual levels in the house, you catch, and hear, and maybe even feel, a different, in-between level.

Perhaps, on the way up, you pass through the sky domain of Pegasus, or right through the middle of a battle from Lord of the Rings, or just a beautiful beach. When going below ground, it might be Dwarven mines, subterranean lava rivers, or Mario Brothers plumbing as far as the eye can see.

How many different virtual floors will there be? At first, only a few. But I imagine some of the kids that ride that elevator over and over to absorb every detail of those floors will eventually be inspired to add floors of their own. One hundred years after my passing, that elevator will be a hell of a ride. By then, those same kids will have upgraded the hardware and I’m a little afraid of what that elevator might become.

Which makes it very important that you can control what you see. There are probably secret ways to control which thing you see, and absolutely non-secret ways to turn off the whole feature and just get to the damn floor you asked for with minimal fuss. The elevator will remember that you do not appreciate the malarkey.

There is a potential for creepiness here, so let me address it. The elevator recognizes you, and knows if you don’t want the show or if there are particular virtual floors you dislike. The elevator will not, indeed cannot, tell anyone or anything else about you. The house in its entirety shares that philosophy. There will be no Alexa within these walls.

What I love about the elevator is that it can see the future*. It is built to be a project that grows over time, as generations add the software and the hardware to make new levels real. But those first primitive virtual floors will still be there, and the aging great-aunt can smile when a level she made goes by, even if her offspring have eclipsed her with their fancy new tools.

I have thought a great deal about how the people who build this place can leave their marks, but I need to find more ways that the occupants of this place add to that legacy. The elevator is just the first step. This building is an evolving, living monument to the people who interact with it, in particular the people who make it their home. What will you leave behind? And will it be a secret?

I’ve sent you upstairs, but while that is an awesome place, it is not especially ground-breaking. Mini-kitchen, wet bar, dumb waiter from the main kitchen, deer-antler chandelier — the place to shoot pool and get loud and watch the Big Sports Game. The view from the windows, north and south, is breathtaking (terrain allowing). But it’s the stuff any good architect could pull off. From here there is one more level up, onto the roof, closer to the stars.

You will really love it up there; the desert sky is breathtaking, but there’s more of interest if we go down.


Programming and Pocket Universes

Programming is an odd activity. The goal of the exercise is to build something completely abstract that somehow does something useful. To build this abstract network of symbols and interactions, one uses a rigidly-defined set of linguistic constructs.

On many occasions I have declared, with a level of absoluteness proportional to my blood alcohol level, that good programmers are spatial thinkers. That programming is inherently visual. But the thing is, it’s not visual at all, because physical vision is bound to the real world.

Geeks corral the abstract concepts and in their heads build fantastic frameworks that only they can “see”. The deepest part of the programming is often done with boxes and lines on a whiteboard. The implementation is just details.

But those flat whiteboard representations don’t fully capture the life of the system. And we talk about the “problem space”, which is a rough definition of the world this software is supposed to improve, and a host of other spaces that aren’t like the space Captain Kirk flies through, or even the space Martin Short navigates. It is a space entirely in the heads of the people working on the project, and maybe not even all of them see it.

But it is beautiful in its own way. That space is not bound by physical al law; it is bound by the requirements of the project: rules created by some guy in a suit who wants to sell more used cars or by some lady in jeans who wants to identify people at risk of heart attacks. For each problem the programmer builds a world, a new space, unbound by that old, “traditional” space that has finite dimensions and entropy all those other distractions.

Programmers create small, specific universes. Pocket Universes. Most of those universes would be pretty boring to you; as you listen to Jane Geek at your class reunion go on about how she streamlined insurance claims, remember this: even if Jane Geek didn’t create a new universe, she sure as hell improved on someone else’s crappy universe (there are myriad crappy universes now). She is right to feel proud. How many Universes have you improved lately?


… its own Reward

I just prevailed in a design discussion with my boss. The result: I get to implement the feature.


And Now We Wait

I have been working on a big project for the better part of a year now. It is a massive overhaul of the systems my department uses in their daily grind. Over time, those systems have become downright awful, and much of the awfulness was beyond our ability to address. A key part of the system was run by our IT department.

That system was never very good, but as our needs changed, the system… stayed the same. Any change would cost hundreds of thousands of funny-money dollars and take a year just to find out that it was going to be another year, and another bucket of funny-money. It’s budget-dollars, not real dollars, but spending on that system would take budget-dollars away from other projects.

This antique system left the rest of our tools making terrible compromises so that the missing functionality could be wedged in. It was time for a change, and I set out to replace that system we didn’t control with a better one that we did.

Hand in hand with that, is that my department’s servers are very, very old in server years. My employer, meanwhile, has created new services so departments like ours don’t need to maintain our own hardware. So this change became not just a massive software update, but a major infrastructure upgrade as well.

I underestimated just how much our applications had been warped to accommodate the crazy compromises. Unwarping them was worthwhile, but time-consuming, and none of these applications had been built with testing in mind. On top of that, the new infrastructure placed its own limits on the applications that required further refactoring.

The goal: to pull the tablecloth off the table without disturbing the dishes, then to slip in a new tablecloth.

For the first few months I worked alone, but as the Big Day approached (and receded), the rest of my team got increasingly involved. I managed to hand off the DNS and server config stuff to my boss just in the nick of time, before the complexity of that exploded in my face.

Not totally alone; I must amend. There were people in many other groups — the people creating the pretty dang awesome new infrastructure tools we are using, who went out of their way to accommodate me and help me along, even though my group is tiny in the scheme of things.

I mentioned the Big Day. That’s not quite accurate. Much like “Happy Hour from 3-7 p.m.”, the Big Day started three hours ago and lasts through the weekend. Right now a script is running, a complex bit of software I have devoted hundreds of hours to, that pulls the data out of the old databases, reconciles an incredible number of different ways the data can disagree, patches the Definitive Data together and houses them in their new, shiny home. When the script is done tomorrow morning, it will never be run again. It will be archived as a historical curiosity and that’s that.

So this evening my boss put all our systems on hold, and we began the migration. After the first giddy flurry of excitement as we all worked to make sure we were ready, I started my script. “And now we wait,” I wrote to the team.


Facebook, Continuous Integration, and Fucking Up

If you ask the engineers at Facebook (I have), they are experts at continuously evolving their platform almost invisibly to the users. If you ask the users, Facebook is really fucking annoying because shit is breaking all the time and the button that was there yesterday is nowhere to be found.

Continuous Integration is a development practice that means that each little tweak to the software goes through the tests and then goes live. It’s a powerful idea, and can massively decrease the risk of publishing updates — rather than push out the work of several geek-years all at once, with all the risk of something going terribly wrong, you push out the result of a couple of geek-weeks of effort on a regular basis, taking baby-steps to the promised land. Tick, tick, tick, with an army of robots making sure no old bugs sneak back in again.

I fully embrace this idea.

Never has a company been more proud of accomplishing this than Facebook. They crow about it around here. Also, never has a company been so bad at actually doing it. What Facebook has managed to do is annoy users with endless changes that affect how people work, while still publishing bugs.

The key is that a continuous, minor set of tweaks to software is good, but endless tweaks to how people experience the software is bad. People don’t want to be constantly adjusting to improvements. So in continuous integration, you can enhance the user experience, but you can’t lightly take away something that was there before. You can’t move things around every couple of weeks.

Back in the day when I went on Facebook more frequently, I was constantly bemused by a user interface that felt like quicksand. Meanwhile, frequent users reported a never-ending stream of bugs.

Facebook, you are the champion of Continuous Integration, and the poster child for CI Gone Wrong.