Thoughts on innovation, design, leadership, and building products that change the world.
Discover what's new in xUnit v3 for .NET testing, including powerful test-aware cancellation tokens. Learn how this simple yet impactful feature boosts test reliability, resource management, and async integration testing.
Read more →Learn why caching in C# is harder than it looks. This deep dive covers selective caching, cache invalidation pitfalls, and practical patterns using IMemoryCache and the Repository Pattern.
Discover Vertical Slice Architecture – a powerful alternative to layered architecture that helps reduce merge conflicts, simplify onboarding, and improve code organisation by structuring your application around features, not layers. Perfect for CQRS and modern API development.
Unlock .NET debugging in Cursor AI even on M1/M2 Macs with this simple workaround using Samsung's open-source debugger. No more Microsoft VS Code restrictions!
Master the art of coupling and cohesion in software engineering. Learn practical code examples and techniques to write cleaner, more maintainable applications with real-world principles that improve code flexibility, testability, and long-term project success.
Discover the top 10 architecture diagramming tools for 2025, from free options like draw.io to enterprise solutions like Miro. Compare features and capabilities to find the perfect tool for your team.
The Result Pattern makes coding easier! Instead of guessing if something worked or broke, your function says, "Here's the result" or "Here's what went wrong." Rust does this automatically, but you can do it in C# too with a Result<T> type. It's simple, clear, and takes the guesswork out of your code.
Let's build scalable and cost-effective serverless APIs with AWS Lambda and DynamoDB using .NET. This step-by-step guide covers everything from setting up DynamoDB to deploying a .NET Lambda function, helping you quickly create a production-ready API.
Let's explore 3 KafkaFlow features that are game-changing for .NET developers working with Apache Kafka.
KafkaFlow makes developing Apache Kafka Event-Driven Applications so much simpler.
What is the Chain of Responsibility Design Pattern, and how can I apply it in C#.
Crafting Elegant Test Assertions with Domain-Specific Concepts and Fluent Assertions
Using Data Transfer Objects (DTOs) is not all good or bad. Above all, it's a tradeoff.
If you are wondering how to move your .NET MVC API Controllers to Minimal APIs, this blog post is for you.
Testcontainers is an awesome technology, but often docker-compose is just better.
This is the list of tools that I used on my Test projects during 2022. But also the ones I'm planning to give a chance.
There are 3 techniques to get you from Red to Green on Test Driven Development (TDD). In this article, I apply all of them to the same problem, so you can see how to use them.
I don't fall in love with InternalsVisibleTo, especially in the context of facilitating Testing. But I admit that there's at least one extremely useful use case.
Tests can be of one of these types. Knowing them shapes how to approach testing and how you decide on your assertions. In this video, we will use C# to find those 3 types of Unit Tests.
Fluent Assertions is a must-have tool for .NET Testing. It's so rich and extensive that some features aren't used enough. In this post, I will show you 3 of them.
How many times you need to scroll to go through your Dependency Injection configuration? Too many? Do you configure your Dependency Injection on the Startup.cs? Or in the Program.cs? In this post we will see a proven organization method for maintainable Dependency Injection configuration.
This is one of the most common mistakes, that cause breaking tests on refactoring. In this post, we will see how to build structure-insensitive tests, one of the key properties of a good test.
This is the most common mistake when organizing Projects and Solutions in .NET. It is a real onboarding nightmare for newcomers. In this post, I will show you how to use Feature Folders towards a Screaming Architecture (Clean Architecture).
Would it be possible to build the Netflix Intro for a .NET Console application? This is the challenge, and I will show you how I made it.
Do you know that even Microsoft doesn't recommend using DateTime by default? They recommend using DateTimeOffset instead. Let's see why.
How the DRY principle can damage the readability of your C# tests, and what you can do instead.
Most Clean Architecture implementations have this error. The error of missing the Main Component, or Composition Root. Here we will see how to implement it in a .NET Solution.
A guide on how to apply Hexagonal Architecture (also known as Ports & Adapters) as a .NET Developer. By the end, you should be able to follow the same ideas and build upon this opinionated project structure.
A beginner's introduction to Hexagonal Architecture (AKA Ports & Adapters), where it explained the .NET concepts that you can use to bring Hexagonal Architecture to life.
Microsoft can change the way we manage packages in .NET forever. With a bit of effort, Central Package Management can be the default way of doing it in .NET.
Finally, Required Members are landing on C#. It's a highly expected feature, but not everything is perfect. In this post we will see why.
Why C# 11 is bring Auto Default Structs and how it will work.
In this post will will look into Snitch, an Open Source tool to find transitive dependencies that can be removed from .NET projects.
UTF-8 String Literals is coming to C# but has changed during C# 11 Preview. In this blog post, I will show what UTF-8 String Literals are trying to solve, what is changing and why it's changing.
Generic Attributes were missing for a long time in C#. Since they are arriving, let's see what that means.
What are List Patterns, and how can you use them.
Wouldn't be lovely if we could copy text into and from a string without thinking about escaping?
The excitement with Records immutability, has some blind spots. It's easy to fall into a trap and break the desired immutability. Nevertheless, there's a simple rule that can bring a light on potential problems.
Small tips to optimize your .NET build pipelines with .NET CLI.
How to use .net 6 Caller Argument Expressions to improve the Developer Experience of your consumers.
How to use dotnet format in your Team development cycle with pre-commit and GitHub Actions.
How performant are C# Property Patterns?
What if we could take our xUnit test names a step further? Here we will see how.
Property Patterns are a different way to write c#, but that can lead to expressive and clear code. See how.
Global Usings are a new possibility and there are no guidelines on where to declare them. This is my take on how I will be declaring them and how.
How to map an endpoint to upload files with ASP.NET Minimal APIs.
If you depend on Azure Storage, you need a solution to Integration Test in a local development environment.
Do you have the feeling that some of your components are doing too much? Do you have too many boolean props? Find here how to simplify them.
Did you notice that your React Components tend to have a ton of booleans** (isLoading, hasErrors, ...) that you use to control the state of your component?
Refactoring is a key development tool that we don't learn while learning to program. Why should we learn the practices and make them part of our flow?
GetAwaiter().GetResult() should be used carefully. Otherwise, you may experience several problems when your system is under stress.
Return early is a simple principle that improves the code readability and reduces the cognitive load to understand it.
Finding Eleventy, a simple static site generator for a blog, after trying Gatsby and NextJS.
Lessons learn from preparing and speaking for the first time at a Virtual Conference.
Flag arguments are a good indicator that something is wrong. Use them as Refactoring warning.
Code Comments are a good idea. But we use a lot of comments that don't help. This explains the Comments bad reputation nowadays.
Have you ever noticed that a successful restaurant has a shorter menu? Especially when compared to those who are struggling. Why?! Simplicity!
The builder pattern is an elegant solution to the problem and I really like it. But, is it a simple solution for JavaScript?
We are writing code for others to read. So, we shouldn't present our characters too early in the story.
How to use windbg to figure out the reason for a memory leaking in a .net core 3.1 application.
Three recommendations to prevent React component re-render and improve performance.
How Behavioural Science can help us to have better one-on-ones.
Don't you freeze when you are asked to be creative and think outside the box? These leads us to frustration, disappointment and lack of confidence in our creative skills.
If you are in an environment with resistance to Remote Working, the best way is to propose a small experiment.
Have you ever heard a recording of your voice? You don’t sound like that, am I right?! Even if I think that taking the time to reflect is important, I don’t think that is enough.
When was the last time that a waitress asked about your meal and you were really honest? Unfortunately, being honest when something is wrong isn’t something that we humans tend to feel comfortable about.
Using a gRPC c# interceptor to log gRPC requests.
Versioning .net Core applications using Cake and Directory.Build.props file.
Containers is one of the hot topics in the Software Development world and Docker is the technology that everyone wants to play with. Thanks to this hype, everyone has at least a brief idea of what a container is.
Do you know the JSON Patch format? The RFC6902 defines the structure to express a list of operations to apply over a JSON Document.
What I'm building, learning, and discovering each week.
By signing up, you'll get my free weekly newsletter plus occasional updates about my courses. You can unsubscribe anytime.