Available autumn 2026 · Open across the EU
illia@eu ~ % whoami
Mid .NET Engineer

I build high-load .NET systems.

Backend software engineer at EPAM, building high-load .NET microservices for a FinTech platform. C#, clean architecture, and systems that hold up in production.

Illia Kotvitskyi — .NET software engineer
illia@eu:~ $ cat profile.jsonengineer
EXPERIENCE
19 mo
shipping production .NET at EPAM (FinTech)
SYSTEMS
High-load
backend microservices on a high-traffic FinTech platform
CREDENTIALS
AZ-900
Azure certified · English C1 · EU-ready from autumn 2026
cat approach.md

How I work.

01

Own it end to end

Design, build, ship, and support in production. I care about the code after it merges — the incident, the fix, the follow-up.

02

Architecture with intent

DDD, CQRS, and event-driven where they earn their keep, not by default. I can walk you through why a call was made and what it cost.

03

Reliability is a feature

Profiling, observability, and root-cause fixes — so problems get caught before a user ever feels them.

04

Lift the team

Mentoring and onboarding juniors, sharing patterns, and working closely with product and reliability to ship the right thing.

git log --impact

Selected work.

The short version is on my CV. Here's the same work with the reasoning left in — open any item to go a level deeper.

Fixed a high-load reliability bottleneck

Diagnosed and resolved a performance issue in a high-traffic .NET authentication service — tuned it under load and shipped the fix, turning recurring failures into stable sub-second responses.

How it worked

The service buckled at peak load. I reproduced it under representative traffic, profiled down to the root cause, tuned the configuration, and validated the fix before promoting it to production. One of those problems where the change is small but finding it is the whole job — and the payoff is users never noticing the thing that used to break.

.NETperformancereliability

Built internal tooling the on-call team adopted

Proposed and built a CLI that turns scattered monitoring signals into structured, review-ready incident summaries — adopted across the team and cutting early-triage time.

How it worked

On-call triage was slow because the signal was spread across dashboards and logs. Nobody was assigned to fix that, so I proposed a small CLI, built it, and drove its adoption across the team. It pulls the picture together into one structured summary — a rough edge smoothed for everyone who carries the pager.

initiativetoolingDX

Designed cross-service eventing with a safety net

Introduced event-driven communication between services with an auto-retry dead-letter path — reliable delivery that replaced manual re-runs, later reused by other teams.

How it worked

Services needed to react to each other’s state changes without brittle coupling. I designed event-driven messaging with an auto-retry dead-letter path, so a transient failure retries itself instead of paging someone at 2am. The design was clean enough that other teams on the platform picked it up.

event-drivenRabbitMQarchitecture
ls ~/stack

What I build with.

Core / .NET
C#.NET Framework.NET 8ASP.NET CoreEF CoreDapper
Databases
SQL ServerT-SQLPostgreSQLMongoDBRedis
Messaging & Integration
RabbitMQMassTransitSignalR
DevOps / Observability
DockerAzureJenkinsTerraformPuppetDatadogELKGit
Frontend
TypeScriptAngular
./open lanka

Architecture I own end to end.

Modular monolith · .NET 10

Lanka

DDD · CQRS · event-driven · .NET Aspire

A backend platform that connects influencers with brands to run marketing campaigns. I built it to take modern .NET architecture end to end: a modular monolith with strict module boundaries, DDD aggregates, CQRS through MediatR, and event-driven cross-module messaging over RabbitMQ with Outbox/Inbox. Polyglot persistence — PostgreSQL, MongoDB, Redis — with EF Core 9 and Dapper, wired together under .NET Aspire and OpenTelemetry. A modular monolith by choice: clear module boundaries and independent evolution, without the operational cost of a distributed system.

.NET 10Modular MonolithDDDCQRSRabbitMQAspire
view source on github →