1. Who This Roadmap Is For
This roadmap is designed for developers who already have professional software-development experience and want to become productive with modern .NET.
It fits developers coming from:
- Java and Spring Boot
- Older .NET Framework applications
- Earlier .NET Core versions
- PHP
- Node.js
- Python backend development
- C++
- Enterprise application development
- Full-stack development
- Cloud application development
An experienced developer should not approach .NET like a first-time programmer. The goal is not to spend weeks learning variables, loops, and basic syntax. The focus should be on understanding how the .NET platform works, how production applications are structured, and how to apply existing engineering knowledge using C#, ASP.NET Core, EF Core, cloud services, testing, observability, security, and architecture.
What Makes This an Experienced .NET Track
For experienced .NET developers, the focus shifts from C# syntax to application boundaries, runtime behavior, data access, resilience, observability, and maintainable service design. You should be able to explain not only how a feature works, but how it behaves under load and failure.
Deepen your understanding of asynchronous programming, cancellation, dependency injection lifetimes, configuration, middleware, logging, background services, HTTP client usage, and Entity Framework query behavior. Be able to identify blocking calls, accidental N+1 queries, oversized dependency graphs, incorrect service lifetimes, and exception handling that hides useful context.
Build a production-style ASP.NET Core service and document its behavior. Include validation, authentication/authorization boundaries, database transactions, pagination, idempotency for a write operation, structured logs, health checks, tests, and a failure policy for a downstream dependency. Profile one slow request and show whether the bottleneck is application code, database access, network latency, or serialization.
Senior interviews commonly move into design: scoped versus singleton dependencies, async pitfalls, transaction boundaries, API versioning, cache invalidation, resilient HTTP calls, and deployment diagnostics. A good answer describes what you would measure and how you would prove the root cause instead of relying on assumptions.
2. Current .NET Technology Baseline
For production-oriented learning in 2026, .NET 10 is the main LTS baseline. Microsoft uses annual .NET releases, with even-numbered releases following the Long Term Support track. LTS releases receive three years of support.
A practical learning stack is:
| Area | Recommended Learning Target |
|---|---|
| Runtime | .NET 10 |
| Language | C# 14 |
| Web Backend | ASP.NET Core 10 |
| ORM | Entity Framework Core 10 |
| REST API | ASP.NET Core Web API / Minimal APIs |
| Authentication | ASP.NET Core Identity, JWT, OAuth 2.0, OpenID Connect |
| Database | SQL Server plus PostgreSQL awareness |
| Cloud | Azure |
| Containers | Docker |
| Orchestration | Kubernetes fundamentals |
| Distributed development | Aspire |
| Messaging | Azure Service Bus, RabbitMQ or Kafka concepts |
| Testing | xUnit/NUnit plus integration testing |
| Observability | OpenTelemetry, logs, metrics and traces |
| CI/CD | GitHub Actions or Azure DevOps |
.NET 10 includes C# 14 and improvements across ASP.NET Core, EF Core, runtime libraries and other components. ASP.NET Core 10 includes enhancements covering Minimal APIs, OpenAPI, diagnostics, Blazor and Identity.
EF Core 10 is also an LTS release and requires .NET 10 for building and execution.
.NET 11 and C# 15 are useful for technology awareness, but C# 15 is currently a preview language associated with .NET 11 preview releases. Production learning should therefore remain centered on stable .NET 10/C# 14 unless a project specifically adopts previews.
3. Understand the Modern .NET Ecosystem First
Before writing applications, understand what the major terms mean.
.NET
.NET is the development platform containing the runtime, libraries, SDK, compilers and tooling required to develop applications.
Modern .NET is cross-platform and can run on:
- Windows
- Linux
- macOS
- Containers
- Cloud environments
C#
C# is the primary programming language used for most .NET application development.
C# and .NET are not the same thing.
Think of the relationship as:
C# → programming language
.NET → runtime and application platform
ASP.NET Core → web framework
EF Core → database ORM
Azure → cloud platform commonly used with .NET applications
4. .NET Framework vs .NET Core vs Modern .NET
Experienced developers frequently encounter all three in enterprise environments.
.NET Framework
.NET Framework is the older Windows-oriented implementation commonly found in legacy enterprise systems.
Typical technologies include:
- ASP.NET MVC 5
- ASP.NET Web Forms
- WCF
- Windows Forms
- WPF
- Entity Framework 6
- IIS-hosted applications
You should understand it because many organizations still maintain applications built with it.
However, new backend development should generally target modern .NET when project requirements allow.
.NET Core
.NET Core was the cross-platform redesign of .NET.
Historical versions included:
- .NET Core 1.x
- .NET Core 2.x
- .NET Core 3.x
After .NET Core 3.1, Microsoft dropped "Core" from the platform name.
The sequence became:
.NET 5 .NET 6 .NET 7 .NET 8 .NET 9 .NET 10
ASP.NET Core and Entity Framework Core retained "Core" in their names.
5. Development Environment
An experienced developer should become comfortable working from both an IDE and the command line.
Learn:
- Visual Studio
- Visual Studio Code
- JetBrains Rider if used by your organization
- .NET SDK
- dotnet CLI
- NuGet
- Git
Important CLI commands include:
dotnet --version
dotnet --info
dotnet new list
dotnet new console
dotnet new webapi
dotnet restore
dotnet build
dotnet run
dotnet test
dotnet publish
dotnet clean
dotnet add package
dotnet list package
Caution: Do not depend entirely on Visual Studio buttons. Understanding the CLI helps when working with build servers, Docker and CI/CD pipelines.
6. C# Fundamentals for Experienced Developers
You can learn the basic syntax quickly if you already know Java, C++, JavaScript or another mainstream language.
Focus on differences rather than spending excessive time on elementary syntax.
Cover:
- Variables
- Primitive and built-in types
- Type inference with var
- Operators
- Conditional statements
- Loops
- Methods
- Arrays
- Strings
- Classes
- Objects
- Namespaces
- Access modifiers
Example:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public decimal Salary { get; set; }
}
Experienced developers should quickly move from syntax into the language features that influence API design, maintainability and performance.
7. Value Types and Reference Types
This topic becomes important when debugging unexpected behavior or investigating allocations.
Value types
Examples:
- int
- bool
- double
- decimal
- char
- struct
- enum
A value-type variable normally contains its value directly.
Reference types
Examples:
- class
- string
- array
- delegate
- interface
- record class
A reference-type variable refers to an object.
Understand:
- Stack versus managed heap without oversimplifying the distinction
- Copy semantics
- Boxing
- Unboxing
- Reference equality
- Value equality
- Allocation costs
- Mutable versus immutable objects
8. Classes, Records and Structs
Experienced developers should know when each model fits.
Class
Use classes for normal reference-based domain objects and services.
Record
Records are useful when value-oriented equality and concise data models are appropriate.
Example:
public record CustomerDto(int Id, string Name, string Email);
Common uses include:
- DTOs
- Commands
- Events
- Immutable data
- Value-oriented models
Struct
Structs are value types.
They are most appropriate for small value-like objects where value semantics are intentional.
Caution: Do not replace every class with a struct in the hope of improving performance.
9. Properties
Properties are a fundamental difference developers from Java quickly notice.
Instead of explicit getter/setter methods:
public string Name { get; set; } = string.Empty;
You can also create calculated properties:
public string FullName => $"{FirstName} {LastName}";
Learn:
- Auto-properties
- init accessors
- required members
- Read-only properties
- Computed properties
- Private setters
- Field-backed properties in modern C#
10. Nullable Reference Types
Nullable reference types help detect potential null-related bugs during compilation.
Example:
string name = "John";
string? middleName = null;
Understand:
- ?
- !
- Compiler null-state analysis
- Nullable annotations
- Guard clauses
- Null propagation
- Null coalescing
Example:
string displayName = customer.Name ?? "Unknown";
Caution: Do not solve nullable warnings by adding ! everywhere. That suppresses compiler analysis rather than fixing the underlying design.
11. Exception Handling
Learn:
- try
- catch
- finally
- throw
- Custom exceptions
- Exception filters
- Global exception handling
Example:
try
{
await orderService.ProcessAsync(orderId);
}
catch (OrderNotFoundException ex)
{
logger.LogWarning(ex, "Order {OrderId} was not found", orderId);
}
For web applications, avoid putting large try/catch blocks inside every controller action.
Centralized exception handling is usually cleaner.
Understand when exceptions represent exceptional situations and when ordinary validation or result types are more appropriate.
12. Generics
Generics are central to the .NET ecosystem.
Examples include:
- List<T>
- Dictionary<TKey,TValue>
- IEnumerable<T>
- Task<T>
- IQueryable<T>
- Action<T>
- Func<T>
- Repository<T>
Understand:
- Generic classes
- Generic methods
- Constraints
- Covariance
- Contravariance
Example:
public T FindById<T>(IEnumerable<T> items, Func<T, bool> predicate)
{
return items.First(predicate);
}
13. Collections
Learn the characteristics rather than memorizing method names.
Important collections:
- List<T>
- Dictionary<TKey,TValue>
- HashSet<T>
- Queue<T>
- Stack<T>
- LinkedList<T>
- ConcurrentDictionary<TKey,TValue>
- Immutable collections
Know when you need:
- Ordered access
- Key-based lookup
- Uniqueness
- FIFO processing
- LIFO processing
- Concurrent modification
14. Delegates
A delegate represents a callable method signature.
Understand:
- Delegate types
- Action
- Action<T>
- Func<T>
- Predicate<T>
Example:
Func<int, int, int> add = (a, b) => a + b;
Delegates form the foundation for:
- LINQ
- Callbacks
- Events
- Middleware patterns
- Functional-style code
15. Lambda Expressions
Lambda expressions appear throughout modern C#.
Example:
var activeUsers = users.Where(user => user.IsActive);
Learn:
- Expression lambdas
- Statement lambdas
- Captured variables
- Closures
- Delegate conversion
- Expression trees
Closures deserve special attention because captured variables can affect allocations and behavior.
16. LINQ
LINQ is one of the highest-value C# topics for experienced developers.
Learn:
- Where
- Select
- SelectMany
- First
- FirstOrDefault
- Single
- SingleOrDefault
- Any
- All
- Count
- OrderBy
- ThenBy
- GroupBy
- Join
- Distinct
- Skip
- Take
- Aggregate
- ToDictionary
Example:
var names = employees
.Where(e => e.IsActive)
.OrderBy(e => e.Name)
.Select(e => e.Name)
.ToList();
The syntax is easy.
The harder part is understanding execution.
Learn the difference between:
- IEnumerable<T>
- IQueryable<T>
- Immediate execution
- Deferred execution
- In-memory operations
- Database-translated queries
This becomes especially important with EF Core.
17. IEnumerable vs IQueryable
IEnumerable
Primarily represents enumerable objects processed by .NET code.
IQueryable
Carries an expression tree that providers such as EF Core can translate into database queries.
Consider:
var query = dbContext.Employees.Where(e => e.IsActive);
At this stage, SQL may not have executed yet.
Calling:
var employees = await query.ToListAsync();
materializes the query.
Experienced developers must understand this because accidental materialization can produce severe database-performance problems.
18. Extension Methods
Extension methods let developers add callable methods to existing types without modifying those types.
Example:
public static class StringExtensions
{
public static bool HasValue(this string? value)
{
return !string.IsNullOrWhiteSpace(value);
}
}
Usage:
if (name.HasValue())
{
Process(name);
}
Use extension methods where they improve discoverability.
Caution: Avoid turning a general-purpose extensions class into a dumping ground for unrelated logic.
19. Pattern Matching
Modern C# supports expressive pattern matching.
Learn:
- Type patterns
- Property patterns
- Relational patterns
- Logical patterns
- List patterns
- switch expressions
Example:
string GetCategory(decimal amount) => amount switch
{
< 0 => "Invalid",
0 => "Free",
< 1000 => "Standard",
_ => "Premium"
};
Pattern matching can simplify business rules but becomes harder to read if developers compress complex workflows into a single expression.
20. Async and Await
This is mandatory for backend developers.
Learn:
- Task
- Task<T>
- async
- await
- Task.WhenAll
- CancellationToken
- IAsyncEnumerable<T>
- ConfigureAwait concepts
- Async exception handling
Example:
public async Task<Customer?> GetCustomerAsync(int id, CancellationToken cancellationToken)
{
return await dbContext.Customers
.AsNoTracking()
.FirstOrDefaultAsync(c => c.Id == id, cancellationToken);
}
Understand that async does not automatically mean that work runs on another thread.
For web applications, asynchronous I/O is valuable for operations such as:
- Database calls
- HTTP requests
- File operations
- Cloud storage
- Message-broker operations
Caution: Avoid:
task.Result
and:
task.Wait()
in normal asynchronous application paths because blocking can reduce scalability and may introduce synchronization problems depending on the environment.
21. CancellationToken
Production APIs need cancellation support.
Pass CancellationToken through application layers where meaningful:
Example:
public async Task<IActionResult> Get(int id, CancellationToken cancellationToken)
{
var customer = await customerService.GetAsync(id, cancellationToken);
return customer is null ? NotFound() : Ok(customer);
}
This helps stop unnecessary work when a client disconnects or an operation is cancelled.
22. Parallel Programming
Caution: Do not confuse asynchronous programming with parallel programming.
Learn:
- Task
- Task.WhenAll
- Parallel.ForEach
- Parallel.ForEachAsync
- PLINQ
- ThreadPool
- Synchronization primitives
Parallelism is primarily useful for suitable CPU-bound workloads.
Running everything in parallel can increase contention and sometimes make an application slower.
23. Thread Safety
Understand:
- Race conditions
- Deadlocks
- Locks
- Interlocked
- SemaphoreSlim
- Monitor
- Concurrent collections
- Immutable data
- Thread-safe singleton services
Example scenario:
A singleton service holds a mutable Dictionary shared by hundreds of HTTP requests.
That design can create race conditions.
Either protect shared state, use thread-safe structures, or redesign the service to avoid unnecessary mutable global state.
24. Memory Management
Experienced .NET developers should understand memory behavior beyond "GC handles everything."
Study:
- Managed heap
- Garbage Collector
- Generations
- Gen 0
- Gen 1
- Gen 2
- Large Object Heap
- Finalization
- IDisposable
- using
- IAsyncDisposable
- Object allocation
- Memory pressure
Understand why garbage collection does not eliminate resource-management responsibilities.
Database connections, sockets, streams and unmanaged handles may still need deterministic cleanup.
25. IDisposable and using
Example:
using var stream = File.OpenRead(path);
using ensures disposal even if execution exits through an exception.
Learn the difference between:
- Garbage collection
- Resource disposal
They solve different problems.
26. Span and Memory
For performance-sensitive development, learn:
- Span<T>
- ReadOnlySpan<T>
- Memory<T>
- ArrayPool<T>
These techniques can reduce allocations in high-throughput code.
They should normally be introduced after profiling identifies allocation pressure rather than being applied blindly to normal business code.
27. CLR Fundamentals
The Common Language Runtime executes managed .NET applications.
Understand at least conceptually:
Study:
- CLR
- IL
- Metadata
- Assemblies
- JIT
- GC
- Type system
You do not need to become a runtime engineer, but these concepts help explain performance, deployment and debugging behavior.
28. JIT Compilation
The Just-In-Time compiler converts intermediate code into native machine code during execution.
Learn:
- Tiered compilation
- Runtime optimizations
- Warm-up effects
- ReadyToRun
- Native AOT at a conceptual level
Performance testing should therefore consider process startup, warm-up and realistic steady-state workloads.
29. Native AOT
Native Ahead-of-Time compilation can produce native executables without normal JIT execution at runtime.
Potential advantages include:
- Faster startup
- Reduced runtime dependency
- Smaller deployment possibilities for suitable applications
Potential constraints can involve:
- Reflection-heavy code
- Dynamic loading
- Library compatibility
- Trimming requirements
Treat Native AOT as an architectural choice rather than a checkbox for every service.
30. Dependency Injection
ASP.NET Core has built-in dependency injection.
Understand these lifetimes thoroughly:
Transient
A new instance is created when requested.
Scoped
One instance normally exists for an HTTP request scope.
Singleton
One instance exists for the application's service-provider lifetime.
Registration:
builder.Services.AddScoped<IOrderService, OrderService>();
builder.Services.AddSingleton<ICacheService, CacheService>();
builder.Services.AddTransient<IEmailFormatter, EmailFormatter>();
A common production mistake is injecting scoped dependencies into singleton services.
Understand object lifetime before selecting a registration type.
31. Configuration
Learn ASP.NET Core configuration from:
- appsettings.json
- appsettings.Environment.json
- Environment variables
- Command-line configuration
- Secret stores
- Azure Key Vault
Caution: Avoid storing:
- Passwords
- Production connection strings
- API secrets
- Private keys
directly in source control.
32. Options Pattern
Use strongly typed configuration where possible.
Example:
public class PaymentOptions
{
public string BaseUrl { get; set; } = string.Empty;
public int TimeoutSeconds { get; set; }
}
Registration:
builder.Services.Configure<PaymentOptions>(
builder.Configuration.GetSection("Payment"));
Learn:
- IOptions<T>
- IOptionsSnapshot<T>
- IOptionsMonitor<T>
Each serves a slightly different lifetime and configuration-update scenario.
33. Logging
Learn structured logging rather than relying on string concatenation.
Prefer:
logger.LogInformation("Order {OrderId} created for customer {CustomerId}", orderId, customerId);
Instead of:
logger.LogInformation("Order " + orderId + " created");
Structured logs are easier to query in centralized observability systems.
Understand log levels:
- Trace
- Debug
- Information
- Warning
- Error
- Critical
Caution: Do not log secrets, passwords, access tokens or sensitive customer information unnecessarily.
34. ASP.NET Core Fundamentals
For most backend-oriented .NET careers, ASP.NET Core deserves the largest portion of your learning time.
Understand:
- Hosting model
- Program.cs
- Dependency injection
- Configuration
- Middleware
- Routing
- Controllers
- Minimal APIs
- Model binding
- Validation
- Filters
- Authentication
- Authorization
- Error handling
- OpenAPI
- Health checks
- Caching
- Rate limiting
- Background services
35. HTTP Fundamentals
Before mastering Web API, understand HTTP properly.
Study:
- GET
- POST
- PUT
- PATCH
- DELETE
- HEAD
- OPTIONS
Understand:
- Request
- Response
- Headers
- Query parameters
- Route parameters
- Request body
- Content-Type
- Accept
- Authorization header
Common status codes:
- 200 OK
- 201 Created
- 202 Accepted
- 204 No Content
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 409 Conflict
- 422 Unprocessable Content
- 429 Too Many Requests
- 500 Internal Server Error
- 503 Service Unavailable
Correct HTTP semantics are part of API design.
36. ASP.NET Core Web API
Typical controller:
[ApiController]
[Route("api/customers")]
public class CustomersController : ControllerBase
{
private readonly ICustomerService _customerService;
public CustomersController(ICustomerService customerService)
{
_customerService = customerService;
}
[HttpGet("{id:int}")]
public async Task<IActionResult> Get(int id, CancellationToken cancellationToken)
{
var customer = await _customerService.GetAsync(id, cancellationToken);
return customer is null ? NotFound() : Ok(customer);
}
}
Learn how controllers should coordinate application behavior without becoming large business-logic containers.
37. Minimal APIs
Minimal APIs provide a concise way to define HTTP endpoints.
Example:
app.MapGet("/api/customers/{id:int}", async (
int id,
ICustomerService service,
CancellationToken cancellationToken) =>
{
var customer = await service.GetAsync(id, cancellationToken);
return customer is null ? Results.NotFound() : Results.Ok(customer);
});
Minimal APIs are particularly useful for:
- Small services
- Microservices
- Focused APIs
- Lightweight endpoints
Controllers remain perfectly valid where their conventions and structure suit the project.
Caution: Do not choose between controllers and Minimal APIs based solely on which syntax uses fewer lines.
38. Middleware
ASP.NET Core processes requests through a middleware pipeline.
Conceptually:
Common middleware handles:
- Exceptions
- HTTPS
- Static files
- Authentication
- Authorization
- CORS
- Rate limiting
- Logging
Order matters.
Incorrect middleware ordering can cause authentication, routing or exception-handling problems.
39. Model Binding and Validation
Learn how ASP.NET Core binds request data into .NET objects.
Input may come from:
- Routes
- Query strings
- Headers
- Request bodies
- Forms
Keep external API models separate from database entities when the application requires clear boundaries.
Validation should cover:
- Required fields
- String lengths
- Ranges
- Formats
- Business rules
Caution: Do not rely solely on database exceptions to validate API input.
40. DTO Design
DTOs protect application boundaries.
Caution: Avoid exposing EF Core entities directly from every API.
Typical model separation:
Benefits include:
- Preventing accidental data exposure
- Controlling API contracts
- Supporting API evolution
- Reducing persistence coupling
Caution: Avoid creating several nearly identical mapping layers unless the architecture genuinely benefits from them.
41. API Versioning
Public or long-lived APIs eventually change.
Understand strategies such as:
- URL versioning
- Query-string versioning
- Header versioning
Example concept:
/api/v1/orders
/api/v2/orders
Version APIs when breaking changes need coexistence.
Caution: Do not create new versions for every internal implementation change.
42. OpenAPI
Modern backend developers should understand API contracts.
OpenAPI helps describe:
- Endpoints
- Parameters
- Request bodies
- Responses
- Authentication schemes
It supports:
- Documentation
- Client generation
- API testing
- Contract review
ASP.NET Core 10 includes additional OpenAPI improvements.
43. Entity Framework Core
EF Core is the primary ORM to learn for modern .NET applications.
EF Core maps .NET objects to relational data operations.
Study:
- DbContext
- DbSet
- Entities
- Configuration
- Relationships
- LINQ queries
- Tracking
- Migrations
- Transactions
- Concurrency
- Raw SQL
- Performance
EF Core 10 is the LTS generation aligned with .NET 10.
44. DbContext
Example:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<Customer> Customers => Set<Customer>();
public DbSet<Order> Orders => Set<Order>();
}
In normal web applications, DbContext is usually scoped to the request.
Caution: Do not keep one DbContext instance globally for the whole application.
45. EF Core Relationships
Understand:
- One-to-one
- One-to-many
- Many-to-many
- Foreign keys
- Navigation properties
- Required relationships
- Optional relationships
Caution: Do not depend entirely on conventions.
Learn Fluent API configuration for relationships that need explicit behavior.
46. EF Core Migrations
Migrations track schema changes.
Common commands:
dotnet ef migrations add AddCustomerTable
dotnet ef database update
For professional projects, learn how migrations are reviewed and deployed safely.
A migration that works on an empty development database may behave very differently against a production database containing millions of rows.
47. Tracking vs AsNoTracking
Tracking is useful when retrieved entities will be modified and persisted.
For read-only operations:
var customers = await dbContext.Customers
.AsNoTracking()
.ToListAsync();
can avoid unnecessary change tracking.
Caution: Do not mechanically add AsNoTracking() everywhere. Choose based on whether entity tracking is required.
48. EF Core Query Performance
This is one of the most valuable senior-level skills.
Learn to detect:
- N+1 queries
- Unnecessary Include operations
- Over-fetching
- Client-side processing
- Missing indexes
- Large result sets
- Premature ToList calls
- Cartesian explosion
- Excessive tracking
- Slow pagination
Prefer projection when only selected columns are required.
Example:
var customers = await dbContext.Customers
.AsNoTracking()
.Select(c => new CustomerDto(c.Id, c.Name, c.Email))
.ToListAsync();
Caution: Do not retrieve complete entities if the API only needs three columns.
49. SQL Remains Necessary
An ORM does not eliminate the need to understand SQL.
An experienced .NET backend developer should know:
- SELECT
- INSERT
- UPDATE
- DELETE
- JOIN
- GROUP BY
- HAVING
- Subqueries
- CTEs
- Window functions
- Indexes
- Execution plans
- Transactions
- Locking
- Isolation levels
- Deadlocks
When performance problems occur, the generated SQL and database execution plan often matter more than the original LINQ expression.
50. Transactions
Understand ACID concepts:
- Atomicity
- Consistency
- Isolation
- Durability
Learn when EF Core automatically uses transactions and when explicit transaction management is appropriate.
Distributed operations require additional thinking.
A database transaction cannot automatically make an external message broker, email API and payment gateway part of one atomic transaction.
Patterns such as transactional outbox may be appropriate.
51. Optimistic Concurrency
Concurrent users may update the same database record.
Study optimistic concurrency using concurrency tokens.
Typical flow:
User A reads record User B reads record User A updates record User B updates stale version
The application should define what happens next rather than silently losing one user's update.
52. Authentication
Authentication answers:
Who are you?
Study:
- Cookies
- JWT bearer tokens
- OAuth 2.0
- OpenID Connect
- Microsoft Entra ID
- ASP.NET Core Identity
Caution: Do not treat JWT itself as a complete security architecture.
Understand token issuer, audience, signature, expiry, scopes and claims.
53. Authorization
Authorization answers:
What are you allowed to do?
Learn:
- Role-based authorization
- Claims-based authorization
- Policy-based authorization
- Resource-based authorization
Example:
[Authorize(Policy = "CanApprovePayments")]
Policy-based authorization scales better than scattering role-name checks through business code.
54. OAuth 2.0 and OpenID Connect
Experienced developers should understand the distinction.
OAuth 2.0 primarily addresses delegated authorization.
OpenID Connect adds an identity layer used for authentication.
Understand common concepts:
- Authorization server
- Resource server
- Client
- Access token
- ID token
- Refresh token
- Scope
- Claim
- Authorization Code flow
- PKCE
Caution: Avoid implementing your own authentication protocol.
55. Web API Security
Study:
- HTTPS
- Authentication
- Authorization
- Input validation
- CORS
- CSRF where applicable
- Secure headers
- Secret management
- Rate limiting
- Injection prevention
- Output encoding where relevant
- Safe file uploads
- Dependency security
Caution: Do not log credentials or bearer tokens.
56. CORS
CORS controls browser-origin access to web resources.
Caution: Do not solve CORS errors in production by enabling unrestricted origins without understanding the consequences.
Learn:
- Allowed origins
- Allowed methods
- Allowed headers
- Credentials
- Preflight requests
57. Rate Limiting
Rate limiting protects APIs from excessive request volume.
Possible strategies include:
- Fixed window
- Sliding window
- Token bucket
- Concurrency limiting
Rate limiting is useful for:
- Public APIs
- Login endpoints
- Expensive operations
- Third-party integrations
It should complement authentication and infrastructure controls rather than replace them.
58. Caching
Learn different caching levels.
In-memory cache
Useful inside a single application instance.
Distributed cache
Useful when multiple application instances need shared caching.
Typical technology:
- Redis
Understand:
- Cache-aside
- TTL
- Cache invalidation
- Stale data
- Cache stampede
- Distributed locking where necessary
Caution: Do not cache information simply because a cache exists.
59. HttpClient
Calling external HTTP APIs is routine in enterprise applications.
Use HttpClient through appropriate lifecycle management, commonly HttpClientFactory.
Study:
- Typed clients
- Named clients
- Timeouts
- Cancellation
- Retry policies
- Circuit breakers
- Connection pooling
A remote API call can fail even when your own application code is correct.
Design accordingly.
60. Resilience
Distributed applications need resilience.
Learn:
- Timeout
- Retry
- Circuit breaker
- Rate limiting
- Bulkhead/concurrency control
- Fallback
- Idempotency
Retries should only be used where retrying is safe.
Retrying a payment operation without idempotency controls can create duplicate effects.
61. Background Services
ASP.NET Core supports hosted background services.
Learn:
- IHostedService
- BackgroundService
- Cancellation
- Graceful shutdown
Useful examples:
- Processing queued jobs
- Periodic cleanup
- Polling
- Scheduled synchronization
For large-scale job scheduling, dedicated job-processing systems may be preferable.
62. Message Brokers
Backend developers should understand asynchronous messaging even if their first project does not use it.
Learn concepts using systems such as:
- Azure Service Bus
- RabbitMQ
- Apache Kafka
Understand:
- Producer
- Consumer
- Queue
- Topic
- Partition
- Message acknowledgment
- Retry
- Dead-letter queue
- Ordering
- Duplicate delivery
- Idempotency
Caution: Do not assume a message will be delivered exactly once simply because business logic expects it.
63. Event-Driven Architecture
Event-driven architecture connects components using events.
Example:
OrderPlaced ↓ Payment Service Inventory Service Notification Service Analytics Service
Benefits can include looser runtime coupling.
Costs include:
- Harder debugging
- Eventual consistency
- Duplicate handling
- Message ordering problems
- Operational complexity
Use event-driven architecture because the system needs it, not merely because microservices are fashionable.
64. Modular Monolith
Experienced developers should learn modular monolith architecture before assuming every large system requires microservices.
A modular monolith can provide:
- One deployment unit
- Clear module boundaries
- Lower operational complexity
- Easier transactions
- Easier local debugging
Well-designed modules can later be extracted if business or scaling requirements justify the move.
65. Microservices
Study microservices from an operational perspective rather than only drawing service boxes.
Understand:
- Service boundaries
- Independent deployment
- Database ownership
- Service discovery
- API gateway
- Messaging
- Distributed transactions
- Eventual consistency
- Observability
- Fault tolerance
- Deployment complexity
A poorly designed microservice system can be harder to maintain than a well-designed monolith.
66. Clean Architecture
Learn its principles rather than copying folder structures.
Typical conceptual layers:
Infrastructure provides implementations for external concerns.
The core idea is control of dependency direction.
Caution: Do not create dozens of projects merely to claim that an application uses Clean Architecture.
Architecture must solve actual maintainability problems.
67. Domain-Driven Design
DDD becomes useful where business rules are genuinely complex.
Learn:
- Domain model
- Entity
- Value object
- Aggregate
- Aggregate root
- Repository
- Domain service
- Domain event
- Bounded context
- Ubiquitous language
DDD is not required for every CRUD system.
Use its techniques where they make complex business rules easier to model.
68. CQRS
Command Query Responsibility Segregation separates write-oriented and read-oriented responsibilities.
Command:
CreateOrder
Query:
GetOrderById
CQRS does not automatically require:
- Microservices
- Event sourcing
- Separate databases
- A mediator library
Start with the architectural principle before adding infrastructure.
69. Repository Pattern
A common question is whether repositories are needed on top of EF Core.
EF Core already offers repository/unit-of-work-like capabilities through DbSet and DbContext.
A custom repository can still make sense when it provides meaningful abstraction or domain-specific operations.
Caution: Avoid repositories containing methods such as:
GetAll()
Add()
Update()
Delete()
for every entity merely to wrap EF Core mechanically.
70. SOLID Principles
Know SOLID practically.
Single Responsibility Principle
A component should have a focused reason to change.
Open/Closed Principle
Prefer extension without repeatedly modifying stable behavior.
Liskov Substitution Principle
Subtypes should respect contracts expected by callers.
Interface Segregation Principle
Prefer focused interfaces over large interfaces that force irrelevant dependencies.
Dependency Inversion Principle
High-level policies should not be tightly coupled to low-level implementation details.
Interview answers should include examples rather than only expanding the five abbreviations.
71. Common Design Patterns
Know patterns that appear in real .NET applications.
High-value patterns include:
- Strategy
- Factory
- Builder
- Decorator
- Adapter
- Observer
- Mediator
- Template Method
- Chain of Responsibility
- Specification
- Dependency Injection
Caution: Do not force patterns into code before a recurring design problem exists.
72. API Gateway
In distributed systems, an API gateway can provide:
- Routing
- Authentication integration
- Rate limiting
- Aggregation
- Policy enforcement
Understand the purpose before selecting a specific implementation.
73. Docker
Docker has become a normal backend-development skill.
Learn:
- Images
- Containers
- Dockerfile
- Layers
- Ports
- Volumes
- Environment variables
- Networks
- Multi-stage builds
- Docker Compose
- Container registry
A typical deployment flow is:
74. Kubernetes Fundamentals
You do not need deep cluster-administration knowledge for every .NET job.
Developers should still understand:
- Pod
- Deployment
- Service
- ConfigMap
- Secret
- Namespace
- Ingress/Gateway concepts
- Replica
- Liveness probe
- Readiness probe
- Resource limits
- Horizontal scaling
This helps developers design applications that behave correctly in container orchestration environments.
75. Health Checks
Applications should expose health information for infrastructure.
Differentiate:
Liveness
Is the process functioning?
Readiness
Is the application ready to serve traffic?
An application may be alive but temporarily unable to serve traffic.
76. Cloud Skills for .NET Developers
Azure is highly relevant because of its integration with Microsoft technologies.
Learn cloud concepts rather than memorizing every Azure product.
Focus on:
- Azure App Service
- Azure Functions
- Azure Container Apps
- Azure Kubernetes Service
- Azure SQL Database
- Azure Storage
- Azure Service Bus
- Azure Key Vault
- Azure Cache for Redis
- Microsoft Entra ID
- Azure Monitor
- Application Insights
Also understand general cloud concepts transferable to AWS and Google Cloud.
77. Azure App Service
App Service can host web applications and APIs without requiring developers to manage virtual machines directly.
Know:
- Deployment
- Application settings
- Scaling
- Deployment slots
- Logs
- Managed identity
- Custom domains
- TLS
78. Serverless Development
Azure Functions is useful for event-driven and short-lived workloads.
Examples:
- Queue processing
- File processing
- Scheduled jobs
- Webhooks
- Integration workflows
Understand:
- Trigger
- Binding
- Execution model
- Scaling
- Cold-start considerations
- Idempotency
Not every API should be converted into a function.
79. Aspire
Aspire is increasingly relevant for modern distributed-application development.
It provides a code-first orchestration and observability layer for applications consisting of services, databases, queues, containers and other dependencies. It is not a replacement for ASP.NET Core or a production cloud provider.
Learn Aspire after understanding ASP.NET Core and distributed-system fundamentals.
Use it to understand:
- AppHost
- Service references
- Resource definitions
- Local orchestration
- Distributed application dashboard
- Logs
- Metrics
- Traces
- Service dependencies
80. Observability
Production software needs more than logging.
Observability generally covers:
- Logs
- Metrics
- Distributed traces
Example question:
A customer reports that checkout required eight seconds.
Logs may show what happened.
Metrics may show a latency spike.
Distributed tracing may reveal that 6.5 seconds were spent waiting for the payment service.
That is the practical value of observability.
81. OpenTelemetry
OpenTelemetry provides standardized telemetry instrumentation.
Learn:
- Trace
- Span
- Metric
- Resource
- Context propagation
- Exporter
Understand how one request can be traced through:
Distributed tracing becomes particularly valuable in microservice environments.
82. Testing Strategy
Caution: Do not measure testing maturity by the raw number of unit tests.
Use different test types for different risks.
Study:
- Unit tests
- Integration tests
- API tests
- Database integration tests
- Contract tests
- End-to-end tests
- Performance tests
83. Unit Testing
Common frameworks include:
- xUnit
- NUnit
- MSTest
Example:
[Fact]
public void CalculateDiscount_ReturnsTenPercent_ForPremiumCustomer()
{
var service = new DiscountService();
var result = service.CalculateDiscount(CustomerType.Premium, 1000);
Assert.Equal(100, result);
}
Good tests should verify behavior rather than implementation details wherever practical.
84. Mocking
Mocking libraries can simulate dependencies.
Use mocks for boundaries such as:
- External APIs
- Message publishers
- Clock providers
- External services
Caution: Do not mock every class merely because it has an interface.
Excessive mocking can produce tests tightly coupled to implementation.
85. Integration Testing
Integration tests validate multiple components together.
For APIs, test scenarios such as:
These tests can catch problems that isolated unit tests miss.
86. Testcontainers
Container-based integration testing can start real infrastructure dependencies during tests.
Examples:
- SQL Server
- PostgreSQL
- Redis
- RabbitMQ
This can provide more realistic confidence than mocking infrastructure behavior.
87. Performance Engineering
Experienced developers should learn performance investigation, not only performance tips.
Start with measurement.
Investigate:
- CPU usage
- Memory allocation
- GC activity
- Database latency
- External API latency
- ThreadPool starvation
- Lock contention
- Slow serialization
- Large payloads
- Network latency
Caution: Do not optimize code based solely on intuition.
88. Benchmarking
BenchmarkDotNet is commonly used for controlled .NET microbenchmarks.
Use microbenchmarks where you need to compare isolated implementation behavior.
Caution: Do not treat a microbenchmark as a substitute for production-level load testing.
89. API Performance
Check:
- Database query count
- SQL execution time
- Response size
- Serialization cost
- Remote API latency
- Cache hit ratio
- Connection-pool behavior
- Request concurrency
- Memory allocations
A slow controller method may actually be waiting on a slow database or external service.
90. Pagination
Never assume an endpoint can safely return an entire growing table.
Learn:
- Offset pagination
- Keyset/cursor pagination
Example request:
GET /api/orders?page=2&pageSize=25
For very large datasets and continuously changing records, keyset pagination can offer advantages over large offsets.
91. Database Indexing
Learn enough database internals to discuss:
- Clustered indexes
- Non-clustered indexes
- Composite indexes
- Selectivity
- Covering concepts
- Index maintenance
Adding an index can speed reads but adds storage and write overhead.
Use execution plans and workload evidence rather than creating indexes blindly.
92. CI/CD
Learn how software moves from source code to production.
Typical pipeline:
Tools may include:
- GitHub Actions
- Azure DevOps
- Jenkins
- GitLab CI
The underlying CI/CD concepts matter more than the vendor.
93. Git Skills
Experienced professionals should know more than commit and push.
Learn:
- Branching
- Merge
- Rebase
- Cherry-pick
- Tags
- Pull requests
- Conflict resolution
- Revert
- Interactive history investigation
Understand your organization's branching and release strategy.
94. Infrastructure as Code
Cloud infrastructure should ideally be reproducible.
Learn concepts behind:
- Bicep
- Terraform
- ARM templates
Developers do not necessarily need to become infrastructure specialists, but should understand how applications, databases, identities, networks and secrets are provisioned.
95. Secrets Management
Never commit production credentials to source control.
Use appropriate secret management such as:
- Environment configuration
- Secret stores
- Azure Key Vault
- Workload/managed identities
Prefer identity-based access over long-lived credentials when the platform supports it.
96. Production Debugging
This skill separates experienced application developers from developers who only know how to build sample projects.
When an API becomes slow, investigate systematically.
Possible sequence:
- Confirm the affected endpoint.
- Check latency metrics.
- Inspect logs.
- Check distributed traces.
- Examine database queries.
- Inspect external dependencies.
- Review CPU and memory.
- Check thread-pool behavior.
- Look for recent deployments.
- Reproduce the issue when possible.
- Apply the smallest justified fix.
- Measure the result.
Caution: Avoid random code changes.
97. Common Production Problems to Learn
Practice diagnosing:
- High CPU
- Growing memory consumption
- Slow database queries
- Connection-pool exhaustion
- Deadlocks
- ThreadPool starvation
- Timeouts
- Failed external APIs
- Message-processing retries
- Duplicate messages
- Cache failures
- Authentication failures
- Expired certificates
- Misconfigured environment variables
- Container restarts
- Health-check failures
- Deployment configuration mistakes
98. Legacy .NET Modernization
Experienced professionals may be hired specifically to modernize existing systems.
Learn migration paths such as:
Topics worth understanding:
- Package compatibility
- API compatibility
- Windows-only dependencies
- WCF replacements
- Configuration migration
- ASP.NET to ASP.NET Core migration
- Authentication migration
- EF6 versus EF Core differences
- Incremental migration
Large enterprise systems are rarely rewritten safely in one step.
99. Strangler Migration Pattern
The strangler approach gradually replaces parts of a legacy system.
Concept:
It can reduce the risk of a complete rewrite.
100. System Design Skills
At senior level, interviews move beyond coding.
Prepare to design systems such as:
- E-commerce platform
- Order-management system
- Payment service
- Notification platform
- URL shortener
- File-processing service
- Employee-management platform
- Appointment-booking system
- Inventory service
Discuss:
- Functional requirements
- Non-functional requirements
- API design
- Database design
- Caching
- Messaging
- Scalability
- Availability
- Security
- Failure scenarios
- Observability
- Deployment
101. Scalability
Understand two basic approaches.
Vertical scaling
Increase resources on a machine.
Horizontal scaling
Run additional application instances.
Horizontal scaling creates architectural questions involving:
- Session state
- Shared cache
- Distributed locks
- Background jobs
- File storage
- Message consumption
Applications designed around local machine state can become difficult to scale horizontally.
102. Idempotency
Idempotency is particularly important for payments and distributed APIs.
Imagine:
Client sends payment request. Server processes payment. Network connection fails before response. Client retries.
Without idempotency handling, the payment may be processed twice.
A properly designed idempotency mechanism lets the server recognize the retry and return the previous result instead of repeating the side effect.
103. Eventual Consistency
Distributed services cannot always update everything atomically.
Example:
There may be short periods when different services represent slightly different states.
That is eventual consistency.
Systems must explicitly handle failures, retries and reconciliation.
104. Transactional Outbox Pattern
Consider:
- Store order.
- Publish OrderCreated message.
What happens if the database succeeds but message publishing fails?
The outbox pattern stores the business change and outgoing event in the same database transaction.
A background publisher later sends the event.
This addresses an important distributed-system consistency problem.
105. API Idempotency and Retry Design
Classify operations carefully.
A retry may be safe for a read request.
A retry for "charge credit card" requires additional controls.
Before configuring automatic retry, ask:
- Can the operation safely execute twice?
- Does the API support idempotency keys?
- Which failures are transient?
- What is the maximum retry duration?
- Should exponential backoff be used?
106. Clean Code for Experienced .NET Developers
Good code is primarily understandable code.
Prefer:
public async Task<Order> CreateOrderAsync(CreateOrderRequest request)
over vague names such as:
public async Task<Order> Process(Data d)
Use meaningful:
- Classes
- Methods
- Variables
- Interfaces
- Exceptions
- Domain terminology
Caution: Avoid unnecessarily clever abstractions.
107. Code Review Skills
When reviewing .NET code, check more than syntax.
Evaluate:
- Correctness
- Null handling
- Error handling
- Async behavior
- Cancellation
- Thread safety
- Security
- Database access
- Query efficiency
- API contracts
- Logging
- Testability
- Naming
- Coupling
- Duplication
- Resource disposal
- Observability
- Backward compatibility
A senior review should explain the risk behind a requested change.
108. Anti-Patterns to Recognize
Watch for:
- God classes
- Fat controllers
- Anemic abstractions without value
- Static mutable global state
- Sync-over-async
- Catching Exception and ignoring it
- Returning database entities everywhere
- Repository wrapping every DbSet mechanically
- Excessive generic abstractions
- Premature microservices
- Excessive interfaces
- Service locator pattern
- Hard-coded secrets
- Excessive logging
- N+1 database queries
- Unbounded result sets
- Business logic inside controllers
- Copy-pasted validation
- Unnecessary reflection
- Distributed monolith architecture
109. Frontend Options in the .NET Ecosystem
Backend specialists do not need to master every frontend framework.
Be aware of:
- Blazor
- Razor Pages
- MVC Views
- React with ASP.NET Core
- Angular with ASP.NET Core
For full-stack .NET development, Blazor is worth learning.
For enterprise projects using separate frontend teams, React or Angular plus ASP.NET Core APIs is also common.
110. Blazor
Blazor allows developers to build interactive web interfaces using .NET and C#.
Understand its major hosting/rendering approaches conceptually before selecting it.
ASP.NET Core 10 includes continuing Blazor improvements, including security samples and platform enhancements.
Learn Blazor when your target role requires .NET full-stack development.
Backend-focused professionals should prioritize ASP.NET Core API skills first.
111. .NET MAUI
.NET MAUI targets multi-platform application development.
It becomes relevant when your career target includes:
- Android
- iOS
- macOS
- Windows applications
It is not mandatory for backend .NET development.
Caution: Do not add MAUI to your roadmap merely to claim knowledge of the entire ecosystem.
112. What Experienced Java Developers Can Reuse
Java developers already understand many transferable ideas.
Java → C# mapping examples:
| Java | .NET/C# |
|---|---|
| JVM | CLR |
| JDK | .NET SDK |
| Java | C# |
| Spring Boot | ASP.NET Core |
| Spring DI | ASP.NET Core DI |
| JPA/Hibernate | EF Core |
| Maven/Gradle | dotnet CLI/MSBuild/NuGet |
| application.properties | appsettings.json/configuration providers |
| CompletableFuture | Task |
| Streams | LINQ |
| Servlet filters/interceptors concepts | Middleware/filters |
| JUnit | xUnit/NUnit/MSTest |
| Spring Security | ASP.NET Core Authentication/Authorization |
A Java professional can therefore progress faster by focusing on ecosystem differences instead of relearning general software engineering.
113. Important Differences for Java Developers
Pay particular attention to:
- Properties
- Delegates
- Events
- LINQ
- Extension methods
- Nullable reference types
- async/await
- Value types
- Records
- Structs
- Generics differences
- Dependency-injection conventions
- ASP.NET middleware
- EF Core query behavior
- IDisposable
- Task-based asynchronous programming
These concepts provide more value than spending days comparing loop syntax.
114. Recommended Project Architecture
A realistic medium-sized API might use:
src/
Company.Api/
Company.Application/
Company.Domain/
Company.Infrastructure/
tests/
Company.UnitTests/
Company.IntegrationTests/
However, this is an example rather than a mandatory structure.
For small systems, fewer projects may be cleaner.
Architecture should reflect project complexity rather than a diagram copied from another application.
115. Project 1: Production-Style REST API
Build an Order Management API.
Features:
- Customer management
- Product management
- Order creation
- Order status
- Pagination
- Search
- Authentication
- Authorization
- Validation
- EF Core
- SQL Server/PostgreSQL
- Global exception handling
- Structured logging
- OpenAPI
- Unit tests
- Integration tests
- Docker
This project proves more than building ten small CRUD demos.
116. Project 2: Secure Enterprise API
Build an Employee Expense Management system.
Features:
- Employee login
- Manager approval
- Role/policy authorization
- Expense submission
- Document upload
- Approval workflow
- Audit history
- Notifications
- Database transactions
- Optimistic concurrency
- API versioning
- Centralized logging
- Tests
This project demonstrates business workflow design rather than simple CRUD.
117. Project 3: Distributed .NET Application
Build an e-commerce backend using:
- Catalog service
- Order service
- Payment simulator
- Notification worker
- Redis
- Message broker
- SQL database
- Docker
- Aspire
- OpenTelemetry
Practice:
- Eventual consistency
- Idempotency
- Retry
- Outbox
- Distributed tracing
- Failure recovery
The value comes from implementing failure scenarios, not from creating many services.
118. Project 4: Legacy Modernization Exercise
Create a small older-style application or use a sample legacy codebase.
Then migrate it toward:
- Modern .NET
- Dependency injection
- ASP.NET Core
- EF Core
- Configuration providers
- Modern authentication
- Automated tests
- Containers
Document migration decisions.
This project is particularly valuable for experienced enterprise developers.
119. What to Put on GitHub
A professional repository should demonstrate engineering quality.
Include:
- Useful README
- Architecture explanation
- Setup instructions
- Database setup
- API examples
- Docker configuration
- Tests
- Error handling
- Configuration guidance
- No secrets
- Meaningful commit history where possible
Caution: Avoid uploading dozens of almost identical tutorial projects.
One well-engineered application is usually more convincing than many incomplete demos.
120. .NET Interview Preparation Areas
Prepare five dimensions.
C# Language
- OOP
- Generics
- LINQ
- Delegates
- Events
- async/await
- Nullable types
- Exceptions
- Collections
- Records
- Value/reference semantics
.NET Runtime
- CLR
- GC
- JIT
- Assemblies
- Memory management
- IDisposable
ASP.NET Core
- DI
- Middleware
- Routing
- API design
- Authentication
- Authorization
- Configuration
- Logging
- Caching
Database
- EF Core
- SQL
- Indexes
- Transactions
- Concurrency
- Query optimization
Architecture
- SOLID
- Design patterns
- Clean Architecture
- Microservices
- Messaging
- Caching
- Resilience
- System design
121. Senior Interview Questions to Practice
Be prepared to answer scenario-based questions such as:
- Why is this API slow?
- How would you diagnose high CPU?
- How would you find a memory leak?
- Why might DbContext create problems in a singleton?
- How would you prevent duplicate payment requests?
- How would you handle an unavailable downstream API?
- How would you migrate .NET Framework to modern .NET?
- When would you choose a monolith instead of microservices?
- How would you secure a public API?
- How would you implement distributed transactions?
- How would you troubleshoot a slow EF Core query?
- How would you scale the application horizontally?
- How would you design an audit trail?
- How would you process one million messages reliably?
- How would you deploy without downtime?
Senior interviews test engineering decisions and trade-offs, not merely definitions.
122. Four-Month Learning Roadmap
For someone who already knows software development, a focused roadmap can be organized into four stages.
Month 1: C# and .NET Internals
Study:
- Modern C# syntax
- OOP differences
- Generics
- Delegates
- LINQ
- Records
- Nullable reference types
- async/await
- CancellationToken
- Collections
- Exceptions
- CLR
- Garbage collection
- IDisposable
- dotnet CLI
- NuGet
Build:
- Console-based application with clean domain logic
Goal:
Become comfortable reading and writing idiomatic C#.
Month 2: ASP.NET Core and Database Development
Study:
- ASP.NET Core architecture
- Controllers
- Minimal APIs
- Middleware
- DI
- Configuration
- Logging
- Validation
- Authentication
- Authorization
- OpenAPI
- EF Core
- Migrations
- SQL
- Transactions
- Query optimization
Build:
- Complete production-style REST API
Goal:
Become capable of working on a normal enterprise .NET backend.
Month 3: Architecture and Production Engineering
Study:
- SOLID
- Design patterns
- Clean Architecture
- DDD fundamentals
- CQRS
- Caching
- Redis
- Message brokers
- Background services
- Resilience
- Testing
- Docker
- Observability
- OpenTelemetry
Build:
- Business workflow application with asynchronous processing
Goal:
Move from framework knowledge to software-engineering competence.
Month 4: Cloud, Distributed Systems and Interview Preparation
Study:
- Azure fundamentals for application developers
- Container deployment
- Kubernetes basics
- Aspire
- Microservices
- Eventual consistency
- Outbox
- Idempotency
- Distributed tracing
- CI/CD
- System design
- Production debugging
Build:
- Distributed application or modernization project
Then practice:
- C# interview questions
- ASP.NET Core interviews
- EF Core scenarios
- SQL questions
- Architecture questions
- System-design problems
- Production incident scenarios
Goal:
Demonstrate senior-level problem solving rather than only framework familiarity.
123. Priority Order When Time Is Limited
If you need job-ready .NET knowledge quickly, learn in this order:
- C# core and modern language features
- async/await and LINQ
- ASP.NET Core Web API
- Dependency injection and middleware
- EF Core
- SQL
- Authentication and authorization
- Error handling and logging
- Testing
- Git
- Docker
- Caching
- HTTP integrations
- Cloud fundamentals
- Architecture
- Distributed-system concepts
- Observability
- CI/CD
- Kubernetes basics
- Aspire
Caution: Do not start with Kubernetes or microservices while struggling with dependency injection, HTTP and SQL.
124. Skills Expected at Different Experience Levels
Mid-Level .NET Developer
Should generally be able to:
- Build APIs independently
- Write good C#
- Use EF Core
- Write SQL
- Implement authentication
- Handle errors
- Write tests
- Debug application issues
- Use Git
- Understand deployment
Senior .NET Developer
Should additionally handle:
- Architecture decisions
- Performance troubleshooting
- Security review
- Database optimization
- Distributed systems
- Resilience
- Production incidents
- Code reviews
- Technical mentoring
- Cloud deployment
- Observability
Technical Lead
Should additionally understand:
- System boundaries
- Cross-team architecture
- Technology selection
- Migration strategy
- Delivery risk
- Technical debt
- Non-functional requirements
- Production operations
- Engineering standards
Solution Architect
Focus moves further toward:
- System-level architecture
- Integration
- Scalability
- Security
- Reliability
- Cloud architecture
- Cost
- Governance
- Technology strategy
- Migration planning
125. Job Opportunities After Learning .NET
Modern .NET skills support several career directions.
.NET Backend Developer
Typical responsibilities:
- REST APIs
- Business services
- Database integration
- Authentication
- External integrations
- Testing
- Production support
Core skills:
C# + ASP.NET Core + EF Core + SQL
ASP.NET Core Developer
More specialized web/backend role.
Expected knowledge often includes:
- ASP.NET Core
- Web API
- MVC
- Authentication
- Authorization
- Middleware
- DI
- EF Core
Full-Stack .NET Developer
Backend:
- C#
- ASP.NET Core
- EF Core
Frontend may involve:
- Angular
- React
- Blazor
Also useful:
- SQL
- Git
- Testing
- Cloud
- Docker
Azure .NET Developer
Focus:
- ASP.NET Core
- Azure services
- Managed identities
- Key Vault
- Service Bus
- App Service
- Functions
- Azure SQL
- Storage
- Monitoring
Microservices Developer
Expected areas:
- ASP.NET Core
- Docker
- Messaging
- Caching
- Resilience
- Distributed tracing
- Kubernetes
- Cloud
Senior .NET Developer
Responsibilities often extend beyond coding into:
- Architecture
- Code reviews
- Performance
- Security
- Production debugging
- Mentoring
- Technical design
.NET Technical Lead
Typical responsibilities include:
- Technical decisions
- Architecture reviews
- Team guidance
- Code-quality standards
- Estimation support
- Production troubleshooting
- Cross-team coordination
.NET Solution Architect
Relevant skills include:
- Distributed architecture
- Integration patterns
- Azure architecture
- Security
- Scalability
- Availability
- Migration
- Observability
- Cost considerations
Legacy Modernization Engineer
Organizations maintaining older Microsoft applications need professionals who understand both old and modern stacks.
Useful combination:
.NET Framework + ASP.NET MVC/Web Forms/WCF awareness + modern .NET + ASP.NET Core + cloud + migration architecture
Cloud-Native .NET Engineer
Focus areas:
- Containers
- Kubernetes
- Messaging
- Observability
- Aspire
- Cloud infrastructure
- Distributed systems
Platform or Backend Infrastructure Engineer
Advanced .NET professionals may work on:
- Internal frameworks
- Shared libraries
- Developer platforms
- APIs
- Messaging infrastructure
- Observability
- Performance tooling
126. Skills That Increase Employability
Caution: Avoid trying to become an expert in everything.
A strong combination is:
C# + ASP.NET Core + EF Core + SQL + REST + Authentication + Testing + Docker + Azure + System Design
Then add:
Redis + Messaging + Kubernetes + OpenTelemetry
for senior cloud-oriented positions.
Architecture expertise becomes increasingly valuable as experience grows.
127. Common Learning Mistakes
Learning only C# syntax
Knowing language syntax does not make someone production-ready.
Learn the full application stack.
Building only CRUD applications
CRUD is useful initially but does not teach:
- Concurrency
- Security
- Reliability
- Messaging
- Performance
- Distributed systems
Ignoring SQL because EF Core is available
This creates weak backend developers.
Jumping directly into microservices
First understand modular design, HTTP, databases, failures and observability.
Memorizing interview answers
Experienced interviews frequently use scenarios where memorized definitions provide little help.
Ignoring deployment
An application that only runs inside Visual Studio does not represent complete backend engineering.
Ignoring production debugging
Learn how applications fail.
Over-engineering sample projects
Caution: Do not add CQRS, repositories, event sourcing, microservices and ten projects to a simple Todo application merely to demonstrate architecture.
128. What You Do Not Need to Master Immediately
For a backend .NET role, you can postpone:
- Advanced WPF
- Advanced WinForms
- Game development
- Unity
- Deep MAUI
- F#
- Visual Basic
- Advanced compiler development
- CLR implementation internals
- Native interop internals
Learn them when your target role requires them.
129. Production-Ready .NET Checklist
Before considering yourself job-ready for experienced backend work, verify that you can:
- Build an ASP.NET Core API from scratch
- Structure the solution sensibly
- Configure dependency injection
- Write asynchronous APIs correctly
- Use CancellationToken
- Design REST endpoints
- Validate input
- Handle exceptions centrally
- Implement authentication
- Implement authorization
- Use EF Core correctly
- Write SQL
- Diagnose slow database queries
- Implement pagination
- Handle transactions
- Understand concurrency
- Integrate external APIs
- Configure timeouts and resilience
- Use caching
- Process background work
- Write unit tests
- Write integration tests
- Containerize the application
- Configure logs
- Understand metrics
- Understand distributed traces
- Deploy through CI/CD
- Store secrets securely
- Discuss scaling
- Explain architecture decisions
- Diagnose common production problems
If several of these areas remain unclear, use them to drive your next learning cycle.
130. Frequently Asked Questions
1. Is .NET the same as C#?
No.
C# is a programming language.
.NET is the runtime and development platform on which C# applications commonly execute.
2. Is ASP.NET Core different from .NET?
Yes.
.NET is the underlying platform.
ASP.NET Core is the web-development framework built on .NET.
3. Should experienced developers learn .NET Framework first?
Usually no.
Start with modern .NET unless your target job specifically involves .NET Framework applications.
Learn enough .NET Framework later to maintain or migrate legacy enterprise systems.
4. Which .NET version should I learn in 2026?
For stable production-oriented learning, .NET 10 is the appropriate LTS baseline. Microsoft gives even-numbered .NET releases LTS support for three years.
5. Should I learn .NET 11 now?
Learn about it, but do not make preview technology the foundation of your production roadmap.
.NET 11 and C# 15 are currently preview-era technologies.
6. Which C# version should I learn?
Learn modern C# using the stable version associated with your production .NET version.
For .NET 10, that means C# 14.
7. Is C# difficult for a Java developer?
The transition is usually manageable because both ecosystems share many familiar concepts such as static typing, classes, interfaces, generics, dependency injection and enterprise backend development.
Spend most of your time on C#-specific and .NET-specific features.
8. Can a Java developer switch to .NET?
Yes.
Skills such as REST APIs, SQL, distributed systems, testing, cloud architecture and design patterns transfer directly.
The main work is learning C#, the .NET runtime and Microsoft ecosystem conventions.
9. How long does an experienced programmer need to learn .NET?
There is no universal duration.
A developer with strong backend experience can usually learn syntax quickly, but becoming production-ready also requires ASP.NET Core, EF Core, security, testing, deployment and debugging skills.
Measure progress through projects rather than calendar days.
10. Is ASP.NET Core enough for getting a .NET job?
It is a major component, but professional backend roles usually require surrounding skills such as:
- C#
- SQL
- EF Core
- REST
- Authentication
- Git
- Testing
- Deployment
Cloud and Docker knowledge can further expand the range of roles you can target.
11. Should I learn MVC or Web API first?
For backend-focused careers, prioritize Web API.
Learn MVC when working on applications that render server-side web pages.
12. Should I learn controllers or Minimal APIs?
Learn both.
Controllers remain valuable for structured APIs.
Minimal APIs are valuable for lightweight APIs and services.
The concepts behind HTTP, validation, DI and security apply to both.
13. Is Entity Framework Core mandatory?
It is highly useful in mainstream .NET application development.
However, you should also understand SQL and direct database behavior.
14. Can I learn EF Core without SQL?
Technically you can write basic applications, but it is a poor professional strategy.
You need SQL to understand query behavior, indexes, performance and database failures.
15. Do I need Dapper?
Not immediately.
Learn EF Core deeply first.
Dapper or direct SQL approaches can be added when your project requires different data-access characteristics.
16. Which database should a .NET developer learn?
SQL Server is highly relevant.
Also understand relational database concepts well enough to work with PostgreSQL or other relational engines.
The transferable knowledge is more valuable than vendor-specific syntax alone.
17. Should I use the repository pattern with EF Core?
Only when it adds useful abstraction.
Creating a generic repository around every DbSet can add complexity without meaningful value.
18. Is Clean Architecture mandatory?
No.
It is an architectural approach, not a framework requirement.
Use its dependency-management ideas where they help the project.
19. Should every .NET application use microservices?
No.
A modular monolith is often simpler.
Use microservices when independent deployment, scaling, organizational boundaries or other requirements justify the additional operational complexity.
20. Is CQRS mandatory for microservices?
No.
CQRS and microservices solve different architectural problems.
They can be used together, but neither requires the other.
21. Does CQRS require MediatR?
No.
CQRS is an architectural pattern.
A mediator library is one possible implementation technique.
22. Does CQRS require separate databases?
No.
Command and query models can initially use the same database.
Physical separation is an architectural decision.
23. Is async/await important in .NET interviews?
Yes.
Backend developers should clearly understand asynchronous I/O, Task, cancellation, exception handling and common blocking mistakes.
24. Does async create a new thread?
Not automatically.
For asynchronous I/O, execution can wait without occupying a thread for the entire operation.
Async and parallelism are different concepts.
25. Why should I avoid Task.Result?
It blocks rather than asynchronously awaiting completion.
In some environments it can contribute to deadlocks, and in server workloads unnecessary blocking can reduce scalability.
Prefer async all the way through where practical.
26. What is dependency injection?
Dependency injection provides dependencies to a component rather than making the component construct those dependencies itself.
It improves separation and enables easier substitution and testing.
27. What is the most common DI mistake?
Incorrect service lifetimes are a major source of problems.
For example, allowing a singleton to depend improperly on request-scoped state can produce lifetime and concurrency issues.
28. Why should DbContext normally be scoped?
A request scope provides a natural unit for database work while avoiding globally shared context instances.
DbContext is not intended to be one shared singleton across concurrent requests.
29. What is the N+1 query problem?
An initial database query is followed by additional queries for each retrieved item.
For large result sets, this can create many unnecessary database round trips.
30. What is AsNoTracking?
It tells EF Core that returned entities do not need change tracking.
It is useful for read-only queries.
31. What is middleware?
Middleware is a component in the ASP.NET Core request pipeline that can inspect, modify or handle HTTP requests and responses.
32. Does middleware order matter?
Yes.
Authentication, authorization, routing, exception handling and other middleware may depend on correct ordering.
33. What is JWT?
JWT is a token format commonly used to represent signed claims.
It is frequently used with bearer-token authentication.
A secure authentication architecture involves more than simply creating a JWT string.
34. What is the difference between authentication and authorization?
Authentication establishes identity.
Authorization determines permissions.
35. What is OAuth 2.0?
OAuth 2.0 is primarily an authorization framework for delegated access.
36. What is OpenID Connect?
OpenID Connect adds an identity layer on top of OAuth-related flows and is commonly used for user authentication.
37. Should secrets be stored in appsettings.json?
Development defaults may sometimes be stored in configuration files, but production credentials should not be committed to source control.
Use appropriate secret management.
38. Why should I learn Docker?
Modern applications are frequently packaged and deployed in containers.
Docker knowledge also improves understanding of repeatable environments and deployment dependencies.
39. Must every .NET developer know Kubernetes?
Not deeply.
Backend developers working with cloud-native systems should understand core Kubernetes concepts even if a platform team manages the cluster.
40. What is Aspire?
Aspire is a code-first orchestration and observability layer for distributed applications. It can model services, databases, queues, caches and containers and provide a unified local development experience. It is not a replacement for your application framework or cloud provider.
41. Should beginners start with Aspire?
Not before understanding ASP.NET Core and normal application dependencies.
Experienced developers can introduce it once they understand service composition and distributed systems.
42. Should I learn Azure or AWS with .NET?
Either can host .NET applications.
Azure has strong integration with the Microsoft ecosystem, making it a natural choice for many .NET career paths.
General cloud architecture skills remain transferable.
43. Is Azure certification mandatory for a .NET job?
No.
Practical ability to design, build and deploy applications is generally more fundamental than certification.
A certification can supplement experience but does not replace it.
44. What is distributed tracing?
Distributed tracing follows a request as it travels through multiple services and dependencies.
It helps determine where latency or failures occur in distributed applications.
45. What is OpenTelemetry?
OpenTelemetry is an observability framework used to collect and export telemetry such as traces, metrics and related application signals.
46. What should I learn for a senior .NET interview?
Focus on:
- Modern C#
- ASP.NET Core
- EF Core
- SQL
- Security
- Async programming
- Performance
- Testing
- Architecture
- Cloud
- Distributed systems
- Production debugging
- System design
47. Are design patterns important in .NET interviews?
Yes, but interviewers usually care more about knowing when a pattern is useful than memorizing definitions.
Explain the problem, pattern, trade-off and a realistic example.
48. How important is SQL in senior .NET roles?
Very important for database-backed backend systems.
A senior developer should be able to investigate a slow query, understand indexes and discuss transactions and concurrency.
49. Do senior .NET developers need frontend skills?
Not necessarily.
Backend specialists can build strong careers without deep frontend expertise.
Full-stack positions naturally require additional frontend knowledge.
50. Should I learn Blazor?
Learn it when targeting full-stack .NET or Blazor-specific work.
Backend candidates should prioritize ASP.NET Core APIs first.
51. Should I learn .NET MAUI?
Only if mobile or cross-platform client application development is relevant to your target role.
It is not a prerequisite for backend development.
52. What is more important: C# or ASP.NET Core?
Both serve different purposes.
C# is the language.
ASP.NET Core is the web framework.
A backend developer needs strong working knowledge of both.
53. Should experienced developers practice DSA?
Yes, particularly for employers that use coding rounds.
Prioritize practical data structures and problem solving rather than allowing DSA preparation to replace backend engineering skills.
54. Which data structures should a .NET developer know?
At minimum:
- Arrays
- Lists
- Dictionaries
- Hash sets
- Queues
- Stacks
- Trees
- Graph fundamentals
- Heaps
- Linked lists
Also understand time and space complexity.
55. Is system design required for experienced .NET developers?
For many senior and lead interviews, yes.
System design demonstrates whether you can make decisions beyond individual classes and methods.
56. What should I discuss during a system-design interview?
Discuss:
- Requirements
- Constraints
- APIs
- Data model
- Components
- Scaling
- Caching
- Messaging
- Security
- Reliability
- Failures
- Observability
Explain trade-offs instead of pretending there is one perfect architecture.
57. How do I become production-ready instead of tutorial-ready?
Build an application containing:
- Authentication
- Authorization
- Database
- Transactions
- Validation
- Error handling
- Logging
- Tests
- Docker
- External API calls
- Resilience
- CI/CD
- Monitoring
Then intentionally introduce failures and troubleshoot them.
58. How many projects are enough?
There is no required number.
For an experienced developer changing stacks, two or three substantial projects usually teach more than dozens of repetitive CRUD applications.
59. What type of project is best for experienced professionals?
Choose a workflow-based business application.
Examples:
- Order management
- Expense approval
- Booking system
- Inventory management
- Payment workflow
These naturally introduce realistic architectural problems.
60. What is the biggest difference between junior and senior .NET learning?
Junior learning focuses heavily on:
How do I implement this?
Senior learning adds:
Why should it be implemented this way?
What happens when it fails?
How does it scale?
How will we monitor it?
How will another developer maintain it?
What trade-offs did we accept?
That shift from syntax to engineering decisions should guide the entire .NET learning roadmap.
131. Final Skill Map
A useful mental model for an experienced .NET professional is:
Language
C#
Runtime
CLR + GC + JIT + memory management
Application Framework
ASP.NET Core
Data
EF Core + SQL
Application Engineering
Dependency Injection + Configuration + Logging + Validation + Testing
Security
Authentication + Authorization + OAuth 2.0 + OpenID Connect + Secrets
Architecture
SOLID + Patterns + Modular Architecture + DDD + CQRS
Distributed Systems
Messaging + Caching + Resilience + Idempotency + Eventual Consistency
Cloud Native
Docker + Azure + Kubernetes + Aspire
Production Engineering
CI/CD + Observability + OpenTelemetry + Performance + Incident Debugging
Senior Engineering
System Design + Architecture Decisions + Code Reviews + Modernization + Technical Leadership
For an experienced professional, reaching the final layers matters more than memorizing every API in the framework.