Backend · Networking · Game Systems

DANI game engineer

Backend & game systems engineer with 8+ years building live services at massive scale. Lead server engineer on Pokémon Go at Niantic. Specializing in real-time multiplayer, networked systems, and the engineering that makes millions of players feel like they share the same world.

8+
Years Experience
Players Served
0ms
Lag Tolerance
🌿

I build systems that
scale to millions

I'm a backend and game systems engineer with 8 years building live services at internet scale. My most recent role was Lead Server Engineer on Pokémon Go at Niantic — responsible for the infrastructure powering millions of concurrent players globally.

I specialize in the intersection of distributed systems and real-time multiplayer. Latency, concurrency, fault tolerance, and the unique challenges that only emerge when millions of people share the same simulated world simultaneously.

Outside of engineering I keep several freshwater tropical aquariums — a hobby that rewards patience, systems thinking, and an obsessive attention to invisible variables. It turns out building stable ecosystems and stable live services have more in common than you'd expect.

Languages
C++ C# Go Python Java
Networking
TCP/UDP WebRTC RakNet gRPC WebSockets
Infrastructure
Distributed Systems Kubernetes GCP Redis Kafka
Game Tech
Unity Unreal Mirror Networking NetherNet Client Prediction

Where I've
shipped

Lead Server Engineer
Niantic · Pokémon Go
2020 — 2024

Led server engineering for one of the world's most played live-service mobile games. Owned real-time gameplay systems serving millions of concurrent players. Drove architecture decisions for scalability, reliability, and live event infrastructure.

C++ Go Distributed Systems GCP Real-Time
Senior Backend Engineer
Previous Company · Product
2016 — 2020

Add your description here.

Tag 1 Tag 2
↓ Download Resume

Things I've
written

id_allocator.cpp
C++
// Compact uint32 ID allocator
// min-heap + sequential counter
class IDAllocator {
  uint32_t next_id = 0;
  priority_queue<uint32_t,
    vector<uint32_t>,
    greater<>> freed;
public:
  uint32_t allocate() {
    if (!freed.empty()) {
      uint32_t id = freed.top();
      freed.pop(); return id;
    }
    return next_id++;
  }
  void release(uint32_t id) {
    freed.push(id);
  }
};
prediction.cs
C#
// Client-side prediction
struct PlayerSnapshot {
  public uint    tick;
  public Vector3 position;
  public Vector3 velocity;
  public InputCmd input;
}

void Reconcile(PlayerSnapshot srv) {
  var local = history[srv.tick];
  if (Drift(local, srv) > threshold)
    Rewind(srv);
}
grid_search.py
Python
# BFS flood-fill — finds all connected regions on a 2D grid
from collections import deque

def flood_fill(grid: list[list[int]], r: int, c: int) -> set[tuple]:
    visited, queue = set(), deque([(r, c)])
    while queue:
        row, col = queue.popleft()
        if (row, col) in visited: continue
        visited.add((row, col))
        for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:
            nr, nc = row+dr, col+dc
            if 0 <= nr < len(grid) and 0 <= nc < len(grid[0]):
                if grid[nr][nc] == grid[r][c] and (nr,nc) not in visited:
                    queue.append((nr, nc))
    return visited
View All on GitHub →

Talks, demos &
moments

🎬Talk / Video
🖼️Screenshot
🎬Demo
🖼️Screenshot
🖼️Photo
🎬Video
Replace placeholders with <img>, <video>, or <iframe> embeds.

Let's
talk

Open to senior and lead engineering roles in the game industry — real-time networking, live services, and multiplayer systems.

✉ you@rotala.dev LinkedIn →