7 ms·
Has anyone here used (or are familiar with relevant cases of using) .NET for developing startup products, including MVPs? With some exceptions, I'm seeing .NET
by ablekh 6y ago
Has anyone here used (or are familiar with relevant cases of using) .NET for developing startup products, including MVPs? With some exceptions, I'm seeing .NET as predominantly an enterprise-focused technology. Strategizing about development of my MVP (B2B enterprise platform), as a CTO, I'm torn between a) Python and its great ecosystem (I plan to use FastAPI instead of more traditional Flask and Django), b) C# and .NET ecosystem and - to a lesser degree, for the reasons explained below - c) Julia and its emerging ecosystem.
As much as I'm excited about Julia, I think that both the language and the ecosystem have not yet reached enough maturity and critical mass of developers as well as comprehensive and stable general-purpose libraries and tools to be a safe choice for a startup, which is already a highly risky venture. I have to reduce risks, not add ones.
Between Python and .NET ecosystems, I'm more familiar with the former and, under equal conditions, would choose it over .NET. Additional argument in favor of this decision is that most of advanced ML/AI development is focused on Python high-level interfaces (and ML/AI is certainly a significant part of my future platform's value proposition). However, based on my research and recent .NET experience, I recognize its advantages versus the Python stack in some areas, including native type system support (though pydantic might be good enough for the Python stack; plus, it is used by FastAPI), rich set of native APIs, much better performance, much better support for domain-driven design (DDD), WebAssembly support, and, finally, much better support for developing multi-tenant applications. The last item is especially important in my case, since multi-tenancy and other relevant features (e.g., auditability) are strict requirements and Python ecosystem pales in comparison with .NET in this regard (the only decent project that I ran across is django-tenants, but a) it would force me to use Django and b) it only supports PostgreSQL schema-based multi-tenancy approach).
Would love to hear your opinions and thoughts on the above. Thank you in advance!
- atraac 6y agoI worked for two consultancies that basically created apps for multiple startups and we used .NET Core in almost all projects. I don't really have comparison because besides simple, personal Django projects I never had much experience with Python but I find .NET Core actually enjoyable(I come from Android Java/Kotlin world). I don't like the community which is, mostly still stuck in the enterprise(though that's changing alowly) and often feels like an MS cult, but otherwise, there's nothing bad I could really say about .NET. Especially when paired with Azure ecosystem, it's really easy do develop and deploy, it's really fast, easy to work with thanks to Entity Framework and stuff like LINQ, there's a lot of choice in libraries. Some are still stuck in .NET Framework(Windows) world, but most of Nugets already implement at least netstandard2.0 which allows you to use them with Core. In overall, especially now with Blazor becoming a thing, I'd recommend at least trying it out.
- cutler 6y agoI don't quite get the hype around Blazor. Great idea but the implementation is a non-starter considering it has to send a whole runtime over the wire.
- bob1029 6y agoWe use it in server-side mode (no WASM assembly to deliver). SSB is incredible for apps where you are expecting a well-bounded number of concurrent users. We use it for internal business dashboards and devops management tools. The ability to inject & use existing .NET services is pretty incredible in terms of productivity. We now maintain a monorepository because of this reuse potential. https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-3.1#blazor-server https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-...
- JamesBarney 6y agoIt's amazing. I've been using server side blazor and it's been quick to develop, performant for users, and more interactive than SSR. Down side is scaling, but I mostly write B2B apps. And by the time you run into scaling issues in B2B SaaS someone's rich.
- manigandham 6y agoBlazor is the first frontend component model framework built for the web that isn't older server-side templating and also not Javascript. Using a strong typed language like C# makes it very fast and productive, especially when reusing the same code and libraries with your server backend (something that was touted with node/JS but has been weighed down by the chaos of the JS ecosystem). Blazor can also run in 2 modes: 1) server-side where the UI is controlled by a websocket (via SignalR) connection to the backend which processes all the logic. Developing complex interfaces becomes much easier because everything runs on the server and the distance between a database query and UI update is very short. Save the verbose JS->API->Backend layers of code. 2) client-side which uses cutting edge WebAssembly to run your app. The WASM version is getting smaller and faster with every release and isn't much bigger than your standard big SPA which also has megabytes of javascript these days. It has a great JSON library and can also support GRPC-Web now for easy RPC.
- GordonS 6y ago> Has anyone here used (or are familiar with relevant cases of using) .NET for developing startup products, including MVPs? Yes, I have. I've been programming with C# since it was first released, so we're very well acquainted, and I can build MVPs quickly. As always though, it depends what you are used to. > I'm seeing .NET as predominantly an enterprise-focused technology I didn't see it as any more enterprise-focused than Java, andid say less so since dotnet core brought multi-platform support.
- ablekh 6y agoThank you for your feedback. When I said "predominantly an enterprise-focused technology", I meant overall popularity for building in-house enterprise products versus developing startup products. Anyway, should I decide to use .NET, I would most likely use a high-quality boilerplate solution as a foundation. Specifically, I'm a big fan of (and have already played with) ASP.NET Boilerplate and its next-gen version called ABP Framework. They also have relevant attractive commercial versions.
- retendo 6y agoI'm using .NET Core/F# for the backend of my bootstrapped "startup". I mostly have an iOS dev background so take my experiences with a grain of salt. So far everything has gone pretty smooth. ASP.NET Core is running under the hood which seems to be pretty mature. F# and the libraries that I work with all provide a functional development experience. I interface with a Postgres database, so there's libraries for that as well. You mentioned Domain-Driven Design. I would recommend reading Scott Wlaschins book Domain Modeling Made Functional [1]. If you are interested in playing around with F#, a quick way to start would be to try SAFE stack [2]. From what I have read during the last couple of months, MS seems to be interested in pushing F# as one of their go-to languages for machine learning. At least they have an F# example online [3], which can not be said for most other areas where F# would also be a good fit in my opinion. [1] https://fsharpforfunandprofit.com/books/ https://fsharpforfunandprofit.com/books/ [2] https://safe-stack.github.io https://safe-stack.github.io [3] https://dotnet.microsoft.com/apps/machinelearning-ai/ml-dotnet https://dotnet.microsoft.com/apps/machinelearning-ai/ml-dotn...
- ablekh 6y agoMuch appreciate your feedback and advice. I was considering using F# instead C# for my potential .NET-based solution. But not because of Microsoft's ML push for F# (which seems to be just a move to achieve feature parity with C# within ML.NET framework, which, by the way, is not as comprehensive as relevant Python ecosystem), but rather because of F#'s meta-programming features. However, the advantages of F# still do not overweight its IMO two main disadvantages: a much more limited (vs. C#) pool of available developers and limited support by tools beyond Microsoft ecosystem (e.g., by JetBrains products).
- retendo 6y ago> a much more limited (vs. C#) pool of available developers I don't plan to hire anyone in the foreseeable future but what I can say is that there's 2 people happily working on the F# codebase at the moment, that do not have any prior experience in the language (professional Swift/ObjC background and played around with other languages). Getting into it is quite easy if you're interested in FP. I wouldn't worry too much about that. Just get some people who are experienced in .NET and some people who are good in FP. > limited support by tools beyond Microsoft ecosystem (e.g., by JetBrains products) I use JetBrains Rider on a Mac, without major problems so far
- bargl 6y agoI've worked at a startup that did this. I don't know if this was the program we used, but you can get a LOT of free stuff from Microsoft as a startup. https://azure.microsoft.com/en-us/overview/startups/ https://azure.microsoft.com/en-us/overview/startups/ >Between Python and .NET ecosystems, I'm more familiar with the former and, under equal conditions, would choose it over .NET. I think one thing you need to do when creating a startup is, go with what you know (as you said). You want to decrease the risk that you're product is going to be blocked by encountering an edge case in a framework/language you don't know and you get stuck there for a long time. I am way more familiar with .NET than Python, but I use Python in my spare time and on side projects to build up those muscles. If you're doing a startup and you want to go .NET, I don't think there's anything holding you back anymore. It's open source now, runs on Linux, and you don't have to pay a dime to develop with it. Microsoft will get you in that, it's WAY easier to pay a little bit to get Visual Studio Enterprise and to then hook that into Azure and all of a sudden you're paying them a ton of money. Yes, that's their master plan. But, no one is making you do that. Where to stay away from .NET core: Lambdas. The startup time for Lambdas just isn't where it is for other languages, when I last looked at this. If someone has newer data to prove me wrong I'll freaking LOVE YOU FOREVER! Anyway, depending on what and how you're building your startup, .NET maybe a great pick for you depending on your background. I wouldn't force myself to pick up a new ecosystem and do a startup if I was focused on delivering a product I wanted to deliver and not learning something new and cool.
- ablekh 6y agoGreat feedback, much appreciated! I'm familiar with Microsoft for Startups program and I'm still considering it, though currently it's not a priority. I agree with most of your thoughts above. Don't have experience with .NET-based Lambdas, though, so I don't have an opinion on that yet. As for what I'm building, well ... I'm building a comprehensive (read: large) and complex B2B enterprise SaaS platform focused on a particular multi-disciplinary scientific domain. I'm a solo founder and have technical (and research) background, including software development and IT architecture experience.
- manigandham 6y agoVisual Studio Code is great and Jetbrains Rider is much cheaper and very capable. You can skip VS Enterprise for most projects, and the Professional version also costs a lot less if you just need advanced debugging. Also Azure isn't really necessary at all considering the ubiquity of Docker and Kubernetes. I've been running .NET programs basically everywhere else other than Azure for a long time.
- moron4hire 6y agoI'm using .NET Core/C# as my backend for a WebXR project for remote learning of foreign languages. After a brief learning curve with ASP.NET Core (I used to do a lot of WebForms work before pivoting hard into VR) I'm enjoying it a lot.
- ablekh 6y agoCool. Thank you for your feedback and good luck with your project.
- airstrike 6y ago> I plan to use FastAPI instead of more traditional Flask and Django Why?
- ablekh 6y agoBecause FastAPI is much faster* than both Flask and Django (see https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite https://www.techempower.com/benchmarks/#section=data-r19&hw=...), supports Python type hints, is a great fit for my target architecture (SPA), supports both RESTful and GraphQL API styles, offers built-in validation and much more (https://fastapi.tiangolo.com/features https://fastapi.tiangolo.com/features). *) Having said that, from the performance perspective, .NET Core and Julia (from my options) are certainly much more tempting.
- chowes 6y agoUse what you know and run fast. Any day you've spent debating this is a day you aren't closer to shipping.
- ablekh 6y agoThank you for your advice. I understand where you're coming from, however, I respectfully disagree (plus, in my case, your advice is not much applicable, since my knowledge and experience with Python and .NET ecosystems are not that much different - I still will need to master quite a lot of topics and aspects). If I would be debating which UI styling to use, which relational database to use or even which front-end framework to use, I would agree that it does not matter that much and should be based on existing knowledge and skill set. However, I strongly believe that spending enough time to select the best/optimal technology stack for the target product is worthwhile and will provide a high return on investment. You don't want to skimp on architectural decisions, since fixing the wrong ones will cost much time, money, effort and, sometimes, will even be outright impossible. Hence my deliberation.
- lostmsu 6y agoMy startup's target is actually to close the AI gap. We are re-exposing the entire TensorFlow Python API in C#: https://losttech.software/gradient.html https://losttech.software/gradient.html
- ablekh 6y agoThank you for chiming in. Interestingly enough, I ran across your startup not long ago, when exploring ML/AI landscape of the .NET ecosystem. Good luck with your venture. By the way, do you have plans to support other popular frameworks beyond TensorFlow? Just curious.
- lostmsu 6y agoThere's no plan to support any non-NN frameworks. We might decide to add PyTorch support, if its adoption will continue to accelerate. But that won't happen for at least a year.
- ablekh 6y agoUnderstood. I certainly didn't mean non-NN frameworks, but rather meant other popular NN ones (PyTorch, MXNet, etc.).
- pjmlp 6y agoI assume you are aware of Direct.ML and its Tensorflow integration? https://cloudblogs.microsoft.com/opensource/2020/09/08/open-sourcing-tensorflow-with-directml/ https://cloudblogs.microsoft.com/opensource/2020/09/08/open-...
- lostmsu 6y agoYep, and it is currently many times slower than CUDA version on Nvidia. Haven't had an opportunity to compare tensorflow-rocm with it on AMD yet.
- 6y ago
- manigandham 6y agoI've been building startups for 15 years using .NET It's incredibly fast and productive and has allowed me to create more as a single-person than entire teams using other languages. That still remains true today, even more so as it removes many of the limitations of the Windows-only desktop framework. Even if you can't use C#/.NET for all the functionality you need, there are many ways to interface with other stacks from function calls, inter-process communication, RPC frameworks, etc. It's well-supported and very common now with the rise of microservices anyway. For AI/ML specifically, I suggest looking at the Machine Learning docs which list plenty of projects like ML.NET and integrations for Tensorflow and Spark. https://dotnet.microsoft.com/apps/machinelearning-ai/ https://dotnet.microsoft.com/apps/machinelearning-ai/
- ablekh 6y agoI appreciate your feedback. I definitely have a very positive feeling about .NET Core (C# and, to lesser degree, F#) platform (though, I think that .NET ecosystem is not as comprehensive / diverse as the Python one). What forces me to contemplate about .NET versus Python is that most of the C# source code I have looked at (especially ABP frameworks) have a feeling of being over-engineered / "heavy" (versus Python's being elegant / "light"). I understand that most of that comes from a "proper" implementation of design patterns, DDD and enterprise-focused features (which, actually, I need, by the way - hence my interest in ABP frameworks). But, still this feeling troubles me a bit. Perhaps, I just need to read and practice more in C# and .NET ... :-)
- manigandham 6y agoYou can write complete C# apps in a single file if you want. It's not really that verbose (nowhere near Java). The structure and the huge standard library helps greatly compared to the messy nature of other languages like JS and Go that ends up with code and modules everywhere. You'll quickly learn and maneuver around the bigger patterns, which (like you say) are actually important in working with larger applications. But nothing I say will be as useful as just working with it. Try spending a few hours working with some of the bigger frameworks and I'm sure you'll get it pretty quick. If you need help then there are plenty of people to ask as well, from HN to twitter to the .net repos.