Historical screenshot of the MF Rural platform homepage

MF Rural: The Biggest Brazilian Rural E-commerce

MF Rural - The biggest brazilian rural e-commerce It started in early 2005, I was just 18 and I already was deeply immersed in IT work and rural fields. At that time, I had already launched some professional websites to Canal do Boi (a rural national TV channel) and to some auction companies in Brazil. So I received a visit from some guys from another state (São Paulo), who wanted to create a new way to make business in the rural field. ...

June 5, 2026 · 8 min · 1574 words · Eduardo Potumati
Diagram illustrating a high-throughput background pipeline using System.Threading.Channels in ASP.NET Core

C# Channels - Why so forgotten? Designing High-Throughput Background Pipelines

Designing high-throughput background pipelines with C# System.Threading.Channels When our project receives thousands of requests per minute, we need to take some cares. Usually, the bottleneck isn’t CPU. Probabily the problem is one (or more) of these: I/O contention, thread starvation, uncontrolled concurrency, excessive allocations… et cetera. One of the most common mistakes in high-throughput (even in medium-throughput) APIs is coupling request processing with expensive secondary operations such as: audit logging; telemetry; webhook dispatching; email sending; analytics; event persistence. So it causes response times increasing, thread pressure growing and throughput collapses. ...

May 13, 2026 · 7 min · 1280 words · Eduardo Potumati
Performance comparison chart showing C# Native AOT vs standard Runtime. Native AOT achieves 11MB app size, 40MB memory usage, and 35ms startup time.

C# Native AOT: High Performance for Cloud-Native Architectures

C# Native AOT: Reaching Maximum Performance In the modern cloud landscape, where every millisecond and every megabyte counts toward your monthly bill, how we compile and deploy our code has become a strategic decision. As developers, we are used to the standard .NET execution model: code is compiled into Intermediate Language (IL) and then compiled into machine code at runtime by the Just-In-Time (JIT) compiler. While the JIT is incredibly fast and optimized, modern architectures-especially Serverless and Edge Computing-demand something even more efficient. ...

February 15, 2026 · 2 min · 402 words · Eduardo Potumati
A comparison table or code snippet demonstrating List vs IEnumerable in C#

List<T> or IEnumerable<T> in C#: Which one to choose?

That classic question: List<T> or IEnumerable<T> in C#? Straight to the point: IEnumerable<T>: when you only need forward iteration. It also works with deferred execution, the basis of LINQ and ideal for handling large amounts of data without loading everything into memory. ICollection<T>: in addition to iteration, it allows you to add, remove, and count items, but without index access. IList<T>: includes everything from ICollection<T>, plus index-based access and the ability to insert/remove at specific positions. List<T>: the concrete implementation of IList<T>, the class you usually use to instantiate a list. Why does this matter? Whenever possible, use the minimal required interface. Clear contracts reduce coupling and make your code more flexible and easier to maintain. ...

November 15, 2025 · 1 min · 125 words · Eduardo Potumati
Semaphore and SemaphoreSlim

Concurrency Control in C#: Semaphore and SemaphoreSlim

I recently published a detailed technical article on Balta.io-one of the premier .NET ecosystem references in Brazil-addressing a critical topic for high-performance systems: concurrency control. As software engineers with extensive experience in high-demand solutions, we often face the challenge of “doing as much as possible, as fast as possible”. However, infrastructure realities-such as rate limits in third-party APIs or hardware constraints-force us to understand exactly when and how to throttle our execution. ...

August 13, 2025 · 2 min · 251 words · Eduardo Potumati
A code snippet illustrating the usage of tuples in C# to return multiple values

Tuples in C#: Too simple or too complex?

Too simple to be a complex type, too complex to be a simple attribute. That’s what tuples in C# are. Perfect for returning multiple values from a method. No need to create a class (or even a record). Easy to read. Take a look at the image post and see how to use it. Do you use tuples, or do you prefer DTOs/records? 👉 Adapted from my original post on LinkedIn . ...

July 20, 2025 · 1 min · 72 words · Eduardo Potumati
An example showing implicit operator conversions in C# with potential pitfalls

Implicit Operators in C#: Convenience vs. Clarity

In C#, implicit operators enable automatic type conversions without the need for explicit casting. This functionality not only enhances code readability but also boosts development agility while safeguarding against runtime conversion exceptions. However, be careful. While implicit conversions offer convenience, excessive usage can potentially compromise code clarity. It’s essential to tread carefully as an overreliance on implicit conversions may obscure the precise moments and locations where conversions occur. 👉 Adapted from my original post on LinkedIn . ...

March 22, 2025 · 1 min · 77 words · Eduardo Potumati
A visualization illustrating how Split Queries solve Cartesian Explosion in EF Core

Split Queries in EF Core: Mitigating Cartesian Explosion

Have you worked with Split Queries in EF Core before? When you incorporate related tables using EF Core, it typically generates a JOIN query, potentially leading to duplicated data. While this duplication is usually insignificant for small datasets, it can become problematic when dealing with larger volumes. When multiple collections are included, SQL JOINs multiply rows exponentially, not linearly. 1 2 3 4 var posts = context.Posts .Include(p => p.Comments) .Include(p => p.Tags) .ToList(); Imagine a scenario where you have a table with 1000 posts and each post has 1000 comments. If you use the query below, you will get 1000 * 1000 = 1,000,000 rows in the result. This phenomenon is known as Cartesian Explosion, causing unexpected spikes in data loads. ...

February 15, 2025 · 2 min · 350 words · Eduardo Potumati
A code comparison showing a foreach loop converted into a LINQ expression

Convert a foreach Loop to LINQ

Convert a foreach loop to LINQ LINQ transforms a query into a first-class language construct in C#. It can reduce the amount of code, enhance readability, and enable similar query expression patterns across different data sources. 👉 Adapted from my original post on LinkedIn .

November 15, 2024 · 1 min · 45 words · Eduardo Potumati
Code snippet demonstrating how to compare two numbers using Math.Abs in C#

Comparing Numbers with Tolerance in C#

Comparing Numbers with Tolerance in C# Sometimes, when comparing two numbers in C#, you may want to allow for a tolerance or interval in the comparison. Instead of manually adding, subtracting, and comparing the values, you can use Math.Abs on the difference between the two numbers to check if the result falls within your acceptable range. 👉 Adapted from my original post on LinkedIn .

September 15, 2024 · 1 min · 65 words · Eduardo Potumati