I used to love coding on trains.
I would look for one of those seats with a table, open my laptop, and disappear for a few hours. Sometimes I would even buy a first-class ticket. If it was only ten or twenty euros more, it was worth it. A good session could pay for the difference many times over.
Planes worked too. Not because either was particularly comfortable, but because the internet was terrible. Sometimes it didn't work at all. There was nowhere else to go and nothing else to do. It was just me, my laptop, and whatever problem was in front of me.
I remember one flight when I got stuck on something related to Devise, the Ruby authentication gem. I no longer remember the actual problem. With an internet connection, I probably would have found the answer in a few minutes. I would have searched Stack Overflow, read the documentation, copied something, and moved on.
But I was on a plane, so I opened the gem instead.
This is one of the things I love about Ruby. When something behaves in a way you don't understand, you can open the dependency and read the source. So I started digging. I traced the code, followed calls through the gem, formed theories, proved myself wrong, and tried again. Eventually, I understood what was happening and fixed the problem.
It felt amazing.
The funny thing is that this deep understanding of Devise was probably useless. I don't remember needing it again during the rest of my career. The value wasn't some knowledge that paid dividends years later. It was the satisfaction of having struggled with a problem and beaten it.
I enjoyed that feeling so much that I started looking for it intentionally. Trains and planes became some of my favourite places to work. Bad internet wasn't an inconvenience. It was part of the setup. The constraint created the flow.
Today, I got on a train expecting the same thing. I found a seat, opened my laptop, and had a few ordinary tasks to do. I needed to inspect part of a codebase to answer someone's question. I also had some dependency updates waiting for me.
Perfect work for an AI coding agent.
The connection was terrible. Frontier models live in the cloud, and the cloud might as well have been on another planet. I could have inspected the code myself. I could have updated the dependencies myself. I still know how to do those things.
Instead, I stared at the screen.
Why spend the journey doing something manually when I could do it much faster as soon as the connection returned? Refusing to use AI would not have made the work more meaningful. It would have been an artificial challenge, a sandbox where I invented rules just to prove that I could still play by them. That might be an interesting exercise, but it makes little sense when I'm trying to get actual work done.
I don't want to give up this new way of working. With AI, I can ship more and attempt things with a scope that would previously have felt unreasonable. The constant movement between design and implementation has become much faster. I can explore the shape of a solution, reject it, and try another without spending hours implementing each version first. I spend less time worrying about every small detail and more time setting direction.
The satisfaction is different. I used to finish a flight proud of the one stubborn problem I had solved. Now I finish a session proud of how much I managed to build.
My flow used to live inside the code. Now it increasingly lives in the conversation about what shape the code should take.
And that conversation requires an internet connection.
Perhaps one day every train and plane will have perfect Wi-Fi, and I will happily work on them again. But the old ritual will not return. The constraint that made it possible is no longer real. Once you know a better way of working exists, pretending otherwise feels exactly like pretending.
This isn't a protest against AI. I made the trade willingly, and I would make it again. I just didn't realise that the trade included something I loved.
So this is a requiem for the offline programmer I used to be. The one who could open a laptop somewhere between two cities, disappear into a problem, and look up three hours later feeling like he had conquered something.
I don't want him back.
But I will miss him.