A few stories from my career.

Real situations I lived through, the problem, the call I made, and why.

From a Monolith to a Distributed Architecture, Without Rewriting the Product

A monolith was the right call at first, until modules with very different needs started competing for the same infrastructure. I introduced a providers layer to migrate responsibilities into microservices without rewriting the product or stopping development, focused on fault isolation: a secondary service going down should not take the core with it.

Impact

~10 microservices, zero rewrite

When the Platform Had to Handle 20× More Traffic

During the pandemic, demand and promotional campaigns started pushing our infrastructure far beyond what a single-instance monolithic backend could handle. Instead of migrating to Kubernetes or rewriting the infrastructure, I distributed traffic across multiple instances behind Apache as a load balancer and DNS-level distribution on the frontend, multiplying user capacity by 20× in a very short period.

Impact

~20× more user capacity

Designing a Safe Handoff Between Two Development Teams

A client built its own IT team and wanted to take over maintenance of a product we built in a CMS-dependent monorepo. I designed a risk-based classification system, a synced maintenance branch, and Docker/GitLab CI/CD preview environments so two teams could move in parallel without becoming a bottleneck.

Impact

Progressive handoff, zero bottleneck

Standardizing Development in an Era of AI-Generated Code

When we moved from low-code platforms to every developer having full control over the code with AI assistants, we lost the invisible limits that kept projects consistent. I built starters and internal tooling with automatically verifiable guardrails, and turned their evolution into a process the team owned together.

Impact

Starters as an internal product, adopted team-wide