Skip to main content
SEMastery
blog

Milan Jovanovic: A Student's Guide to Learning .NET Architecture

Who Milan Jovanovic is, every resource he offers, and a free-to-paid learning path to grow from intermediate .NET developer to architect.

12 min readUpdated November 14, 2025

If you write .NET code and want to get better, you will run into Milan Jovanovic sooner or later. He is one of the most respected teachers in the .NET world. This guide explains who he is, what he makes, and how to learn from him without getting lost.

Think of him like a great cooking show host

Imagine you want to learn to cook. You could read a thick textbook full of theory. Or you could watch a friendly chef who cooks real meals on camera, explains why each step matters, and gives you the recipe to try at home.

Milan is that chef, but for software. He does not just talk about ideas. He builds real, production-style apps and shows you the exact steps. He explains why one way is better than another. Then he hands you the "recipe" so you can try it yourself.

That is what makes him special. He is practical. He cares about code that ships to real users, not just code that looks pretty in a book.

Who is Milan Jovanovic?

Milan is a Software Architect and a Microsoft MVP in Developer Technologies. An MVP is an award Microsoft gives to people who help the community a lot. So this is not a random person on the internet. Microsoft itself says his work is valuable.

His home base is his website, milanjovanovic.tech. From there he runs a blog, a newsletter, a YouTube channel, paid courses, and a community. You can also find him on X as @mjovanovictech and on GitHub as m-jovanovic.

He teaches the kind of topics that turn a "good" developer into a "trusted" one:

  • Clean Architecture in the real world (not just diagrams)
  • Domain-Driven Design (the tactical patterns you actually use day to day)
  • CQRS (splitting reads and writes)
  • The Result / Errors pattern instead of throwing exceptions everywhere
  • EF Core (talking to databases)
  • Modular monoliths and microservices

Everything stays grounded in production. That word "production" just means "real software that real people depend on."

A quick map of who he is

Milan Jovanovic at a glance

Person
Role
Channels

Steps

1

Person

Milan Jovanovic, @mjovanovictech

2

Role

Software Architect + Microsoft MVP

3

Channels

Blog, newsletter, YouTube, courses, community

The person, the role, and the main channels he uses to teach.

Every resource he offers

Milan does not have just one thing. He has a whole ladder of resources, from totally free to premium. Here they all are in one table.

ResourcePriceWhat it isBest for
Blog (milanjovanovic.tech)FreeDeep written articles with codeReading at your own pace, searching topics
The .NET Weekly newsletterFreeOne practical tip emailed every SaturdayLearning a little every week with no effort
YouTube channelFreeVideo walkthroughs of patterns and demosPeople who learn better by watching
Pragmatic Clean ArchitecturePaidFull course on Clean ArchitectureGoing deep on structuring real apps
Modular Monolith ArchitecturePaidFull course on modular monolithsBuilding big apps that stay tidy
Pragmatic REST APIsPaidFull course on building good APIsMastering real-world API design
Architecture BundlePaidThe courses packaged togetherSaving money if you want it all
Community (5,000+ members)PaidSource code, early videos, people to askLearning with others and getting unstuck

Let's look at the most important ones a little closer.

The .NET Weekly newsletter

This is his most famous free resource. More than 70,000 readers get it. It lands in your inbox every Saturday, and it gives you one practical tip per issue. Just one. That is the whole point. It is small enough to actually read and use.

If you only do one thing from this whole guide, sign up for the newsletter. It is the easiest way to keep learning without burning out.

The blog

The blog is where his ideas live in full. Each post is a real article with code you can copy. Want to understand the Result pattern? There is a post for that. Modular monoliths? Also a post. The blog pairs nicely with our own write-ups, like What Is a Modular Monolith? and Clean Architecture Folder Structure.

The YouTube channel

Some lessons are easier to see. On YouTube he opens an editor and builds things live. You watch the mistakes, the fixes, and the final result. This is great when a blog post alone feels too abstract.

The premium courses

When you are ready to go deep, he has courses:

  • Pragmatic Clean Architecture has 2,900+ students. It teaches you how to structure a whole .NET app cleanly.
  • Modular Monolith Architecture has 750+ engineers enrolled. It teaches you to build one big app that stays organized inside.
  • Pragmatic REST APIs teaches you to design APIs the right way.

These cost money, but they are the "full meal" version of the free content.

The community

He also runs a 5,000+ member community. Inside you get the source code from his lessons, early videos, and other engineers to ask when you are stuck. Learning with people is often faster than learning alone.

A learning path: from free to paid

You do not need to buy anything to start. Here is a simple path that takes you from "just curious" to "ready for a paid course," step by step.

A simple path for following Milan from free resources to paid ones.

Here is the same path explained in words:

  1. Start free. Subscribe to The .NET Weekly. Cost: zero. Effort: tiny.
  2. Read. Pick three or four blog posts on Clean Architecture and the Result pattern. Read them slowly.
  3. Watch. Find a YouTube video on the same topic. Seeing it move helps it click.
  4. Build. Make a tiny app of your own. Try one idea, like a Result type. You learn far more by typing code than by reading it.
  5. Decide. Only after all that, ask yourself if a paid course is worth it. By now you will know if his style fits you.

This order matters. Many people rush to buy a course first. But if you taste the free stuff first, your money is spent much more wisely.

Small examples of ideas he is known for

Talking about patterns is fine, but code makes them real. Here are tiny versions of two ideas Milan teaches a lot. These are simplified so a beginner can follow them.

The Result pattern (instead of throwing exceptions)

Normally in C#, when something goes wrong, code "throws" an exception. That is like setting off a fire alarm. It works, but it is loud and can be surprising.

