Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
Microservices in Production: Distributed Tracing, Resilience and Independent Deployment
Running microservices in production takes three things: distributed tracing that follows a request across services (with W3C traceparent), timeouts, retries and circuit breakers thought through at the service level, and independent deployment of every service with its own pipeline, backward compatibility and contract tests. Real trace output with .NET's Activity, retries per layer turning into 64 requests, the trap of tying readiness to downstreams, and where can-i-deploy fits in CI.
Service Contracts and Versioning: Expand-Contract, Tolerant Reader and Consumer-Driven Contract Tests
Whether a change is breaking can't be decided from the provider's code alone; you need to know what consumers read, so consumers act as tolerant readers, the provider splits breaking changes into expand-contract steps, and consumer-driven contract tests show whom a change would break before it is deployed. Real Pact verification output between a TypeScript consumer and a .NET provider, Deprecation/Sunset headers, and the cost of versioning at the service level.