Hi! I’m Duncan.
I’m a distinguished engineer at Shopify.

Working in tech since 1994.
Weather radar at Thessaloniki Airport (SKG)

I tested positive this last Sunday for COVID. It’s the second time for me, and it’s a lot like the first. It comes in waves. Sometimes, I feel pretty good and my brain is clear enough to get some work done. Other times, I’m completely juiced out and just need to nap, stat.

Amsterdam on the Damrak near the Beurs van Berlage
Back door of the 1 Hotel in Toronto, Canada
Lufthansa A350 (D-AIXE) parked at Terminal 2 in Munich

Watching and reading the news this week has been hard.

Hamas deserve all the anger directed at them and more. Yet, Palestinians who aren’t members of Hamas are bearing a disproportionate amount of that anger thanks to the unavoidable reality of the situation they’re in.

Jews everywhere should feel and be safe and secure, and they aren’t. And, Israel is their shining light. But, we can’t forget that the government of Israel is made up of people with their own motivations.

And, motivations on all sides are informed by powerful interests far beyond the immediate conflict. What happens here could escalate far beyond the shores of the Levant.

Finally, the news itself is incomplete. Too much of what is happening still hasn’t made it to the surface. And too much of what is on our screens is twisted and manipulated.

I’m not religious, but I pray for humanity.

In his Rails World Keynote, David Heinemeier Hansson put up a seemingly simple slide that made something click in my head.

You see, I’ve been thinking a lot about simplicity in software quite a bit lately. And, in my day job, I’ve been railing about needless complexity. I fear, however, that most of what I’ve said gets heard as “Complexity is bad. Don’t do it.”

That’s not as helpful as I’d like it to be.

After all, it’s rare that the first draft of a bit of new code or a new feature is simple. You have to start somewhere and figure things out. Usually, it takes a few iterations before you understand something well enough to go back and reduce things back to the simplest possible solution.

What I love about David’s slide is that it acknowledges that there’s a messy middle to get through. Quite often, you have to build something complex to get to something simple. You just can’t forget to complete the cycle. You can’t just ship the first iteration and then move onto something else. You have to keep working at it until you get back to simplicity.

Based on all the alarmist YouTube videos about Apple’s latest iPhone cases, I’m terribly disappointed that my Fine Woven iPhone 15 case to hasn’t exhibited any signs of disintegration after 24 hours of absolutely normal use.

There’s always tomorrow, however.

It’s sickening what Hamas has done in their suprise attack in Israel yesterday. The fact that humans can do this to each other is beyond my comprehension. I fear for everyone, Jewish, Palestinan, and everyone else, caught up in the middle of this.

It was the turning point in a conversation that had started a few minutes after our flight departed from Amsterdam. We were on KLM and seated in the exit row. Like most, if not all, European airlines, you can’t have anything under the seat in front of you when you’re in the exit row. So, when the bell dinged, I fetched my backpack from the storage compartment above, pulled out my laptop, and put my bag onto the floor. That was my mistake.

“You have to put your bag up. The lady will come by and tell you to put it up if you don’t,” the man sitting next to me said sternly. He had the tone of voice people use when they’re policing you.

“No, it’s fine,” I replied calmly, “It’ll be OK. I won’t need to put it back up again until we’re on the descent into Berlin.”

He pointed to the space under the seats and said, “No, this has to be clear. This is the exit row. They’re going to tell you. You have to put your bag up. You can’t leave it there.”

“I’m pretty sure it’s fine,” I replied with a thin smile, trying to not let him get to me. ”But, if I’m wrong and they ask me to put it up, I’ll be happy to. Will that work?”

He snorted, narrowed his eyes, and then asked with a sneer, “Where are you from?”

Oh shit, I thought. For a split second, I thought about avoiding the question. But then I decided to lean into it. “I’m from the US,” I replied.

“Pppht. That explains a lot.”

That cracked my calm. “You don’t need to be an asshole about it,” I replied. Maybe not my best moment, I admit.

