Can you build a startup on .Net?
rlacovara.blogspot.com
rlacovara.blogspot.com
* Will you be able to recruit top talent? In Seattle, not likely a problem. In the Bay Area, it's harder[2].
* Does the licensing cost make sense for your business? BizSpark is awesome, but it's not forever. In most cases the answer is yes, but not always[3].
* Are you willing to learn Linux too? You're going to run across something cool you want to use that only works on Linux, or works best on Linux. Redis, MongoDB, RabbitMQ, etc. come to mind.
I've built a startup on .Net before, and may do it again. The documentation for the whole Windows/.Net/SQL Server stack is amazing, and they're very predictable. With little effort you can learn enough to know how they'll perform, where they'll fall down next, and the next steps to move forward[4].
[1] I co-founded and was CTO of Loopt. We may have had product problems, but the tech never held us back.
[2] It's hard to find really good people willing to work on .Net in The Valley. They know their next gig will likely be at another startup, Facebook, or Google - .Net won't likely help you there.
[3] After BizSpark is over, look into SPLA licensing. It allows you to pay monthly for only what you use, and allows you to always be running the latest version. During all of Loopt Microsoft Licensing never cost more per month than an engineer, and the software saved us at least as much time and money. Remember, each time "The New Hotness" breaks, the time you spend debugging or migrating to something else is time you're not spending on your product.
[4] For example, Windows and SQL Server have great performance reporting. You'll know you need to get more RAM in a month, or switch to SSDs soon, long before you actually have problems.
I know one way around this is use java open source, by either a source or bytecode translator from Java to C#. Is there anything good to know in terms of limitations of this approach? Are there alternatives?
There's also the problem of using stuff that's targeted primarily for Mono, instead of .NET proper, and vice versa.
That being said a good carpenter can still crank out a nice table with a rock and some wood, but the question is should he?
In fact, if you do this right, you end up with a bunch of clearly separated re-usable services like in AWS. It also helps prevent the "giant ball of spaghetti" architecture by making it impossible.
Also if you use a lot of libraries / apps from a specific language, doesn't it make more sense just to transition to that language instead, or does what .NET buy your team worth it to stay?
The point being, "no open source community", "license costs" (see bizspark), the "MS is a desktop stack" are all popular myths that haven't been relevant for years.
But your point of well defined, independent services is spot on.
If you have to, you can change later- though from experience, there's little need to with .NET. I work for RecordSetter (http://www.recordsetter.com) and we use ASP.NET MVC- back in the early days of the company, the CTO knew .NET very well, so he just used his existing knowledge. C# is a great language, Visual Studio is a great IDE, MVC is a great framework. And so on and so on. We aren't really suffering any ill effects as a result of our choice, and as others have noted, BizSpark membership is actually a great bonus.
If anyone out there wants to play around with C# for the web but feels like the ASP.NET stack is too heavy (it can be), take a look at Nancy.FX (http://www.nancyfx.org/). It's super lightweight and allows you to keep most of .NET out of your way.
Regarding the language doesn't matter thing I think that's mostly true. If you're choosing between Ruby and ASP.Net MVC I don't think you can loose. But sometimes the framework does matter, like if you want to build a startup on webforms (don't).
I think you're right about WebForms in the sense that I can't think of a single good reason to go with it over MVC. I maintain that it was never really intended for the web we use these days anyway.
It was designed to make web development "simple" for the kind of people who built WinForms applications and were too lazy to learn how the web actually works.
Thankfully Microsoft have learnt from their errors so are now pushing these types towards making a mess of Javascript. Visual Basic types will be happy to learn that semicolons are optional.
As a former .NET guy, I think the hosting part of deploying .NET wasn't well addressed by this post.
Jeff Atwood built and colocated a dedicated 2 or 3U server to run Stack Overflow. I certainly wouldn't call that an easy or recommended thing to do for a startup, especially if none of the founders have enough hardware and system administration experience.
Compare this to signing up for EC2, Linode, or Rackspace and spinning up a Linux instance to run Rails, Django, or Node. Even easier to just spin something up for free on Heroku. These are mature, solid solutions being used by many startups today.
There are a few providers like AppHarbor that are trying to make .NET hosting a bit more startup friendly, but there weren't any mention of those in this post.
Firing up a linux instance does require more sysadmin skills from the command line (this can be non programmer skills to some), compared to a gui based OS.
Disclaimer: I use linux myself but have spent enough years in the professional world to know that there are things that windows can do equally well, just don't ask it to do everything. A basic startup stack of IIS (included), mysql, and a framework (download asp.net MVC) doesn't take much setup.
As for the sysadmin on the software side, I agree most .NET devs that want to build something probably have those skills. It's the hardware aspect that I think needed to be addressed.
The OP espoused the easy scalability of .NET using the Stackoverflow example without mentioning that they colocated with dedicated hardware.
SQL Server's a little harder to setup but it scales really well vertically (unsurprising given its Enterprise origins). As with most databases it really needs to be installed on physical hardware for the best performance.
Edit: Double-Jesus on a stick! I counted ~6 of YOUR references in this one thread. Pretty unimpressive.
Deployment's always had a variety of simple-to-complex options just like everything else.
[1] https://aws.amazon.com/amis/microsoft-windows-server-2008-r2...
As for deployment, if your .NET app doesn't have highly specialised dependencies you're likely to get away with a simple file copy deployment. Even if you do need to install some frameworks/packages, offerings from e.g. ScaleXtreme (who allow you to manage both Windows and Linux servers from a single dashboard, private or in the cloud), make managing instances (via templates, scripts and integrated monitoring and patching) extremely simple.
This is great because I prefer writing my code in C# and running it under Windows but prefer Linux for the heavy-lifting (PostgreSQL, memcached, nginx for static content, etc.). I do accept that not everybody knows how to use both platforms or would like to learn, however that is a matter of preference not practicality. I'd say the two platforms are on par with practicality.
Maybe for some startups the right decision is .Net, or RPG, or Forth or Rexx or what-have-you. But I'm guessing for most startups, there are better choices. I'm also not sure that - even on a per startup basis - there is one ultimately right choice. More likely there are a handful of really good choices, a pile of so-so choices, and a long-tail of fairly ridiculous choices.
The main problem is that people don't think about any of that when they think about .Net. They think about that festering bog of evil and spaghetti code that is WebForms.
1) use the advanced features and not tripping themselves
2) use it frequently
3) and got a lot of productivity boost out of those features
I would imagine most people will download 3rd-party libraries (open source or not) and tools to become productive. Not so much on the C# advanced features.
Not to knock you down but my experience with Java is that libraries typically help a lot as opposed to syntax.
If you just want to see a piece of code in C# that would have to be written totally differently in Java to be readable (unless you use some quite abstract third-party libraries like Guava to help) I picked one of my Stack Overflow answers at random: http://stackoverflow.com/questions/2966592/how-to-refactor-t...
... and yes, as a Java developer, I use Guava once in a while and I do JavaScript as part of my job as well and I do appreciate first-class function.
Typically the problems that functional features solve are filtering and transformation and yet most often than not I happen to solve them at the SQL layer (be it JPQL or straight up SQL).
var rules =
AppDomain.CurrentDomain.GetAssemblies
.SelectMany(a => a.GetTypes())
.Where(t => typeof(ISecurityRule).IsAssignableFrom(t))
.Select(t => Activator.CreateInstance() as ISecurityRule)
.OrderBy(r => r.Priority);
You can then run a chain of responsibility by writing var allowed = rules.First(r => r.Check(someObject) != null);
//Check returns null when a rule isn't relevant to the object being checked
it's pretty sweet for metaprogramming when you can run queries against your codebaseJava has AOP and extensively use Annotations (Attributes in .NET) and the approach there is definitely heavier than what you wrote above.
So to answer your question, the odds are very good! :)
As mentioned in the article, StackOverflow is one prominent .net startup that comes to mind.
Generally, customers don't care what you code in. It might matter if your customers are developers, but even then, there's API's.
How well you code in your tool of choice may be relevant when you hit a million whatevers you want measure, but by then you'll probably be scaling anything you built.
The most important thing is to have great momentum and see it through to a real result. You'll always do that best with the tools you're most familiar with, with the caveats listed above.
Use decent habits to be friendly to your future self to keep the codebase reasonably something you want to keep working on. Don't strive for perfection, it never happens the first time.
Sometimes as developers becoming entrepreneurs we get a little too focused on making our tooling so great that the attention doesn't always end up on the user experience and getting rid of their pain-points. Instead we can fall prey to solving our own pain points and staying in analysis paralysis.
Seriously think about a young mark zuckerberg making facemash and worrying whether it could be a $100 billion dollar company if he wrote it in PHP.
If anyone worries about these things just change your server headers so it looks like you're developing in whatever language they want.
Its usually a good idea to change the headers anyway so that any automated attacks run the wrong scripts. Change your postfix to Exchange, change your nginx to IIS and vice versa.
Another issue is in what fields that these languages are used, what type of developer works there, and what kind of developer you need to hire next month to scale your products. Java is for banks, very big projects with integration with lots of legacy systems. .NET is more used inside of companies, integrating with Sharepoint, MS SQL server. Ruby on Rails is for hip independent developers that teach themselves and go for productivity. PHP is for easy web development.
All these fields have different kind of developers that work in it. Figure out what kind of company you are, and choose technology accordingly.
http://grumomedia.com/why-plenty-of-fish-stores-passwords-in...
Never have, never will.
I've only played with it a little but the deployment story seemed quite nice.
We build fast, release often and the .net stack is so mature that we spend very little time thinking about it and the majority of the time solving business problems.
No, it isn't. Not anymore than MS giving away free licenses for Office, VS and Windows to college students is proof that they love college kids. Not anymore than giving poor schools in Africa free licenses for Office and Windows means they love African schoolchildren. And not anymore than the junky giving free dope samples to kids means that he loves kids.
It's just business.
This isn't just restaurants in the food court giving free samples to draw in more customers. They are deliberately building a dependence on their products and will reap the rewards later.
I'd go for open source any day, but that brings other challenges instead. :)
In addition, I would agree with the statement that more knowledgeable and skilled devs have switched to ASP.NET MVC. There is no doubt in my mind. You need to have decent understanding of OOP to do pretty much anything in MVC. Not to say that you can't write bad code. You can, but folks that work in MVC are typically more serious developers.
I've worked with python and ruby a bit and am currently working my way through Programming Clojure, but right now I'm much more experienced with .net and it's where my comfort zone is. I try to keep abreast of what's happening elsewhere, but don't have as much time as I'd always like to try other technologies.
I'm curious what people think - am I better off pushing harder on new stuff and hitting meetups, or is C#/MVC still a viable option despite Microsoft's current struggles? (Not that they're on the verge of disappearing or anything, but they definitely don't have the buzz in their favor right now...)
Most people use VS.NET with Resharper while Eclipse has a few Resharper features built-in and more.
Eclipse + Maven = great deal.
It's gotten better, but it still has a ways to go.
Shall we count the cost of using plugins as well? Including OS boot time and such and such?
Sorry, what I mean to say is that I don't know what you're talking about of this "waiting on it".
One of the great things Visual Studio has is the ability to set breakpoints in JavaScript code just like you can for C# code. Not that you can't do that in Eclipse, but it works out of the box vary easily. It's tightly integrated with TFS which let's you check in code resolve bugs in a single step. That way if a similar bug crops up later you can find what the problem was last time and how it was fixed vary quickly. It's also got a vary nice debugger that let's you do things like change values at run time.
In my opinion, the VS6 (for C/C++, released 1998) was excellent, and it's all been going downhill from there.
Another one is the easily accessible documentation in man pages. I don't think the Windows documentation and the KB articles are nearly as well organised as the man pages.
Performance-wise, there really isn't that much difference; the latest versions of the Windows, Linux, *BSD and Darwin kernels are equally capable in my experience. In fact, I wouldn't recommend against NTFS as file storage; we use it to store a very large amount of data on Windows 2008 servers and we are very happy with it.
The MSDN site has always sucked, and it's almost always better to Google searches for MS tech help than search within MSDN or the knowledge base. (I frequently find the MSDN article I need from Google. In fact there is a MSDN search widget available for iGoogle!!!) Language and framework docs, help, and searches from within VS are quite good, and from what I've seen of VS11 beta, even better. Also SQL server docs are good.
But, yeah searching for OS docs & help is no fun.
Doesn't address your remote access... SSH is really nice and lightweight and the fact that Vim works is great for real sticky problems. Powershell has a remote access mode but I can't say I know much about it.
I know StackOverflow has a few posts on the topic but I wouldn't mind hearing from some of the other startups.
article goes "should you build?"
answer to title is yes. answer to article is depends.
i would go with Rails simply because it's cheaper no matter how you look at it.