Appearance
ADR-001: Language and Framework
Status: Accepted Date: 2026-02-07
Context
The platform requires a backend API supporting complex relational data, role-based permissions, real-time features, and multi-phase development over an extended period. The team needed to choose between C#/.NET, Python/FastAPI, and TypeScript/Node.js.
Decision
C# / .NET
Rationale
- The primary backend developer has the most hands-on experience building full APIs in C# (auth, DB queries, middleware)
- .NET provides SignalR for real-time features, which is needed from Phase 1
- EF Core is a mature ORM for the complex relational model (projects, members, roles, relationships)
- Strong typing helps catch permission logic bugs at compile time, which is critical given the granular visibility rules
- Excellent performance characteristics for the expected workload
Alternatives Considered
- Python / FastAPI - Faster prototyping, good async support, easier AI integration. Rejected because the team has less API-building experience in Python, and shipping speed matters more than framework features
- TypeScript / Node.js - End-to-end JS/TS with the frontend. Rejected for the same experience-based reasoning
Consequences
- Solution structure follows .NET conventions (projects, namespaces, NuGet packages)
- EF Core for database access
- SignalR for real-time communication
- Deployment targets need .NET runtime support