Tech Stack Overview
Purpose
This page defines the AIC default technology stack for modern .NET delivery.
The stack is intentionally opinionated. It reduces debate, improves repeatability and helps teams move quickly while preserving quality and security.
Stack Layers
Language
C#
Production baseline is C# 14 with .NET 10.
Runtime
.NET 10 LTS
Default production runtime.
Preview track
.NET 11 / C# 15
Approval required for production use.
Web APIs
ASP.NET Core
Minimal APIs or controllers depending complexity.
Desktop Windows
WPF
For Windows-only line-of-business applications.
Cross-platform apps
.NET MAUI
For mobile or cross-platform desktop requirements.
Primary persistence
MongoDB
Default operational data store for AIC products and platforms.
Relational / ORM
EF Core
Secondary option where relational consistency, reporting or customer constraints justify it.
High-performance SQL
Dapper
Targeted use only where SQL is explicitly required.
Caching
Redis
Default distributed cache, session cache, rate-limit store and short-lived coordination layer.
Testing
NUnit, Moq, dotnet test
NUnit is the default test framework; Moq is the default mocking library unless a project exception is approved.
Static analysis
Roslyn analyzers, ReSharper
Enforced locally and in CI.
Formatting
.editorconfig, dotnet format, ReSharper cleanup
Consistent style across IDEs.
Observability
OpenTelemetry-compatible logs, metrics and traces
Correlation required.
Distributed local dev
Aspire where useful
Especially for multi-service applications, MongoDB, Redis and message brokers.
API documentation
OpenAPI
Generated and reviewed.
CI/CD
Azure DevOps or GitHub Actions
Customer environment may dictate.
Package management
NuGet central package management
Approved feeds only.
Secrets
Managed secrets platform
No secrets in source control.
Containers
Docker / OCI images
When deployment model requires it.
Default Technology Choices
Adopt by default
Use these unless there is a clear reason not to:
.NET 10 LTS
C# 14
ASP.NET Core
MongoDB as the primary persistence layer
Redis for distributed caching and short-lived coordination
WPF for Windows-only desktop apps
.NET MAUI for justified cross-platform apps
NUnit for automated tests
Moq for mocking and test doubles
ReSharper and Roslyn analyzers
.editorconfigglobal.jsonOpenAPI for APIs
structured logging
OpenTelemetry-compatible telemetry
Use with review
Use these after architecture review:
.NET 11 preview / C# 15
EF Core / relational database as the main persistence layer
Native AOT
gRPC
Blazor Hybrid
Dapper-heavy data access
event sourcing
CQRS at infrastructure scale
microservices
custom security frameworks
custom serialization protocols
Avoid for new greenfield projects
Avoid unless required by customer, legacy integration or specific constraint:
unsupported .NET versions
.NET Framework for new systems
manually managed deployment packages without CI/CD
direct database access from UI projects
business logic in controllers, views or pages
ad hoc repository structures
unapproved NuGet feeds
unmaintained packages
using relational persistence by habit when MongoDB is better aligned to the domain
using in-memory cache as a substitute for Redis in distributed systems
Stack Selection Decision
Before selecting technology, answer:
What user or operational need does it serve?
Is it supported for the expected life of the solution?
Does AIC have delivery capability in it?
Does the customer permit it?
Does it meet security and accreditation requirements?
Can it be tested and operated?
Can it be maintained by a future team?
Does it create reusable IP?
Does it reduce or increase project risk?
Is there a simpler supported option?
Technology Exception Record
Any non-standard technology must record:
technology name
owner
reason
alternatives considered
security assessment
licensing assessment
support model
operational impact
exit plan
approval
Was this helpful?

