{"id":56672,"date":"2025-05-07T10:05:00","date_gmt":"2025-05-07T17:05:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=56672"},"modified":"2025-05-09T09:08:14","modified_gmt":"2025-05-09T16:08:14","slug":"why-we-built-our-startup-in-csharp","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/why-we-built-our-startup-in-csharp\/","title":{"rendered":"Why we built our startup in C#"},"content":{"rendered":"<blockquote><p>This is a guest blog post by Sam Cox. Sam is the Co-Founder &amp; CTO of Tracebit.<\/p><\/blockquote>\n<p>When we started building Tracebit &#8211; a B2B SaaS security product &#8211; one of my key early decisions was to pick a programming language. While many startups gravitate toward Python, TypeScript, Golang, or Rust, I went a different way: C#.<\/p>\n<p>I\u2019ve <a href=\"https:\/\/tracebit.com\/blog\/why-tracebit-is-written-in-c-sharp\">blogged<\/a> quite a bit about this decision before and I wanted to share a few highlights here.<\/p>\n<h2>Productivity First<\/h2>\n<p>I think a stack which lets you spend time on what actually matters is the core of a great developer experience. I wanted:<\/p>\n<ul>\n<li>an expressive, fully-featured language which would let us quickly test and refine ideas<\/li>\n<li>the assurance offered by static types when maintaining and refactoring code<\/li>\n<li>a stable platform that would still work well as our team and codebase grew<\/li>\n<\/ul>\n<p>C# has allowed us to be highly productive from the earliest days and it feels like a really solid foundation to build on.<\/p>\n<h2>Modern, Open &amp; Cross-Platform<\/h2>\n<p>I was pleasantly surprised to find that .NET is now fully open source and MIT-licensed. The cross-platform support lets us develop on MacBooks, and deploy to Linux containers on ARM cores. Microsoft&#8217;s <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-chiseled-containers\/\">&#8220;chiseled&#8221; container images<\/a> are a nice touch too, giving us a lean deployment option which minimizes CVE management.<\/p>\n<h2>Popularity<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/stack-overflow.png\" alt=\"Stack Overflow survey results for most popular programming languages\" \/>\n<em>Stack Overflow Developer Survey 2024<\/em><\/p>\n<p>C# consistently ranks as a highly popular programming language, though perhaps without generating the buzz that some other languages might &#8211; especially among startups! This established presence gives us real advantages:<\/p>\n<ul>\n<li>A great talent pool from which to hire<\/li>\n<li>Plenty of world-class libraries at our fingertips<\/li>\n<li>Lots of documentation and examples when needed<\/li>\n<li>Well-traveled paths with fewer unexpected roadblocks<\/li>\n<\/ul>\n<h2>Rich Standard Library<\/h2>\n<p>The .NET ecosystem comes with quality libraries for just about everything we\u2019ve needed. Along with the usual suspects (collections, JSON processing, etc), <a href=\"https:\/\/learn.microsoft.com\/ef\/\">Entity Framework<\/a> and <a href=\"https:\/\/dotnet.microsoft.com\/apps\/aspnet\">ASP.NET<\/a> stand out as excellent frameworks in which to build.<\/p>\n<p>This has been particularly valuable for us as a security product. We have high standards for dependencies, and having so many trusted and well-maintained components available has saved us a lot of time!<\/p>\n<h2>Expressive language features<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/language-features.png\" alt=\"C# code snippet with labels for language features\" \/><\/p>\n<p>C# as a language has many nice features, such as LINQ, pattern-matching, anonymous functions, primary constructors and null-coalescing operators that make it both expressive and succinct. I\u2019ve honestly found it a pleasure to read and write.<\/p>\n<p>When it comes to the type system, I think C# has found a really nice balance &#8211; it\u2019s powerful without feeling overly complex. I particularly like the support for generics, record types, and reflection.<\/p>\n<h2>Great Tooling<\/h2>\n<p>The development ecosystem offers some excellent tools:<\/p>\n<ul>\n<li>Powerful IDEs with great debugging and refactoring support<\/li>\n<li>Great static analyzers that will often suggest fixes automatically<\/li>\n<li>Sophisticated tooling for memory profiling and runtime diagnostics<\/li>\n<\/ul>\n<p>These make it a joy to work with the language, and help avoid nasty surprises in production.<\/p>\n<h2>It\u2019s Fast<\/h2>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/techempower-fortunes-graphic.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-56709\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/techempower-fortunes-graphic.png\" alt=\"techempower fortunes graphic image\" width=\"862\" height=\"372\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/techempower-fortunes-graphic.png 862w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/techempower-fortunes-graphic-300x129.png 300w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/techempower-fortunes-graphic-768x331.png 768w\" sizes=\"(max-width: 862px) 100vw, 862px\" \/><\/a><\/p>\n<p><em>Note: This graphic has been updated from the original post with the latest TechEmpower results.<\/em><\/p>\n<p>While performance wasn&#8217;t our main reason for choosing C#, it&#8217;s certainly a nice advantage. It\u2019s clearly a priority for the .NET team and each release brings <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-9\">meaningful performance improvements<\/a>. We process a lot of data on behalf of our customers and I\u2019ve been very impressed by the throughput we\u2019ve been able to achieve with simple and idiomatic C# &#8211; while still offering many options to optimize hot code paths if necessary.<\/p>\n<h2>How It&#8217;s Going<\/h2>\n<p>After thousands of commits and over 100,000 lines of code, I\u2019m very happy with our choice. We&#8217;ve brought on team members who had never used C# before, and everyone&#8217;s become productive surprisingly quickly &#8211; shipping code to production on their first day.<\/p>\n<p>No programming language is perfect for every situation, and what works for us might not work for everyone. But C# has been a key part of Tracebit&#8217;s success so far. If you&#8217;ve overlooked C# based on outdated perceptions (like I almost did), I\u2019d definitely recommend taking a closer look!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tracebit built their B2B SaaS security product using C#.<\/p>\n","protected":false},"author":189493,"featured_media":56673,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685,756],"tags":[58],"class_list":["post-56672","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-csharp","tag-csharp"],"acf":[],"blog_post_summary":"<p>Tracebit built their B2B SaaS security product using C#.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/56672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/189493"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=56672"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/56672\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/56673"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=56672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=56672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=56672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}