Real-time analytics, 1000× faster: our journey from Postgres to ClickHouse

Ruben Hias
October 17, 2025
3 min read

At TechWolf we want exploring skills data to feel like a conversation: you ask a tough question ,"Who has skill X at level Y, in this org and region?”, and the answer pops up immediately so you can keep thinking.

Our Postgres setup was great for transactions but too slow for this kind of slice-and-dice analytics; joins piled up, queries took minutes, and the UI lost its flow. So we rethought the engine around speed and simplicity: a columnar model in ClickHouse that keeps the fields people actually filter by in one place, with ClickHouse doing the heavy aggregations and a light post-processing step to shape the result. The payoff is sub-second responses on tens of millions of skill facts, turning “come back later” into “what else can we learn?” Along the way we made pragmatic calls (self-hosting on Kubernetes, choosing ClickHouse Keeper, being explicit about consistency trade-offs) to keep things stable today and ready for streaming tomorrow.

What we built

  • A columnar home for analytics. We shaped a wide ClickHouse table that already contains the fields people slice by (skills, clusters, domains, org metadata). It keeps joins to a minimum and takes advantage of serious compression, some columns shrink by >200×, which is a big part of why it feels instant.
  • Split the work where it shines. ClickHouse handles the heavy distinct counts; we do the final JSON shaping with Polars. That small change alone shaved roughly 100 ms off the response time.
  • Simple sync for now, streaming ready later. Skills don’t change second-to-second, so a daily full sync is perfectly fine today, and leaves a clean path to streaming when it’s needed.
  • Self-hosted, made sane. We run ClickHouse on Kubernetes with Altinity’s operator and use ClickHouse Keeper (the modern ZooKeeper-compatible coordinator) after early pains with ZooKeeper. It’s been the steadier choice.
  • Clear about trade-offs. When we need read-your-own-writes, we enable sequential consistency and accept the small latency tax. Calling this out explicitly kept us honest about UX vs. guarantees.
  • Cost/perf that scales predictably. Benchmarks told us our workload is compute-bound and scales almost linearly with vCPUs. We landed on c7i.2xlarge: ~300 ms for single queries and <2 s under concurrency, with gp3 storage working just fine.

Read the full blogpost on Medium

Discover more
Discover more

Blog

Relevant sources

From guides to whitepapers, we’ve got everything you need to master job-to-skill profiles.

View all
View all
TechWolf engineering
Blogpost

Real-time analytics, 1000× faster: our journey from Postgres to ClickHouse

At TechWolf we re-engineered our analytics: from Postgres to ClickHouse, to turn minute-long skill queries into ~300 ms, sub-second insights across 10M+ records.
Ruben Hias
Oct 17, 2025
Real-time analytics, 1000× faster: our journey from Postgres to ClickHouse
TechWolf engineering
Blogpost

Meet LAIQA: our first step towards an event-driven architecture

Meet LAIQA—TechWolf’s new microservice that scores our AI in real time and proves an event‑driven, serverless backbone built to deliver fresher skills insights at enterprise scale.
Jul 14, 2025
Meet LAIQA: our first step towards an event-driven architecture
TechWolf engineering
Blogpost

Untangling the spaghetti: How we decoupled our legacy codebase

How TechWolf’s engineering team decoupled a growing legacy backend into modular, scalable systems — without hitting pause on product development.
Jun 27, 2025
Untangling the spaghetti: How we decoupled our legacy codebase

Using AI while interviewing at Techwolf

At TechWolf, we see generative AI as part of the modern toolkit — and we expect candidates to treat it that way too. We love it when people use AI to take their thinking to the next level, rather than to replace it.You are welcome to use tools like ChatGPT, Claude, or others during our interview process, especially in take-home assignments or technical exercises. We encourage you to bring your full toolkit — and that includes AI — as long as it reflects your own thinking, decisions and creativity.We don’t see AI as replacing your skills. Instead, we’re interested in how you use it: to brainstorm ideas, speed up iteration, validate your thinking, or unlock new ways of approaching a challenge. Great candidates show judgment in when to rely on AI, how to adapt its output, and where to go beyond it.

What we’re looking for:

Our interviews are designed to understand how you think, solve problems, and express ideas. Using AI in a way that amplifies those things — not masks them — is encouraged.

What to avoid:

We ask that you don’t submit AI-generated work without review, or present answers that you can’t fully explain. We’re not testing the model — we’re getting to know you, your skills, and your potential. If there are cases where we don’t want you to use AI for something, we’ll tell you ahead of the interview being booked.In short: use AI as you would on the job — as a smart assistant, not a stand-in.

Example: Programming with AI

In a coding challenge, you’re welcome to use generative AI to support your workflow — just like you might in a real development environment. For instance, you might use AI to quickly generate boilerplate code, look up syntax, or get a first-pass solution that you then adapt and debug collaboratively. What we’re interested in is your ability to reason through trade-offs, communicate clearly, think about complexity and iterate effectively — not whether you memorized the syntax perfectly. If using AI helps you stay in flow and focus on higher-level problem-solving, we consider that a strength. There could be some challenges where we won’t allow you to use AI - in that case we’ll tell you in advance, and will tell you why.

Heading

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Block quote

Ordered list

  1. Item 1
  2. Item 2
  3. Item 3

Unordered list

  • Item A
  • Item B
  • Item C

Text link

Bold text

Emphasis

Superscript

Subscript