“No,” he replied, “you’re the asshole for leaving your bag down there.”

I drew a deep breath. Then I said, “Look, I’m following the rules as I understand them. I already said if the attendant wants me to put my backup up, I will. Gladly. Not a problem.”

He huffed and muttered something in Dutch that I couldn’t follow. I didn’t say anything back. Instead, opened up my laptop and tried to focus on other things.

Not long after, a flight attendant came down the aisle. He waved her down and said, “Look. This guy has his bag under the seat. It’s not allowed. Tell him to put it up.”

“No,” she replied, ”it’s OK until we need to land. Then he‘ll have to put it back up.”

He switched to Dutch and explained a bit more. I didn’t understand most of it, of course, but I caught the vibe of it. He was definitely not happy with the American sitting next to him. The flight attendant looked at me and asked in English if I understood. I said, “Not really, but I understood enough. What would you like me to do?”

She smiled, and said, “It’s OK. You can leave your bag there.”

The man in the seat next to me huffed again, turned, and looked out the window. Surprisingly, I didn’t feel any sense of pleasure at being right. There wasn’t any smug feeling of satisfaction. Instead, I was annoyed that I had let the guy get to me, even a bit.

I mused on whether I should say anything more. I really wanted to dig into the topic of why my nationality mattered. I decided against it, however. Continuing an uncomfortable conversation with a stranger in the exit row on a short flight just didn’t seem worth it.

So, I typed on my laptop and tried to let it go. When the engines cut back a bit later for the initial descent, I packed up and put my bag back into the overhead bin. And I was happy to get off the plane after we landed and disembarked.

On reflection, I wish I had asked the Dutchman if there was a reason he was concerned about keeping the floor clear, other than just following the rules. Was he an anxious traveler? Did he have a sense of claustrophobia? I doubt any of that was the case. If it were, however, I hope I would have taken the conversation in a different direction by being happy to keep my laptop down but put my bag back up.

But really, the question, “Where are you from?” and my reaction to it is where I get the real value in reflecting on this encounter. It’s such a loaded question in so many contexts. It’s a way to make assumptions about you. It’s a way to make you the “other.” And, among all the other things we need in the world right now, it’s a whole lot less of making people the “other.”

Earlier this year, one of my colleagues at Shopify noted that I keep asking for simplicity in our software and how we run our systems. He’s right. I do. Then, they dropped a bomb of a question: “What exactly do you mean by simple? Simple for who?”

I gave a quick answer that worked in the context of the conversation. However, it wasn’t really satisfying for either of us. It was too specific. It wasn’t something that could be more widely applied.

It was late, and we both had other places to be. So, I said that I’d give it some thought and come back with a better answer.

There are multiple definitions of simplicity. Even if you chose just one, it’s a quality that’s hard to measure and quantify. It’s even harder to achieve, especially when you’re working on large, complex systems at scale. On the other hand, it's entirely possible to make something too simple and force complexity into other parts of a system.

When I saw my colleague again, I had a better answer.

The simplicity I’m looking for isn’t just characterized by a lack of complexity. It’s also not just about minimalism. And it’s not about dumbing something down. Instead, its primary attribute is about being understandable to somebody well-versed in the craft.

When a skilled software developer approaches a project, it should be clear what the major components are and how they work together. The application’s state is stored here. There’s a queue used to decouple operations. Over there is a set of templates used to render output, and so on. Maybe the state is using a database they haven’t used before. And it’s possible that the templates are a kind they haven’t seen yet. But it’s obvious where to start, and what bits of knowledge need to be acquired in order to proceed.

That’s the simplicity that I’m looking for.

It helps manage complexity. It improves communication, allowing for more collaboration. It simplifies maintenance and reduces learning curves, especially by other people in the future that didn’t work on the original. It helps avoid over-engineering and keeps the focus on solving the actual problem. And, it helps scalability because it’s easier to understand how a system will behave as it scales.