I’ve done a lot of migrations in my career.
From monoliths to microservices. From TeamCity to Jenkins. From on-prem to cloud and then back to hybrid, when we realized the cloud bill could feed a small country.
If there’s one thing I’ve learned, it’s this: migrations are always messy. Even the “successful” ones. Even the ones everyone agrees are the right thing to do.
They take longer than expected. They break more things than you planned for. They force weird workarounds you swear you’ll clean up later (but never do). And for a while, everything feels… worse.
At the end of every migration, I find myself asking the same question: Was it really worth it?
People migrate too
A recent large-scale system migration at work got me thinking about this topic.
People migrate all the time. Between teams. Between cities. Between countries. And each move brings its own set of challenges, just as gnarly and unpredictable as any software refactor.
Last year, I helped two engineers on my team relocate internationally. I saw up close how much goes into it. Visa paperwork, housing searches, cultural adjustments, the weird isolation that comes from not knowing how anything works anymore. You’re not just moving jobs. You’re moving lives.
And then, at the end of 2023, I did it myself. I left the U.S. and moved to Argentina 🇦🇷
Before that, I moved from India to the U.S. You’d think I’d be used to it by now. But no matter how many times you pack up and start over, it never really gets easier.
There’s always a phase of dislocation. Of feeling out of place. Of not knowing how to do the basic stuff.
Where’s the health check for a human?
When we migrate systems, we expect regressions. We write tests. We build fallbacks. We watch dashboards obsessively.
But when you migrate your life? There’s no alerting system to tell you you’re not okay. No metrics to measure “cultural adaptation latency.” No runbook for rebuilding a support system from scratch.
You just… wing it.
The culture changes. The language shifts. The food tastes unfamiliar. The jokes don’t quite land. You’re constantly decoding social cues, trying to figure out what’s “normal” here. You Google things like how to greet someone in Argentina without seeming awkward. (Answer: kisses on the cheek, but also context-dependent. Still confusing.)
And then, you show up to work. Camera on. Smile in place. Pretending you’re fine. Like you’ve got it all handled.
We all carry baggage
What makes people migrations even trickier is the baggage we bring with us. Some of it’s good: experience, skills, stories, perspective. Some of it slows us down: assumptions, biases, habits that worked in one context but clash in another.
You end up debugging yourself. Trying to figure out why something feels off. Why a habit that helped you thrive in one culture makes you seem weird in another.
Sometimes, you catch yourself reacting in old ways that don’t make sense anymore. Like stumbling across legacy code you forgot to delete.
And just like with code, you have to pause and refactor. Rewrite a piece of yourself. Let go of what no longer fits.
The migration doesn’t end at arrival
One of the biggest myths about migration is that it ends when the move is over. That once you’re “there,” it’s done.
But anyone who’s done this for real knows: the real work starts after the move.
That’s when you adapt. Patch. Rebuild. Learn. That’s when the hard questions come: What am I holding on to? What do I need to unlearn? Who am I trying to become here?
You build new rhythms. New routines. You look for community in unfamiliar places. You find anchors - small things that make you feel grounded again. A coffee shop. A weekend ritual. A friend who gets it.
And if you stick with it, you grow. Not in a smooth, linear way. But in fits and starts. With false starts and awkward moments. Until one day, something that felt alien starts feeling normal.
We are always mid-migration
The truth is, I don’t feel fully “migrated.” Not to Argentina. Not to the U.S. when I lived there. Maybe not even to adulthood, if I’m being honest.
And maybe that’s the point.
Just like the systems we build, we’re never really done. There’s always something shifting. Something to revisit. Something to rebuild. We’re always mid-migration, caught between where we came from and where we’re going next.
It’s more of a feature, than a bug. The discomfort is part of the growth. The uncertainty forces us to stay present. To keep learning. To stay humble.
Whether you’re moving code or moving continents, the work is never done. But if you approach it with curiosity and care, you just might end up somewhere better than where you started.
Wishing you well in your next migration! You're always insightful, no matter what the topic (and you know I know nothing about engineering).
What I like from migrations, even though they could be stressful, is that you can always learn from them.