NashCoding Yet Another Artificial Intelligence Blog


Building a Startup – Part 2 – Defending .NET

There has been a lot of trash talk recently about .NET for startups. People make ridiculous claims about how .NET killed MySpace and you should never hire .NET programmers. Well I'm building my startup in .NET and for a lot of good reasons.

Why I chose .NET

I live in Palo Alto, work at the Hacker Dojo, and I am even buying a Macbook Pro tomorrow. Clearly I have totally drank the startup Kool-Aid. The one point I balk at is the idea that choosing .NET is always a mistake. I believe .NET was the right choice for EffectCheck, for the following reasons:

  • Existing expertise - I spent three years working as an AI researcher and quant at a hedge fund. We used two languages: R and C#. If you work with any major financial services provider, they invariably have an awesome .NET API and usually a Java one. So I stuck with C# and became really good at it. I do know Ruby/Rails and I'm playing around with Python/Django now to build an iPhone game, but at the end of the day it would take me 5-10x longer to build everything in those languages.
  • Core algorithm already implemented - The awesome AI algorithm behind EffectCheck has already been implemented and thoroughly tested in C#. Reimplementing it in another language would mean more testing and debugging.
  • AppHarbor - It's Heroku for .NET. You simply can't beat it. I push to my git repo and it compiles and deploys automagically. I know lots of Python hackers who swear up and down that they use EC2 and love it, but the server admin gene just isn't in me. I don't want to spend an hour setting up my AMI to get my web app deployed.
  • Visual Studio - Hands down the best programming environment anywhere. I've seen cool things from Textmate with Ruby, but I still think the C# intellisense support is way beyond anything available for other languages/frameworks.
  • I know the community - Throughout the last few years, mostly on accident, I've come to know a lot of the best .NET hackers. I did some poker research with Daniel Crenna, I met Aaron Stannard when we both lived in San Diego, and John Sheehan was on my Startup Weekend team. I was also one of the first AppHarbor users (and support tickets!), which means I've had plenty of discussions with Michael Friis, Rune Soerensen, and Troels Thomsen.
Can't we all just get along?

I'm not trying to get into a religious war here. Other stacks have their own benefits. Python has awesome libraries like the nltk, scipy, and numpy; Rails has Heroku and tons of great gems. The .NET choice is just personal preference, but that's kind of my point: it doesn't matter if you use .NET or not.

If you look at ASP.NET MVC 3 compared to the two main MVC frameworks out there (Django and Rails), there's very little conceptual difference. I use 960gs, git, jQuery, and (hopefully) soon MongoDB just like plenty of Rails and Django developers. The rest is just the choice of some arbitrary programming language and MVC framework to route calls.


So should you use .NET? The obvious answer is "it depends." If at least three of my five reasons resonate with you, then I would probably say yes. You really have nothing to fear anymore-- it's all pretty much the same until you reach massive scale. If you reach that point, well, that's one of those good problems.

If you liked this article, please up-vote it on HackerNews.

