I joined my current AI startup 18 months ago. Fully remote, 12-person engineering team spread across 7 countries. We ship fast, execute well, have strong technical foundations.
And I’ve never met any of them in person.
Not once. No offsite. No team gathering. Never shaken hands, never grabbed coffee, never seen each other outside a Zoom rectangle.
For the first year, this felt fine. We were productive. Code shipped. Infrastructure scaled. All the metrics looked good.
But something was missing. We had strong execution, zero team cohesion. We didn’t really know each other. Slack conversations were purely transactional. No one shared what they were working through. No one asked for help until they were completely blocked.
Here’s what made me notice: I switched jobs and realized I had no one to say goodbye to. No relationships. Just professional acquaintances who happened to share a GitHub org.
The Traditional Remote Advice
All the remote work playbooks say the same things:
- Virtual coffee chats (scheduled 30min “get to know you” calls)
- Team building games (remote trivia, online escape rooms)
- Async watercooler Slack channels (#random, #pets, #music)
I tried all of it. The engineers hated it.
Virtual coffee chats felt forced. We’d run out of things to say after 10 minutes. “So… how’s the weather?” is awkward enough in person. On Zoom it’s excruciating.
Team building games were even worse. Low attendance, people multitasking, nobody engaged. Asking engineers to play Pictionary after a full day of work doesn’t build culture, it builds resentment.
The watercooler channels went silent. Occasionally someone would post a meme, get 3 emoji reactions, then nothing for weeks.
What Actually Worked
I was ready to give up on team culture when something shifted. We built culture accidentally, through how we worked, not through forced social time.
Here are the 5 practices that actually created connection:
1. “Learning in Public” Slack Channel
Started as a place for TILs (Today I Learned), evolved into something deeper. Engineers share:
- Experiments that failed
- Bugs they spent hours debugging
- New tools they’re exploring
- Questions they’re too embarrassed to ask elsewhere
The vulnerability created trust. When our senior ML engineer posted “spent 4 hours debugging why my model was predicting garbage, turns out I had the labels backwards,” it gave permission for everyone else to share their struggles.
Sharing the messy process, not just polished results, built psychological safety.
2. Pair Programming Rotation (Actual Building Together)
Not just code reviews. Not just pairing on a bug. Actually building features together.
Every two weeks, random pairing assignments. Two engineers, one feature, build it together via screen share over 2-3 days.
This forces:
- Learning each other’s work style
- Navigating disagreements in real-time
- Building something collaboratively vs handing off work
Side effect: Knowledge spread organically. No more “only Sarah understands the auth system.”
3. “Ask Me Anything” Personal Docs
Everyone maintains a doc: “Ask me about X.” Lists what they’re expert in, what they’re learning, what they’re happy to help with.
Examples:
- “Ask me about Kubernetes internals, Brazilian food, mechanical keyboards”
- “Ask me about LLM fine-tuning, horror movies, sourdough baking”
Mixed professional + personal. Gave people entry points for conversations beyond work tasks.
4. Demo Days with “Behind the Scenes”
Bi-weekly demos, but not polished product demos. Raw walkthroughs of work-in-progress.
“Here’s the feature I’m building. Here’s where I’m stuck. Here’s the ugly hack I did to get it working. Here’s what I’m refactoring next.”
Showing the messy middle, not just the finished product. People asked questions, shared similar problems, offered solutions.
Built respect across the team. You see someone wrestle with a hard problem and you appreciate their craft.
5. Async Book Club (Team-Chosen Topics)
Not company-mandated reading. The team votes on technical books/papers they actually want to discuss.
Last 6 months:
- “Designing Data-Intensive Applications” (Martin Kleppmann)
- “A Philosophy of Software Design” (John Ousterhout)
- “Staff Engineer” (Will Larson)
Weekly async discussion in Notion. People drop thoughts, questions, disagreements. No live meeting, no pressure.
Creates shared context. Inside jokes emerge. We now reference “Kleppmann’s rant about two-phase commit” and everyone knows what that means.
The Shift
Culture emerged from doing work together, not from avoiding work to “do culture.”
Remote team culture isn’t office culture via Zoom. It’s a different thing entirely. It’s built through:
- Shared struggle (pair programming, debugging together)
- Shared learning (book club, learning in public)
- Shared context (demos, AMA docs)
We still don’t have perfect cohesion. Some people are still quiet. Some pairs don’t gel. But it’s better than the transactional emptiness we had before.
My Questions
What’s worked for your remote teams? What’s failed spectacularly?
Specifically curious:
- How do you build trust without face-to-face time?
- What async rituals have created real connection?
- Has anyone actually made virtual social events work? (genuinely asking, maybe I’m doing it wrong)
- For folks who’ve done in-person offsites - does it actually help long-term, or is it a temporary boost?
Remote culture is hard. I’m still figuring it out.