Experience
9 years across Java/Spring and TypeScript/Node.js/NestJS backend systems. Presented here by focus area rather than as a company-by-company timeline — each area links to the Projects or Case Studies where it shows up concretely.
Backend API Design & Development
Designing and building REST APIs and backend architecture across Java/Spring and TypeScript/NestJS services, with an emphasis on making boundaries and contracts explicit before implementation.
- API and service boundary design for systems that connect multiple internal and external consumers
- Backend architecture for both greenfield services (see Projects) and systems with existing constraints
Enterprise System Integration & Distributed Data Flows
Connecting systems that were not designed to talk to each other, and keeping the resulting data flow understandable, observable, and recoverable when a step fails.
- Mapping and transformation between systems with different data models
- Designing for partial failure: retry, dead-letter handling, and replay rather than best-effort delivery
- See RelayHub (Projects) and the Case Studies for concrete examples of this focus area in practice
Transaction & Data Consistency
Reasoning about transaction boundaries and consistency guarantees in systems where a single business operation spans multiple services or data stores.
- Identifying race conditions and inconsistent-state windows in asynchronous processing paths
- Choosing between strict consistency, eventual consistency, and compensating actions based on the actual failure modes involved
Authentication & Identity Integration
Integrating authentication and identity across services using OAuth2, OIDC, and SAML.
- OAuth2/OIDC integration for user-facing services (see English Core Speaking, Projects)
- Session and identity boundaries between a frontend, backend API, and third-party identity providers
Batch, Asynchronous & Event-driven Processing
Building processing pipelines — batch, asynchronous, and event-driven — that stay correct and debuggable as scale and failure scenarios grow.
- Event-driven pipelines with Kafka as the backbone (see RelayHub, Projects)
- Batch processing constraints when legacy state and new configuration must coexist (see Case Studies)
Performance Bottleneck Analysis & Production Troubleshooting
Diagnosing real production incidents — not only reproducing failures locally, but verifying root cause and fix against the actual running system.
- Root-cause analysis for intermittent, timing-dependent, and load-dependent failures
- Distinguishing a fix that passes a test from one that is verified against production behavior
AI / LLM API Integration
Integrating external AI/LLM APIs into product backends as one more external dependency to design around — with its own latency, failure, and cost characteristics.
- External AI/LLM API integration for a user-facing evaluation feature (see English Core Speaking, Projects)