The Result pattern is gentler. Instead of throwing, a method returns an answer that says "this worked" or "this failed, and here is why." The caller has to look at the answer. Nothing is a surprise.

Here is a very small Result type:

public record Error(string Code, string Message);
 
public class Result
{
    public bool IsSuccess { get; }
    public Error? Error { get; }
 
    protected Result(bool isSuccess, Error? error)
    {
        IsSuccess = isSuccess;
        Error = error;
    }
 
    public static Result Success() => new(true, null);
    public static Result Failure(Error error) => new(false, error);
}

And here is how you might use it. Notice we never throw. We return a clear answer.

public Result Withdraw(decimal amount)
{
    if (amount <= 0)
    {
        return Result.Failure(
            new Error("Money.Invalid", "Amount must be positive."));
    }
 
    if (amount > Balance)
    {
        return Result.Failure(
            new Error("Money.NoFunds", "Not enough money."));
    }
 
    Balance -= amount;
    return Result.Success();
}

The caller then checks the result:

var result = account.Withdraw(50);
 
if (result.IsSuccess)
{
    Console.WriteLine("Done!");
}
else
{
    Console.WriteLine($"Failed: {result.Error!.Message}");
}

See how calm that is? No alarms. Just a clear yes or no. We go deeper on this in our own guide, Functional Error Handling in .NET with the Result Pattern.

A CQRS command and handler

CQRS is a fancy name for a simple idea: keep the code that changes data separate from the code that reads data. A "command" is a request to change something. A "handler" is the worker that does it.

Think of a restaurant. The order ticket is the command. The cook who makes the dish is the handler. The ticket does not cook. The cook does not write tickets. Each has one job.

Here is a tiny command and its handler:

// The "order ticket": just the data needed to do the job.
public record CreateUserCommand(string Email, string Name);
 
// The "cook": the worker that runs the job.
public class CreateUserHandler
{
    private readonly IUserRepository _users;
 
    public CreateUserHandler(IUserRepository users)
    {
        _users = users;
    }
 
    public async Task<Result> Handle(CreateUserCommand command)
    {
        var user = new User(command.Email, command.Name);
        await _users.AddAsync(user);
        return Result.Success();
    }
}

The command holds only data. The handler holds only logic. This keeps each piece small and easy to test. Our CQRS Pattern with MediatR article shows how to wire this up properly.

One honest note for 2026: tools like MediatR, MassTransit, and AutoMapper moved to commercial licenses. That means they may cost money for bigger teams now. You can still learn CQRS perfectly well, and many people now hand-write small handlers like the one above to avoid the license. Milan's lessons teach the pattern, which works no matter which library you pick.

Where these ideas fit together

How a request flows through a Clean Architecture app using CQRS and the Result pattern.

This is the heart of what Milan teaches. A request comes in, becomes a command, a handler does the work, EF Core touches the database, and a Result comes back. Clean, predictable, testable. The same flow shows up when you study the Outbox pattern, which makes sure messages get sent reliably.

Who is he a good fit for?

Let's be honest about this. Milan's content is not for absolute beginners. If you have never written C#, start somewhere simpler first.

He is best for:

You are...Is Milan a good fit?
Brand new to programmingNot yet. Learn C# basics first.
Comfortable with C# and ASP.NET CoreYes. This is your sweet spot.
An intermediate dev wanting senior skillsYes. This is exactly his target.
Aiming to become an architectYes. His whole focus is architecture.
Only interested in front-end / UIProbably not. He teaches back-end and design.

In short: if you can build a basic API and now you want to make it clean, scalable, and professional, he is one of the best teachers you can find.

How to get the most value for free

You can learn a huge amount from Milan without spending a cent. Here is how to squeeze the most out of the free side:

  • Subscribe to the newsletter and actually read it. One tip a week adds up to over fifty tips a year.
  • Bookmark the blog. When you hit a problem at work, search his blog first. There is often a post for it.
  • Follow him on X (@mjovanovictech). He shares short, useful tips there too.
  • Star his GitHub (m-jovanovic). Reading real code teaches things no article can.
  • Type out the examples yourself. Do not just read. Build a tiny project and try each idea. This is the single biggest free upgrade you can give yourself.
  • Pair his posts with ours. Read his take, then read our matching guide. Two explanations of the same idea make it stick.

Only after you have done all of this for a few months should you think about paying. By then you will know exactly which course matches your goals, and the money will be well spent.

A gentle warning about copying patterns

One last honest thing. Patterns like Clean Architecture and CQRS are powerful. But they are not free. They add structure, and structure adds work. For a tiny app, all that structure can be overkill, like wearing a full suit of armor to ride a bike.

Milan himself teaches this balance. The goal is not to use every pattern everywhere. The goal is to understand each pattern well enough to know when it helps and when it just gets in the way. Learn the tools, then use good judgment. That judgment is what makes someone an architect.

Quick recap

  • Milan Jovanovic is a Software Architect and Microsoft MVP who teaches practical .NET and software architecture.
  • His home is milanjovanovic.tech. He is @mjovanovictech on X and m-jovanovic on GitHub.
  • Free resources: the blog, The .NET Weekly newsletter (70,000+ readers, every Saturday, one tip per issue), and a YouTube channel.
  • Paid resources: Pragmatic Clean Architecture (2,900+ students), Modular Monolith Architecture (750+ engineers), Pragmatic REST APIs, an Architecture Bundle, and a 5,000+ member community with source code.
  • He teaches Clean Architecture, DDD, CQRS, the Result pattern, EF Core, modular monoliths, and microservices — always practical.
  • Best for intermediate devs leveling up toward senior or architect roles.
  • Smart path: start free, build small projects, and only pay once you know his style fits you.

References and further reading