Machine learning only delivers real value when it is treated as an end-to-end system, not just a model.

Building reliable, production ML systems across classical ML, GenAI, and MLOps.

My Journey

Phase 1

Foundations

My interest in machine learning began during my bachelor's in computer engineering around 2017–2018. While taking Andrew Ng's early Coursera courses, I realized that ML wasn't just another technical tool for me, it was a way of thinking about systems, uncertainty, and decision-making. That realization pushed me to go beyond coursework and continuously deepen my understanding of the field.

As my curiosity shifted from individual models to how they behave in complex, real-world environments, I decided to pursue a master's degree in Artificial Intelligence & Robotics at the University of Padua.

Phase 2

Research

At Padua, autonomous driving systems became my main focus. I joined a research lab working on perception for autonomous vehicles, where I was exposed not only to cutting-edge approaches, but also to a much harder question: how do we trust these systems under changing conditions?

This question shaped my master's thesis, which focused on building reproducible and systematic evaluation pipelines for lane detection. Through this work, I learned a lesson that has stayed with me ever since: strong models are not enough. Without rigorous, repeatable evaluation, performance numbers are fragile, misleading, and often irreproducible. Evaluation is not an afterthought, it is the foundation of reliable ML systems.

Phase 3

Production

After graduating, I moved into industrial machine learning at CNH Industrial, where these ideas were tested in production. Working on deployed perception systems made the gap between research and reality very concrete. I learned how easily models degrade outside controlled settings, and how much discipline is required to keep them reliable over time. Monitoring, failure modes, latency constraints, and clear operational boundaries became just as important as accuracy.

Today, I continue this systems-first approach at Pipedrive as a Machine Learning Engineer, working on large-scale, production ML and Generative AI systems that serve real customers at scale. My role spans the full ML lifecycle, from problem framing and offline evaluation to deployment pipelines, CI/CD, monitoring, alerting, and long-term reliability. Operating in a multi-tenant, product-driven environment has further reinforced my belief that ML systems must be designed with scalability, observability, and reproducibility in mind from day one.

Most ML failures I've seen weren't caused by weak models, but by weak systems. The system didn't know when to abstain. Edge cases weren't considered. Failure modes weren't detected. That's why I build systems and write about them—to help others avoid these mistakes.

How I Think About ML Systems

Evaluation before optimization

Without rigorous, repeatable evaluation, performance numbers are fragile and misleading.

Systems over models

Machine learning only delivers real value when treated as an end-to-end system, not just a model.

Failure modes over benchmarks

Systems must fail visibly, not silently, and degrade gracefully when they can't meet their guarantees.

Observability over assumptions

The hardest problems aren't about model performance. They're about systems that detect failures early and give clear signals when something breaks.

Technical Focus

Model Development

I primarily work in Python, focusing on PyTorch-based systems, with production deployments in cloud environments. Most of my recent work is with large language models and retrieval-augmented generation, but I've worked across classical ML, computer vision, and industrial applications.

MLOps & Infrastructure

Beyond model development, I work on the full ML stack: MLOps pipelines, CI/CD for ML systems, monitoring and alerting, evaluation frameworks, and reliability patterns.

Production Systems

Production debugging for ML systems takes different thinking than traditional software. I focus on systems that detect failures early, give clear signals when something breaks, and degrade gracefully.

Want to see how I apply these ideas?

Explore my projects, read about systems thinking, or check out my writing on building reliable ML systems.

Currently

ML Engineer at Pipedrive

Tallinn, Estonia

Connect