C#
Good language. We migrate off it for the ecosystem lock-in, not the syntax.
C# is a well-designed language — pattern matching, records, async/await, and LINQ are genuinely good, and ASP.NET Core is fast and well-engineered. A team productive in C# is using a capable stack, and there is nothing embarrassing about running it.
We'd migrate a client off C# for reach, not for quality. The friction is ecosystem gravity — Visual Studio, Azure, NuGet — and a default culture of heavy enterprise patterns that can bury a simple CRUD app under DI frameworks and CQRS. When a team wants out of that lock-in, or wants one language across frontend and backend, we propose TypeScript: comparable type safety with strictNullChecks on by default, and a universal runtime. For an existing .NET investment that is delivering, ASP.NET Core remains a solid place to stay.