Migrating from feature to structure

I’ve recently notice that I frequently use a very productive programming pattern. Usually I just take it for granted, but today I’ve decided to call it out, in case it might be useful to others.

When I’m developing new capabilities, I think of them as “features” — things that I’m adding to the outside of the system. They are sort of like adornments, add-ons, things that make the system more powerful or fun to use, but aren’t essential.

Working this way allows for very rapid iteration. If you aren’t changing the core structure of anything, then you can make changes very fast, and you can switch between changing code and the resultant change in experience pretty much instantly. Not needing to “recompile the system” is a big win.

But eventually (in a good scenario) the feature grows powerful and stable enough that it starts to feel like a core capability of the system itself. Then it’s time to move things inward.

Rather than continuing to present the new capability as a feature, after it has matured enough I move it into the core part of the software. So now instead of just being available as an add-on, it becomes available everywhere.

Over time this way of doing things results in an ever more powerful set of tools. And it does so without the risk of suddenly breaking things by constantly adding new stuff that tinkers with the inner core of things.

I suspect that a lot of people who develop code use the same pattern. I wonder whether there is a name for it.

The Casablanca problem

If you show the iconic film Casablanca for the first time to somebody in their 20s, you might be disappointed in the response. From their point of view, it just looks like a myriad other cinematic romances.

But back in 1942, that was very much not the case. Casablanca invented much of cinematic storytelling language that we now take for granted. So much so, that it’s hard to remember that before that film came out, nobody had ever seen anything quite like it before.

You’ll run into the same problem if you try to show Hill Street Blues to a young person who knows nothing about it. It just looks like everything they grew up seeing.

But back in 1981, Steven Bochco and company were literally creating something that nobody had ever seen before. In that year, because of that TV show, the collective culture changed, and it has never looked back.

Yet it’s hard to appreciate that now, because we’ve been watching Hill Street Blues knock-offs for more than forty years. We’ve reached the point where there are now even knock-offs of those knock-offs.

I wonder how many such cultural artifacts there are out there — great classics that changed everything, to the point where they no longer seem innovative to the uninitiated. Maybe we could compile a list.

Like that scene from Bugsy

There is a scene in the Barry Levinson film Bugsy that I absolutely love. Warren Beatty, as the title character, is dashing back and forth from one room in his house to another.

In one room, he is the ruthless mobster Bugsy Siegel. In the other, he is a devoted husband and father, spending quality time with his family.

Nobody except him knows that any of this is going on. And we see his growing desperation as he tries to multitask without slipping up.

Every time he moves between one room and another, he needs to completely transform. At every moment he needs to keep track of who he is supposed to be, and where the conversation left off the last time he left the room.

My day today at work reminded me of that scene. I had a visiting student, a meeting with a Ph.D. student, a group research meeting over Zoom, and several other Zoom meetings to look at other people’s demos and to establish research connections with other faculty. Several of those meetings overlapped, even though they weren’t supposed to.

For much of that time I was playing phone tag with the secretary in a doctor’s office, while also trying to cancel some plane flights before it was too late. Each of these meetings and events asked me to put on a different hat, so to speak.

I still love that scene from Bugsy, but now I also like how it helps me to appreciate one of the best things about movies: They are not real.

Working from a coffee shop

This evening I find myself working in a coffee shop. Just me and my notebook computer and Wifi and some random strangers.

You’ve probably been there too. There is something oddly random about it. People come and go, and other folks’ life plays out before you in little snippets.

Mostly I focus on what I’m working on, but every once in a while I notice the sweet young couple on their first date, an old man wandering around looking a little sad and lost, the students hunched over their laptop computers, intent on making the next deadline.

I am not sure whether these various events are helpful to my process or not, as I try to get my own work done. But whatever it is, I’m enjoying the vibe.

Widget Wednesdays #12

As I mentioned yesterday, this week’s widget is an experimental vocabulary builder.

It’s as simple as it can be. You are presented with ten words that exist in the English language. If you are confident that you know that word, check it off, and that word won’t appear again.

I didn’t bother implementing a server for this, because it’s just a design experiment. So your checked-off choices only appear in your browser’s local cache.

This means that every time you clear the cache, it will forget what words you’ve checked off. If I make this into a more permanent thing, I’ll get around to implementing a proper server side.

You can try it here.

Vocabulary

Playing the NY Times Spelling Bee has gotten me much more interested in words I’ve never heard of. For example, the other day I found all the words except “lolling”, which I had never heard of.

Every time I miss a word, I look it up, and learn all sorts of fascinating things I had not known. So it occurs to me that it would be interesting to go about building my vocabulary in a more systematic way.

I’m thinking of writing a little program that presents me with random words, and then lets me check off the ones that I already know. If I don’t know some word, then the program will keep testing me on that one until I get it right.

If I manage to get this implemented by tomorrow, then I’ll put it on line as for this week’s Widget Wednesday. We’ll see!

Future meeting

You walk into the room, shake hands with everyone. Somebody offers you a coffee, which you gladly accept.

The meeting goes really well. People take turns scribbling their ideas on the whiteboard, refining the message and the strategy.

At the end of the meeting, you say goodbye to everyone. Then you walk across the hall to your bathroom and take a refreshing hot shower

Because you never left your home, and neither did the other people in the meeting. It was all done remotely, using future technology.

How long before this is a reality? Maybe not that many years from now.

Virtual vacation

Vacations to beautiful tropical resorts can be very difficult. You have the problem with air travel, of immigration, and, just in general, the hassle of getting to the point where you are finally sitting on the beach and relaxing. And the expense tends to be prohibitive for most people.

I wonder whether we will ever get to the point where people will generally opt for a shared virtual reality experience of such vacations. Of course it doesn’t replace the real thing, but for the purposes of relaxation and getting a break from daily life, at some point it might be good enough to be a viable option.

We are certainly not there yet. But I suspect that we are getting to the point where it’s a reasonable thing to at least talk about.

In praise of long flights

I used to think of airplane flights as a waste of time. But then I discovered the wonders of being alone with nothing but a notebook computer.

Before getting on the flight, I generally decide on a programming project I’d like to work on. The major consideration is the time of the flight.

Short hops are good for quick tasks. But those long flights — like the six hour hop between NY and California — are pure gold.

You would think that being stuck in a cramped little seat would be a problem. But the very unpleasantness of an airline flight makes it even easier to tune everything out.

When the world around you is not fun, but the world on your screen is filled with endless possibilities, it’s easy to focus on the task at hand. And where else can you find six hours when you can be sure that everybody will leave you alone to get some programming done?

When will it no longer matter where you are?

Imagine you are having a business meeting with somebody. You know that they are somewhere on the planet, because people generally aren’t found anywhere else, but you aren’t really focused on where.

It might be the middle of the night for one of you. But neither of you is really thinking about that, because for both of you this turns out to be a great time to meet.

How soon will we get to the point where location on the planet simply stops mattering, for most business purposes? The question is important because the completion of this trend will mark a fundamental shift in the world’s economy.

After that, your economic value will no longer depend on where you are. That will profoundly expand your choices of where to live, what kind of climate you prefer, where and how to raise your kids.

When will it no longer matter where you are?