Structured Logging and Observability in Azure
Moving from scattered log files to centralized, queryable telemetry with Serilog and Splunk, and the mistakes that make logs useless.
Ayodeji Adediran · 2026-06-08
Practical notes from the field on backend engineering, concurrency, and data-intensive systems. These insights distil lessons learned while building and modernizing enterprise platforms in regulated industries, focusing on the trade-offs, patterns, and failure modes that rarely make it into official documentation.
Enterprise backends live or die by their boundaries. We write about designing REST APIs that stay stable as requirements change, applying layered architecture and dependency injection so business rules remain testable, and validating input at the edge before it reaches the domain model. Topics include idempotent command handling, versioning strategies, consistent error contracts, and the disciplined use of asynchronous messaging so a single slow dependency never takes down an entire request path.
Most production incidents trace back to how code handles work in parallel. We cover threading primitives, atomic operations, and the memory model in .NET, then move up to reactive patterns with RxJS, NgRx, and signals. The goal is practical: recognising race conditions before they ship, choosing between threads, tasks, and streams deliberately, and keeping user interfaces responsive while heavy work runs in the background.
Query plans are where architecture meets reality. We write about indexing strategies, window functions, recursive CTEs, and transaction isolation, and about reading execution plans well enough to understand why a query is slow. Worked examples show how removing a hidden table scan or restructuring a join turned a multi-second report into a sub-second one, and how to design schemas that stay fast as data volumes grow.
Cloud platforms reward teams that treat infrastructure as code and deploys as routine. We cover containerisation with Docker, orchestration with Kubernetes, and the mapping between Azure and AWS services so teams can move between providers without relearning fundamentals. We also cover CI/CD pipelines, secrets management, structured logging, and observability, because a system you cannot see is a system you cannot operate.
Moving from scattered log files to centralized, queryable telemetry with Serilog and Splunk, and the mistakes that make logs useless.
Ayodeji Adediran · 2026-06-08
How to find the hidden table scans and key lookups that make a report slow, and when an index is the wrong fix.
Ayodeji Adediran · 2026-05-19
A practical decision guide for concurrency in .NET, from thread pools and async/await to reactive pipelines and back-pressure.
Ayodeji Adediran · 2026-04-02
Why retries break naive endpoints, and how to design commands that can safely run more than once without duplicating work or corrupting state.
Ayodeji Adediran · 2026-03-12