Comments (26) Trackbacks (0)
  1. Anyone who has anything against .Net either A) hasn’t used it or B) is nothing more than a frothing-at-the-mouth anti-M$ dork.

  2. The MS stack is pretty solid and can be truly exciting to work with but it also seems to be an expensive choice in some cases. One of the bigger arguments against a .net solution in the startup space is licensing. Is this a problem for you? Are you participating in the BizSpark program?

    @Wayne B
    Way to kill the point of the article and simultaneously sink to the same level as the trolls and fanboys that populate both sides of the argument.

  3. I have to agree with you about .NET. As someone who has exclusively developed on Linux and free languages/platforms since ’96 I took a job doing .NET a few months ago because it was very appealing to me in other ways. Since that time I’ve come to see that it is a great platform, by far the best thing to come out of Redmond. Visual Studio is a pleasure to work in, and I say that as someone who would fight a vim holy war.

    That said, the windows ecosystem has glaring blemishes. Configuration of IIS is non-intuitive. I would prefer a simple application server that isn’t trying to include the kitchen sink. Deployment of ASP.NET apps isn’t a solved problem either, although I haven’t used AppHarbor. My last complaint is about Windows Update, I can’t put together a coherent argument against it at the moment but it just sucks compared to package based systems that are updated with yum or apt. Because of these problems I don’t think I will stay with the platform for more than a few years, but for right now I’m enjoying seeing things from the other side of the fence.

  4. .net is brilliant technology, kinda like Java/JVM on steroids. Arguments given are valid arguments. However, since .NET is not based on free or open source software, it’s a huge risk for any company or individual. I advised .NET a few years ago to a startup, and the startup made some great software using .NET. Then Android came along, became popular within months, and basically made the decision to work with .NET my biggest failure in my career. Android is based on open source software. .NET is not. The mobile world is shifting quickly to use open source, and as such, if your techstack is incompatible with it, your techstack becomes unusable.

    This is just one example, which came close to me personally. I know of dozens more, great tech and all, but then some OSS project came along wasting millions invested.

    In the future, new “androids” will appear. And they will likely be incompatible with existing proprietary software.

    Your tech can be extremely well designed, tested, used and whatnot. But if it’s not based on OSS technologies, the risk factor involved is too big.

  5. @Guerren – We’re not in BizSpark right now, as we have no real need for it. I have all the MS tools necessary. As for overall cost, AppHarbor is $20/mo for a 20GB database and an extra server instance costs about $30/mo from what I understand (haven’t needed it yet and the pricing is still in beta). That’s pretty affordable.

    @Eric – Deployment, configuration of IIS, and Windows Update are non-issues with AppHarbor. Check it out! Seriously! :)

  6. @Ruudjah — I’m not sure I understand. What does .NET as a server-side platform have to do with targeting a mobile device OS? Even that aside, are you really trying to say that people shouldn’t develop for iOS because it’s not OSS? Either way, my point was the opposite — that if you just decouple your server-side development from your client-side development, it doesn’t really matter if you’re on .NET, Java, Rails, or Python because it’s all the same.

  7. @Guerren

    You’re welcome.

  8. Existing expertise — how does that have to do with anyone else, other than yourself and the small sphere you described. Overwhelmingly, the industry is _not_ .Net.

    Core algorithm already implemented — again, this is your specific situation, and it’s ridiculous to draw conclusions from that.

    AppHarbor — and as you said, there’s many more hosting options for non-.Net alternatives. Ones that are “thoroughly tested”.

    Visual Studio — you’ve got to be kidding. It’s a horrendous mammoth, and often gets in the way and wastes screen space.

    I know the community — again, this is your specific situation.

    None of what you’ve said points to .Net being a good choice for anyone else. This is all just situational, and it’s generally a very poor argument on your part. Yes, we can all get along, but .Net often makes it harder and has layers of crud piled on. I wrote code in .Net for 2 years, and it was a breath of fresh air when I got to move to something more modern.

  9. The point is simply: Base your business on proprietary software, and you will be bitten eventually. This happens in non-obvious ways which are very hard to predict. I have seen a bug in commercial software, which the vendor did not acknowledge. A company relied very heavily on this part, and as such needed to switch platforms. Bang, ~3-4M gone. There are many more examples which at start looked very promising, but eventually reached a limit simply because the idea/implementation was not based on OSS. Vice versa examples are also present, but much more predictable, since there’s always the source available.

    Off course, if the alternatives of OSS don’t even come close in the proprietary offerings, this point is much less applicable. But nowadays, this does not happen often. It’s also very possible to implement missing OSS components yourself and release it as OSS to bridge the gap.

  10. @Anon – I think I addressed the fact that it’s all just personal situation/preference. That was my point– we’ve reached a point where you can develop server-side code in .NET without being totally tied to using only MS products for development (i.e., I use git, Github, jQuery, etc.). It really doesn’t matter. As for AppHarbor, it’s much more reliable in its first 3 months than Heroku was in its first year; I never said I was worried about it not being thoroughly tested. Now for Visual Studio– some people prefer the light-weight Textmate/vim approach– but like I said, personal preference. I still find VS to be both the lightest and most powerful IDE I’ve ever used.

    @Ruudjah Well ASP.NET MVC 3 is open source. The actual .NET runtime isn’t, but you can read most of the MS Research papers from POPL, PLDI, OOPSLA, etc. and get a really good idea how things are implemented; also, the Mono project is open source and that has the potential to help find bugs in the native runtime since the MS team keeps a close eye on it. Windows isn’t open source either, but I mean are you really talking about worrying that Windows Server 2008 R2 isn’t secure enough? Do you have the source code for everything Amazon does with EC2? How about Heroku’s source code? :)

  11. I agree. .Net rocks and nothing beats VS. You forgot to mention F#. Fun(ctional) programming + intellisense!

  12. It’s the insight that basing your business on non-OSS software will eventually bite you. The examples I gave are examples – every situation is different, and every situation will spawn different problems and missed opportunities. You seem to be arguing my examples away, and doing so you’re missing the point. Instead, try the following thought experiment: Assert OSS software _will_ eventually influence your project. Then think of ways how this might happen. Don’t make the mistake that if you don’t come up with ways, they won’t exist or appear in the future. You seem to have made a choice and defend that choice – fair enough.

  13. I dont know about .NET. But I do agree that Visual Studio is top notch. I use it for everything – C++, Java, JavaScript.

  14. Good post and, I would say, written with quite an objective viewpoint.

    I would like to make the following points:
    1. It is the idea and the effectiveness of implementation that counts – not the technology itself. If you’re good with .NET and you can do stuff faster in it – then choosing that is as valid as using any other framework. It is one of the most open, reliable and well-supported technologies ever created by Microsoft and the stack has been well-tested in the Enterprise arena.

    2. Let me put things into perspective for .NET bashers: Web/mobile app startups are not the only variety of startups out there. A lot of startups and existing businesses focus on making products which simply can’t be built using Python/Django/RoR etc. .NET fills that gap very effectively. (I am in the 3D graphics development industry and I would have no use for these frameworks – except, maybe for Python – but I use .NET profusely for building my core applications, tools and underlying APIs)

    3. Again, the emphasis is on productivity – and if one is comfortable with Visual Studio, then there is no point using anything just because “that is how you do it”. (Personally, using VS is a delight). And an IDE can be the make-or-break factor while choosing a platform – we, as programmers, don’t like to admit that – but we all know it to be true.

    4. The “you can’t find .NET talent” myth. That’s stupid, to say the least. It takes a month or two to get started with a new technology if you are a seasoned programmer. It’s an application delivery stack for god’s sake – how different can they be?? A LAMP stack is as easily understood and programmed as an ASP.NET stack. It is the domain knowledge that counts (in the author’s case – AI, for example). It is THAT talent that is hard to find.

  15. Quick thoughts:
    1.) Use Mono if you don’t want to be on Windows. Mono is terrific. C# and the runtime are international standards. There’s no risk from using it (MS has said so).
    2.) Regarding the risk of OSS vs. closed-source that Ruudjah makes. I think it’s riskier going with an OSS technology on the margins. What if the lead developer gets a girlfriend and stops contributing? Sure, you can pick up the project yourself, but in practice this is a headache. .NET gives you a 10 year support guarantee from Microsoft, and if you’re really stuck, you can get on the phone and call someone (for a price).
    3.) Remember that StackOverflow runs on .NET. Seems to work great for them.

  16. The big reason not to use .NET is licensing costs. I’m in BizSpark, but I’ll have to pay up eventually. This effects how I think about my scaling options.

  17. I agree about c#. When doing the citrusleaf real-time database, I’ve had to code clients for just about every language – and the one I enjoyed coding was c#. Not because of the dev tools – IntelliJ is about as good as Visual Studio – but primarily because of the language itself. There weren’t any hard edges. I have heard stories of mis-implementation, primarily in the C#/TCP layers, but I haven’t seen it myself. Our client runs better in C# than in most other languages, and our c# based customers seem to have found more innovative uses.

    My only annoyance with c# is the cost of Windows licenses. We’re running on consumer-grade hardware that costs about $500 per machine, and paying $300 for the OS seems rather a crime. Luckily I have friends at Microsoft and can by Windows at Microsoft discount, otherwise I’d be very, very grumbly.

  18. Here here! I’ve been developing my own startup ideas using .NET for years now and I’m constantly surprised at the amount of hate the platform gets. After learning Objective-C so I could do native code for the iPhone I came to appreciate the whole Microsoft ecosystem a lot more, especially when consider how good Visual Studio is in comparison to Xcode (even the latest update).

    I hear a lot of people complaining about the licensing costs which can be large, don’t get me wrong. However if you’re developing an application at scale you won’t be paying retail (which I think is where most people get it wrong) and if you’re using Windows Azure it’s quite comparable to AWS or other cloud based providers.

  19. Visual Studio best IDE? If you have ever tried using Eclipse or IntelliJ or even NetBeans, you would slap yourself in face now!

  20. I recently started writing an app with the Play! framework and I love it, I think it’s a great framework by my day job is a .NET developer and I needed to learn ASP.NET MVC 3 for work. Once I started using it I realized how powerful it really is and how far it has come. Microsoft has time and money on their side; they can usually rest on their laurels and watch what everyone else is doing. Then they tell their army of developers to implement the same stuff and to make it better and even more polished. That is exactly what ASP.NET MVC 3 is and I love it. I have started writing a startup application using it and it’s going great. I plan on deploying to AppHarbor as well.

  21. A good programmer never thinks about ruby,.net or java.He thinks about solving problems.A language is a tool and no tool can work in all situations.Recent example is rise in the popularity of ARLANG.

  22. I will prefer .net to java any day.You get many inbuilt functions that even java 7 dont have any clues.Its easiest to learn and very powerful.

  23. LOL@Visual Studio. Hurry up and wait, or kill devenv.exe seems to be a good chunk of any day with that bloated POS, but to each his own I suppose.

    More seriously though, I don’t think anyone will argue with the existing expertise (or code base) arguments. But eventually you’ll want to think long term. Polyglot teams are just more mature than the majority of .NET. Not to say there aren’t isolationists in PHP and Ruby land but there are far more that are more open minded thinkers and far less personally and/or emotionally invested in a single platform.

    I think that in the end this is a good thing to have, but as usually YMMV.

  24. I agree that Visual Studio is the best one out there. I’ve used it for years and I thought I couldn’t live without it. Then I switched to Linux, learned the tools and learned doing things the Linux way. In the beginning, it was a bit of a pain, but now it’s great and getting better the more I learn. Now I hardly need the debugger anymore and my software turns out better than ever. Every tool I need is free and immediately available, usually just an apt-get away. The Unix philosophy is that if you need fancy tools you are doing it wrong, and I agree.

  25. Visual Studio is there to host ReShaeper and notning else. On it’s own it sucks. Oh and Django is superior to ASP.NET MVC in every single way I can imagine.

  26. I find VS even WITHOUT resharper absolutely hammers the likes of Comodo into the ground which is what allot of Django developers use, Comodo doesnt offer much more than notepad++ lol.
    ASP.Net is more intuitive, it has proper seperation of server side code and html unlike django where the templates mesh up the html with python script.

Leave a comment


Trackbacks are disabled.