Skip to content

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