How to Enable Engineering Teams to Share Knowledge
Practical strategies for building a knowledge-sharing culture in engineering teams, from structured lunch-and-learns to lightning talks.
// thoughts
Deep dives into .NET, AWS, DevOps, and cloud architecture.
Practical strategies for building a knowledge-sharing culture in engineering teams, from structured lunch-and-learns to lightning talks.
Three key lessons from interviewing over 300 engineers: conciseness, preparation, and clarity, with exercises to improve your interview skills.
Learn how to implement the Factory and Abstract Factory design patterns in C#/.NET with real-world examples for flexible object creation.
Learn how to implement the Decorator design pattern in C#/.NET to add behaviours dynamically, with examples using both manual and DI approaches.
Implement the Singleton design pattern in C#/.NET using Lazy<T> for thread safety, plus modern approaches with dependency injection containers.
Practical strategies for reducing your AWS bill without sacrificing performance. Covers reserved capacity, right-sizing, storage tiering, and cost monitoring.
A practical guide to chaos engineering on AWS using AWS Fault Injection Simulator. Covers experiment design, steady-state hypotheses, and blast radius control.
Learn how to implement the Builder design pattern in C#/.NET to construct complex objects step by step with clean, maintainable code.
A clear breakdown of Service Level Indicators, Objectives, and Agreements. How to define, measure, and use them to build reliable systems.
Understanding the differences between CI, CD, and continuous deployment. Clear definitions, when to use each approach, and how they fit together in modern engineering.
An overview of the AWS Well-Architected Framework, its six pillars, available lenses, and how to run a Well-Architected review using the AWS console tool.
Updated .NET serialisation benchmarks for February 2023 comparing System.Text.Json, MessagePack, MemoryPack, Protobuf, and more frameworks.
An emerging pattern for managing API traffic through a single, centralised ingress point. Benefits, implementation considerations, and trade-offs.
How split-horizon DNS works and how to implement it in AWS using Route 53 private and public hosted zones for internal and external traffic routing.
How to use VPC endpoint policies to control and secure access to AWS services from within your VPC. Includes policy format, common use cases, and Terraform examples.
Learn how the Anti-Corruption Layer pattern prevents incompatible systems from affecting each other. Implementation steps, when to use it, and its role in Domain-Driven Design.
Explore the Asynchronous Request-Reply pattern for decoupling request and response in distributed systems. Backend integration, polling strategies, and real-world use cases.
Understand the Bulkhead pattern for isolating failures in distributed systems. Implementation guide, when to use it, challenges, and best practices.
Master the Circuit Breaker pattern with Closed, Open, and Half-Open states. Implementation guide, configuration best practices, and real-world examples.
Learn how Queue-Based Load Leveling manages traffic spikes using message queues. Implementation, monitoring metrics, dead-letter queues, and best practices.
Learn how to version ASP.NET Core MVC APIs using headers, querystrings, and URL-based approaches with the Asp.Versioning.Mvc package.
Set up XUnit integration tests with Docker containers using TestContainers and LocalStack, with reusable patterns for any Docker image.
Learn how to use retries with decorrelated jitter, bulkhead and circuit breaker patterns to increase reliability in your applications with Polly
In this article we're taking a look at how to extend the AWS SDK for .NET, which can be useful for various tasks like adding in some custom observability components into the request pipeline.
Discover lesser-known C# features including duck typing with foreach and await, custom awaitable types, and using params with indexers.
As companies grow, moving to a zero-trust architecture is majorly important. This article explores how to build it in AWS.
Some services like AWS CloudWatch Metrics only allow scaling based off a single value. Luckily, we can blend metrics together to create new ones, which we can then use in our scaling policies
As companies grow, moving to a zero-trust architecture is majorly important. This article explores how to build it in AWS.
As companies grow, moving to a zero-trust architecture is majorly important. This article explores how to build it in AWS.
Learn how to mock methods with ref, in, and out parameters using Moq in C# with practical examples and minimal test code changes.
Explore the CloudEvents specification for standardising event data across teams, including the format, required attributes, and integration benefits.
Set up a GitHub repository template for .NET projects with community files, CI workflows, and standardised configuration out of the box.
Build a simple runtime feature toggle system in ASP.NET Core using IConfiguration and the options pattern, with a path to dynamic toggles.
Boost your Git workflow with practical aliases for common operations like checkout, undo, branch cleanup, and more. Includes setup instructions.
A deep dive into the .NET EventCounters API covering custom metrics, diagnostic counter types, Docker diagnostics tooling, and listening to inbound and outbound HTTP requests.
Build custom ASP.NET Core input and output media formatters using Utf8Json for high-performance JSON serialisation in your APIs.
A practical guide to IIS URL Rewrite covering canonical hostnames, HTTPS redirects, httpOnly cookies, SameSite cookies, secure cookies, and trailing slash removal.
Concise notes on Domain Driven Design covering ubiquitous language, bounded contexts, CQRS, and event sourcing from a practical perspective.
Why writing clean, maintainable code matters more than shipping fast. Avoid shortcuts that lead to rewrites and unmaintainable codebases.
Understand how technical debt accumulates through lack of knowledge, time pressure, and poor practices, plus strategies to manage and reduce it.
Message queues are a substantial part of modern day enterprise architectures and a vital part of providing scalable solutions. Here I walk you through some of the basic patterns.
Discover the subtle integer overflow bug present in most binary search implementations and learn how to fix it with a simple one-line change.
Discover the often overlooked unit tests for Equals overrides in C# including reflexive, symmetric, transitive, and consistency checks.
Learn how to enable HTTP Strict Transport Security (HSTS) in ASP.NET MVC using a custom ActionFilter to protect against network attacks.
Learn the correct way to implement IDisposable in C# including managed and unmanaged resource cleanup, finalizers, and the full dispose pattern.
Micro-benchmark comparing Semaphore and SemaphoreSlim performance in C# showing the significant speed advantage of the lightweight SemaphoreSlim class.