← All posts

Twenty-Five Years

· 4 min read

I started programming in 2000. That makes this my twenty-fifth year.

Three years ago I wrote a list of twenty-two things I’d learned. Reading it now, I agree with almost all of it, and I notice how confident it sounds. Lists are like that. This time I want to write something a little different: not rules, but the things that seem truer to me now than they did when I was younger.

The tools change. The problems don’t.

When I started, we deployed by copying files over FTP. Since then I’ve lived through version control, the cloud, smartphones, JavaScript frameworks rising and falling like empires, and now machines that write code. Each one felt like the end of programming as I knew it.

Underneath, the problems were always the same. Understand what people actually need. Build something simple enough to change. Make it reliable enough to trust. Communicate clearly with the people around you. Every generation of tools makes some of this easier and none of it unnecessary.

Simplicity is a form of kindness.

I used to argue for simple systems because they were efficient: cheaper to run, faster to change. I still believe that. But I’ve come to see simplicity more as a kindness - to the colleague who will maintain the code after you, to the user who has to understand the product, to your own future self at two in the morning. Complexity is often a form of showing off. Simplicity is a form of care.

Being right matters less than I thought.

When I was younger, I wanted very much to be right - in code reviews, in architecture debates, in arguments about tools. I was often right, and it often didn’t help. What helped was being useful, being trustworthy, and being someone people wanted to work with again. Being right is a small thing. Being good to work with is a large one.

The work is never only the work.

Some of the best years of my career weren’t about the technology at all. They were about the people. The army unit where I learned to take responsibility far beyond my age. The startup where we tried something hard and mostly failed and learned everything. The many clients, over many years, who trusted me with something that mattered to them. The network of senior developers I’ve been lucky enough to help bring together. The code is mostly gone or forgotten. The relationships remain.

Rest is part of the craft.

I spent too many years believing that more hours meant more output. Sometimes it did, for a while. But the best ideas I’ve had came on walks, in the shower, on a Shabbat afternoon with nothing scheduled, on a long trip far from a keyboard. A mind needs space to see clearly. That’s not a luxury. It’s part of the job.

The machines are a gift, if we receive them well.

I’m more excited about software now than I’ve been in years. The tools available today would have seemed like magic to me in 2000. They take away so much of the drudgery and leave more room for the parts I love: thinking, designing, understanding people, making things that matter.

But a gift can be received well or badly. Received well, these tools make us more capable and more free. Received badly, they make us lazier and more confident than we should be. Which one happens is up to us, every day.

What I hope for the next twenty-five

I hope to keep learning. I hope to keep being wrong, and noticing, and changing my mind. I hope to help some younger people the way older people once helped me. I hope to keep making small, useful things, and to do it with care.

And I hope, honestly, to remain a little amazed. After all these years, I still feel it when a few words typed into a file become something real in the world. I hope I never stop feeling it.

Twenty-five years in, I know less than I thought I would, and I’m grateful for more than I expected.