Live·Free .NET newsletterVol. 11Issue Nº 156Tue · 12 May 2026
By Mukesh Murugan · Microsoft MVP
Next issue
soon
Become a better
.NET developerin 5 minutes a week.
Original benchmarks
,
production tips, and a senior-level interview question - straight
to your inbox every Tuesday. Read by
7,100+
developers worldwide.
7.1K +
Subscribed
55%
Open rate
5min
Avg. read
No spam, ever
Unsubscribe in one click
Free forever
Just subscribed Aarav from Bengaluru in the last 24h
01 · By the numbers
Why developers stay subscribed
Live · growing weekly
7.1 K+
Subscribers
Since 2015
150 +
Issues sent
4× industry avg
55 %
Open rate
Quick, deep
5 min
Avg. read
02
What's inside
what you'll actually get every week
4segments·each with a live sample
This isn't a link dump. Every issue has original content you won't
find on the blog or anywhere else. Here's a taste of each segment.
01·The hook
Opens with a real production story
Every issue starts with a specific incident I lived through - a Friday support ticket, an 11 PM debug session, a security review I would rather forget. Then we get into what caused it.
Sample opening
Friday, 4 PM
Support ticket·Nº 1453
"Customer charged twice for the same item."
Two orders for the same product hit the API within 200ms
of each other. Both reads saw stock = 10.
Both writes saved stock = 9...
That's how every issue opens.Real story →
02·The verdict
"Stop using X. Use Y." with the why
One technical decision per issue with the full reasoning - the gotchas, the .NET 10 changes, the production trade-offs nobody else writes down. No "it depends".
This week's verdict
Stop
ConcurrencyCheck
Use
IsRowVersion()
✓
"The database manages the version automatically.
There is no manual line to forget."
03·The code
Production code, copy-ready
Real syntax-highlighted snippets with the trap marked in a comment. The kind of code you can paste into your project on Friday and ship Monday morning.
Product.cs
public classProduct
{
public uint RowVersion { get; set; }
}
// ← the trap is in the comment
04·The follow-up
Paired with the full deep-dive
Every issue links to the full article (or YouTube walkthrough) on the blog. Five minutes in your inbox, twenty for the full walkthrough when you want it.
Sample CTA
In every issue
Read the full guide
Optimistic concurrency in EF Core 10
→
Some issues pair with a YouTube walkthrough too.
03A typical issue
what does a typical .NET newsletter issue look like?
Opened from your inbox
One email. Four segments. Scan in 5 minutes or deep-dive for 20.
Here's last Tuesday's issue, opened in your inbox.
Friday, 4 PM. Support ticket: "Customer charged twice for the same item."
Two orders for the same product hit the API within 200
milliseconds of each other. Both reads saw stock = 10.
Both writes saved stock = 9. The warehouse shipped one item.
The customer was billed for two. And nothing in the logs
flagged it as a problem - because to the API, both updates
succeeded.
That was the third time I had watched the same bug ship in
three years. Every single time, the root cause was the same:
a developer used EF Core's ConcurrencyCheck
instead of IsRowVersion(), and somewhere in the
codebase, someone forgot to update the version manually.
The Line Everyone Forgets
ConcurrencyCheck looks innocent. You add an
attribute to your entity, you increment the version on every
update, and EF Core uses it in the WHERE clause to
detect conflicts. Easy.
public classProduct
{
publicGuid Version { get; set; }
}
// In your service
product.Stock = newStock;
product.Version = Guid.NewGuid(); // ← forget this once, and you ship silent corruptionawait context.SaveChangesAsync();
Forget that one line in one code path - a quick admin script,
a background job written at 11 PM, a hotfix shipped on a
Friday - and EF Core has nothing to compare against. The save
succeeds. The conflict goes undetected.
What I Use Instead
IsRowVersion(). The database manages the version
automatically. There is no manual line to forget.
public classProduct
{
public uint RowVersion { get; set; }
}
// Fluent API config
entity.Property(p => p.RowVersion).IsRowVersion();
That's the entire change. On PostgreSQL, this maps to the
xmin system column - which already exists on
every table. Zero migration. Zero schema cost.
If you're building APIs with dotnet, I made a free course
that covers this and 100+ more lessons - from zero to
production.
12,500+ devs are
already in.
P.S.
Know a dotnet dev who'd find this useful? Forward this email
- it's the best way to support this newsletter.
04Coverage ledger
what topics does the .NET newsletter cover?
9 areas·180+ issues indexed
From ASP.NET Core fundamentals to advanced architecture patterns -
practical .NET content every week. Each entry shows how often I've
covered it and which issue touched it last.
Trending this monthASP.NET Core·Entity Framework Core·AI & .NET
Semantic Kernel, Claude API, AI-powered .NET development
9issuesLast:Nº 154
05
Who writes this
written by Mukesh Murugan
●
The editor
Mukesh Murugan
Solutions Architect · Microsoft MVP
Trivandrum, IN 8°N
Author's note
Microsoft MVP· since 2020
AWS Community Builder· since 2022
10+ yrs in .NET
Speaker · 12 talks
I'm a .NET developer and technical lead with 10+ years building
production applications with ASP.NET Core, EF Core, and AWS.
I write the newsletter every week with original benchmarks,
judgment calls, and production tips. Not recycled documentation,
not a link dump - the actual stuff I've shipped, broken, and
fixed in real projects.
40K+
LinkedIn
150+
Articles
100K+
Monthly readers
12,500+
Students
06For sponsors
want to reach 7,100+ .NET developers?
Charter slot · taking inquiries
I haven't run a single sponsorship yet. That makes the next sponsor
the first one - with
everything that implies: 100% of the attention, no past placements
to compete with, charter rates locked in for future engagements.
It's a free weekly newsletter for .NET developers. Every Tuesday you get original benchmarks, ASP.NET Core production tips, architecture advice, and a senior-level interview question. Written by Mukesh Murugan, read by 7,100+ developers worldwide.
02
Pricing
Is this newsletter free?
Yes, 100% free. No paid tiers, no paywalls. You get the full newsletter every Tuesday at no cost. I monetize through sponsorships, not subscriptions.
03
Cadence
How often is the newsletter sent?
Once a week, every Tuesday morning. I never spam. You'll get exactly one email per week - that's it.
04
Content
What topics does the .NET newsletter cover?
ASP.NET Core, C#, Entity Framework Core, Clean Architecture, Docker, AWS, Terraform, performance optimization, security, and AI integrations with .NET. Basically everything a modern .NET developer needs.
05
Audience
Who is this newsletter for?
Any .NET developer - from beginners learning ASP.NET Core to senior architects building production systems. The content is practical and actionable regardless of your experience level.
06
Control
Can I unsubscribe?
Anytime, with one click. There's an unsubscribe link at the bottom of every issue. No guilt trips, no hoops to jump through.
07
Difference
What makes this different from other .NET newsletters?
Original content. I run actual benchmarks, share real production experiences, and give you straight answers instead of 'it depends'. Every issue has content you won't find on the blog or anywhere else.