Hacker News new | comments | ask | show | jobs | submit login
How We Moved From Microsoft ASP.NET to Rails and NoSQL (infoq.com)
110 points by robconery on May 19, 2010 | hide | past | web | favorite | 98 comments

As an MS developer this really is devastating.

Rob Conery is one of the names that any fan of ASP.NET MVC knew. He was involved in the project when he worked there (I'd call him the most high profile MS employee aside from Scott Guthrie). To have him come out and say he couldn't make a startup work with Microsoft technology really tells you all you need to know about that.

I still need to use .Net at work but I think this combines with a bunch of other factors to push me away from Microsoft on anything else I do.

It has nothing to do with the technology - it's good stuff and we could have made it work fine. The issue is we want to stay small and not take on the associated cost.

I can see how it might come off like I'm damning the platform - that was hardly my intention. Rails has had 3+ years of Open Source contribution to build out the platform and make it do amazing things - ASP.NET MVC will (hopefully) grow in some of the same ways - but there's a somewhat stunted element to the .NET OSS ecosystem. Hopefully that will change.

Rob, I've always enjoyed reading your posts as I've personally been straddling the gap between the two worlds (MS and OSS) for a long time now. Primarily this is due to our local job market - there simply aren't any OSS jobs where I live, and Microsoft is very deeply embedded in the New Zealand marketplace.

C# is a fine language, and ASP.Net MVC is a great framework, but I can't help but feel like the 'other kids' are ransacking the candy store while I'm out on the curb. In terms of testing frameworks and tools, the Ruby/Rails platform is lightyears ahead. I know there are attempts to bring some of the core concepts in RSpec and Cucumber to the .Net platform, but we're not there yet, and probably never will be. The goalposts are always shifting - the OSS platform can respond to change and new ideas much more quickly than the MS platform.

We have an MVC framework for web development now, but it has taken 10 years (Java Struts was released roughly around the same time as Webforms iirc)! Testing is only one element of this - in the OSS world we're also seeing an explosion of asynchronous queuing/messaging frameworks, object/document datastores, serverside js and other innovations.

I also share your frustration with the coupling of the framework releases to a new IDE. I use Vim for everything other than .Net development, and like the fact that the rug isn't going to be pulled out from under me every two years.

As a Microsoft developer it is hard not to feel envious of the OSS community. The Alt.Net community if anything appears to be shrinking, and it is presumably because those developers have come to a similar conclusion as yourself - the cost simply does not justify what the MS platform can offer.

BDD on .NET? Check out the S#arp Architecture, it's designed to be the RoR of the .NET world, and it has some nice BDD tools, plus scaffolding for IoC, Unit Tests, Services, and MVC.


I rarely seen any RoR clone took off. I don't mean to talk bad about them, but I'd be worried about the community and momentum behind them. I wouldn't want to use a niche technology to find out that I might have to extend or take ownership myself down the road when their leader decided to resign to pursue something else because they find their work no longer rewarding nor interesting (well, to begin with, they're cloning a popular framework instead of coming up with original ideas or being a visionary).

SharpArchitecture, while swell and neat, doesn't scratch the itch of "this stuff really isn't that hard". There's a metric s* ton of concepts and code in there that are more suitable for a military defense system, let alone a startup.

My point really was only part technical though. To give an example you had to switch from Silverlight for a completely nontechnical reason. It wasn't even expense related.

But you still had to switch and it still cost you time and money you wouldn't need to spend had you just gone with Flash in the first place. So the point to me is still "don't use Microsoft technology because you'll end up needing to switch"

Can't argue with that. Outside the corporate walls money is king - it's a hard truth and one I was not about to pay for personally :).

But isn't that the case with virtually any technology? We've used C, C++, Java, C#, VB, ASP, ASP.NET, PHP, Flash, etc... We always look at the stack and make a business and technical decision about what to keep and what to toss.

That will never change because the surrounding ecosystem is expensive as shit.

It's also very slow moving and wildly outdated.

As a long time former .NET consultant (been using it since Beta 1), once I went OSS, it was nigh impossible to return to Windows land.

Right now I'm the CTO for a largish image licensing shop (think Getty, but more boutique/high end) that is entirely .NET (I inherited it). We are now in the process of moving it off Windows onto an OSS stack. It's a miserable experience. And an expensive one.

Could you elaborate why it was a "miserable experience?" Was it because of the way it was written or the framework / stack itself?

A combination of a lot of things.

For starters, the thing is architected poorly, so that does play a big factor in it. I know, I know, it's always the new guy inheriting an existing system that lays to claim that the inherited thing is a piece of garbage, but in this case it is undeniably true. And I can tell you, as someone who has been doing .NET consulting for the last 8+ years, it's not uncommon for MS based solutions to be architected this poorly, but I'll get to the reasoning behind that later.

So yes, poor architecture, lazy design choices (the wrong kind of lazy) but what is most aggravating are two other factors: cost and maintenance. Of course the very first thing I did when I settled in as the new CTO was to figure out how the thing was maintained and how much the thing was costing us a day to run. At my former CTO gig, massify.com, one of my proudest achievements was getting the daily cost of running the site below the price of a pack of cigarettes. Now we are talking about a user generated video content site with not exactly insignificant amounts of traffic and some very healthy storage requirements. When we started out, it was running us around $300 to $400 a day, but by the time I left, it was about $8 bucks give or take. And during the three years I was there, the site never came down unless we took it down for some kind of database migration or similar updating. And all of this happens thanks to OSS software and the ease of use of unix.

Now we are in a situation where we are paying for the server OS's, the SQL server instances and a variety of other utilities to keep things running. Not to mention the yearly MSDN subscriptions. That shit is expensive.

But what is worse is that it's such a pain in the ass to update and work on. Remote Desktop is retarded, but I have no choice as command line maintenance is simply gag inducing. Something that would take me mere minutes in a linux command line takes me an hour or more clicking around like an idiot in remote desktop. Good luck remotely admin'ing a windows server taking a massive CPU load. Now when I was at Massify, I could maintain and monitor our whole fleet of servers from my phone - and on a couple of occasions even did so while sitting through the previews at a movie theater. Do that on MS? MMM ... no.

But back to bad architecture and why it's endemic in the MS development world. ASP.NET. ASP.NET is such a convoluted, poorly conceived, poorly executed pile of shit. THIS IS COMING FROM SOMEONE THAT USED TO SING ITS PRAISES. And when ASP.NET is a cornerstone of .NET development, I don't think it's implausible to rationalize the rampant bad development practices of your typical MS developer back to it and other MS technologies similar to it (I'm looking at you Sharepoint). You see, MS is chock full of shitty architecture. And MS devs learn from MS. It's a cycle of shit that is constantly perpetuated by each release of some new MS technology. And I can tell you, I've seen it time and time again - working for companies like Pfizer, R/GA, some of the top 5 interactive ad agencies, etc. Finding a great MS developer is like finding a great PHP developer. They exist, but are such a minority as to be almost mythical. We used to joke that MCSD stood for Microsoft Certified Shitty Developer. Well, we always pitched it as a joke anyways, in case anyone ever overheard.

So, now we are currently wiping the slate clean and moving the whole thing to an OSS stack. And so far, even in the rough beta stages, we've already demonstrated how superior that whole ecosystem is to where it was before. It's very satisfying to show our licensing agents our new shiny search system (using a heavily modified Solr) and watching their eyes light up as we do things with it that the old MS based search engine simply could never do.

So that's my rant about that. MS is dying shit as far as I'm concerned, only used by people who are somehow locked into it, or are the bad kind of lazy and don't want to challenge themselves. I know that's not very objective, but it's the lessons I've learned.

PS. When I was interviewing with the company, I literally had a 4 hour conversation with the outgoing CTO about the benefits of MVC. He couldn't see them and I couldn't explain it to him in a way he understood. He kept pointing at ASP.NET user controls and how great they were. Of course, several months later I find a page on the admin site that is roughly 26K lines of code in the codebehind with a nice spaghetti mixture of HTML and SQL and C# code. I nearly quit when I saw it.

You see, MS is chock full of shitty architecture. And MS devs learn from MS.

Do you have an idea why this is the case? Or the other way around why the architecture of OSS projects seems to be saner?

disclaimer: I have no exposure to the MS stack, with the exception of playing around with F# which in my opinion is a very well designed language.

Just a wild guess. Microsoft has always trying to dumb down its offering for regular people (i.e.: non-developers). Nothing bad with that, just like Cloud offerings trying to eliminate Sys/Net-Admin. Examples of such (MS) technologies were: Access, ASP.NET, VB. The dream of Microsoft was to cut developers out so that the Biz-guy can whip up a small utility software quickly or to generate various reports quickly.

At some point, MS probably realized that either these tools are not enough or their customers are asking for more because businesses are getting more complex and agility is required.

MS, known as the company that is great in terms of partnering and pleasing everybody except developers, decided to re-brand its offering to be more developer friendly. But at the same time, still serving the non-developers community as well (which seems to be dying slowly because well... if you don't like computers, you will not like it at all, period. You will hire someone to do the "dirty" job for you).

It'll take a while to transform the old MS to the new MS. If they ever made it.

Meanwhile, (some) OSS projects didn't have ambitious goals. They solve the authors's problems. During the inception of the project, they didn't care about the non-developer audiences. They care about themselves: developers.

Hard to imagine anybody treating developers worse than Apple :-)

I only catch glimpses of the MS world when I have to use common libraries originally developed by our Windows experts, whose design decisions often leave me puzzled. I am curious about what you think about the idea, that OSS culture incentivized creating architectures conforming to fashion trends, while MS culture incentivized to finish feature X until Y - no matter what it takes (just do it Scotty).

e.g. in the OSS world beginning of 2000 J2EE spawned heavily over-engineered solutions, which were displaced by the convention over configuration trend exploding (mostly due to Rails) around 2006. And now the TDD/BDD crowd are fighting it out with the Architecture & Patterns gang with the DDD and DSL tribes assimilating the surviving concepts...

A member of a currently hip fashion trend will have a better staying power in a nasty flamewar caused by a random design decision about the color of a bike shed in an OSS project than a lone warrior. So you start having design styles competing for followers.

Meanwhile in the MS world (wild guess following) heavily funded 'central planning solutions' (from frameworks to design styles taught for certification purposes) offered by MS stymied competition of alternative approaches. A focus on - if I understood your correctly - usually very risk adverse business needs, while keeping the actual code of produced solutions hidden from outsiders additionally put developers under pressure to avoid experiments.

Would it be reasonable to say that we have an evolutionary system of small actors competing for developers interests (OSS) fueled by <insert book about OSS phenomenon> vs. a central planning approach of a major corporation backed by a huge war chest?

can you please specify which OSS stack you use.


The search engine is a customized version of Solr.

The front facing website is done in PHP using a framework we developed at Massify (http://heavyfuckingmetal.com/). We thought about going the ruby or django route, but the front end is so light functionally we decided to go with what we knew inside and out. We'll also be using MongoDB for certain things.

The way we are phasing the rebuild, the SQL Server is the last thing we're migrating, so that will stay in the mix for awhile. It's the most complicated piece because it has a bazillion stored procs that need to be migrated/refactored out. The structure is fine for the most part, though a little de-normalization is probably in order. Eventually I hope to have that running on PostgreSQL by next winter.

The backend, or admin, will be done with heavymetal and cappuccino for the front-end.

As an aside, the entire rest of the company is mac based, so we've written a couple of desktop apps, as well as some server apps, in objective-c/cocoa using quite a bit of open source libs. We'll be putting some of our own code public on github in the next few weeks. We've also done an iPad app for showing our image portfolio to clients.

A lot of developers and managers I work with don't seem to realize that what's best for Microsoft isn't necessarily what's best for another company. Instead they get stuck in a cycle of adopting whatever MS throws down the channel (this week it's Entity Framework, last week SOA concepts, etc.).

Good MS developers should learn to take what's best from the open source world and apply whatever is most useful behind the corporate firewall.

In fairness (and as the person who made the decision that forces Sam above to use .Net technology) there are reasons to use Microsoft technology even when it isn’t the best fit.  

Let’s be honest about technology for a second: Things go wrong.  No matter what solution you use things go wrong and for the most part non-technical management doesn’t understand that.  When something goes wrong they want someone to blame.

  If you decide to go with something like Ruby on Rails you have to contend with the fact that management doesn’t understand open source (or trust it) and have never heard of 37Signals.  So the blame falls to you for having gone with a small “experimental” company rather than a “trusted” one like Microsoft (and yes those words in quotes are actual quotes from my attempt at using such technology)

  Where as when something goes wrong with Microsoft technology it’s written of as inevitable (that’s where the saying “no one ever got fired for using Microsoft” came from)                     It’s a sad reality but sometimes you can’t pick the best technical solutions.  Sometimes the extra time it takes to use proprietary Microsoft technology is worth the political capital you save by going with Microsoft.  That fact doesn’t make me happy but it’s true.  

Your assumption here is that the blame game somehow is the path to productivity and "the answer". This, to me, means you have a lot of other problems where you work - your platform doesn't matter at all.

You're very right, however in that no one gets fired for using Microsoft - but that's changing. Don't take my word for it - ask the guys in Building 42 - they know it too.

You touch on a very particular, hot topic in the IT world - that having a phone number to Microsoft will solve problems. Sometimes it does - but most often that comes at more than a bit of a price :).

On the flip side - my support channel is Google and I find my answers in about half the time as I would with a topic such as ASP.NET MVC. Rails is quite mature and people have tried everything with it - found where it's great and where it blows. I've had more to read on it than you can imagine.

Anyway - it is a sad truth and one that's about to change as the old guard at your company cycles out and are replace by people with knowledge and pedigree - namely people like me - who will systematically cull the policies that don't make business sense, and keep the ones that do :).

This doesn't mean "ax all things Microsoft" - it means "find the best value and leverage it". MS is changing its focus as it sees this - it knows this shift is coming - it's why ASP.NET MVC is Open Source and SQL Express is free, and more is on the way :).

I don't agree with your points on human nature.

On blame, every executive staff of a large company that I've ever seen casts blame. Yes there are startups with a small number of people that are all pretty even keel but as soon as you get to a certain size you'll get opposing interests and that's where blame comes from. The blame game is a political game played by people trying to get leverage over other people in order to get more resources. It's stupid but it's the reality of the world. If you don't see it you just aren't high up enough to be the one fighting for resources. Because as someone who read about Microsoft as a kid I know it was happening at Microsoft (Silverberg/Alchin?)

As far as brand, that's just human nature. Look at the side of any Grocery Store brand and you'll see the same ingredients as the big brands. But any grocery store manager will tell you Captain Crunch outsells generic white box crunch 100-to-1. That's why companies build up brands in the first place. That's why Microsoft brags about being one of the most trusted brands in the world.

So this really isn't old guard as much as it's the stupidity of human nature and I really don't see it changing that much.

P.S. This is Username: TomOfTTB not Username: SamAtt. If he doesn't want me posting as him he should learn to @#%& log out.

I'm just glad you haven't gotten any downvotes yet ;)

Actually, I let two guys go at my current company exactly because they picked Microsoft technologies. And I've repeatedly begged the CEO to bring the old CTO back so I can fire him as well.

"It’s a sad reality but sometimes you can’t pick the best technical solutions."

But you can always pick a better employer.

Definitely, and in fairness these are situations where there's a huge investment in MS technologies, with entire teams dedicated to supporting and maintaining the infrastructure. It isn't feasible to throw it all away without a serious commitment from the highest levels of the organization, and a multi-year, multi-million-dollar implementation plan to do so.

But at the team and individual developer levels I think there's lots of room for good open source solutions, and this option isn't always considered because developers are looking to MS for the next big thing.

I believe this is reflected in the certification programs too, because they don't focus as much on building a sound programming foundation as on making good Microsoft evangelists. From Microsoft's viewpoint, why not? But it's that divergence again from the company's perspective.

These are justifications for giving in to a disease. Sure, there are plenty of reasons why you might be forced by the giant, short-sighted enterprise you work at to rely on less sensible software stack. There are also plenty of reasons not to try to stop a guy from being stabbed at the bus-stop you're waiting at.

That doesn't make it right.

I'm not a web dev per se, but I never heard of Rob Conery until now. I now ScottGu, Anders, Cutler, Brumme, Dussud, Crowley, Russinovich, Spiro, even Luca, but never Rob.

Not to say he's not a big name, but to say he's the most high profile MS employee beside ScottGu seems absurd. Even in the dev tools space I think you have to give that to Anders.

Rob is primarily well known by those interested in Asp.net MVC - which, given its roots as a RoR knock-off (I say that with love), tends to mean MS web devs with an interest in OSS will have heard of him. He is also well known from his SubSonic project - an OSS ActiveRecordish ORM.

From your list of Technical Fellows it sounds like you're probably not a web dev, so you wouldn't have run into his stuff. An MS web dev these days would tend to list names like ScottGu, Haack, Hanselman, Conery, Walther, le Roy, Wilson, Verissimo, Lipton.

In other news, Anders is totally the cat's pajamas.

I agree. I had only heard of Rob.

And easily the top .NET employee is Anders by far.

In the exact same position. .net by day, anything else by night.

I have learned Ruby on Rails and I am amazed that after three weeks with RoR I am more productive than after 10 years with .net

I reported my own experience moving from Asp.net to Ruby on Rails in my blog a few days ago:

"How an experienced developer multiplied his productivity tenfold" http://aymeric.gaurat.net/index.php/2010/how-an-experienced-...

It has been a while since I've been a newbie at Ruby/Rails, but back when I was a newbie, I was routinely shocked at how stupidly easy it was to do the same things I had been doing in Java... in a fraction of the time. You also get access to "the new hotness" a few years earlier than Enterprise Java does -- I was being warned off Memcached in Java by the MySQL guys at Sun ("Don't tell the bosses, but the Java client is not ready for prime time") literally two years after I had it in production at BCC.

Did you happen to try out other frameworks before deciding on RoR? I'm thinking about testing the waters outside of MS land and I'd like to know why you chose RoR versus, say, Django or even Struts.

I find it hard to imagine that there is any web framework still around that could be more screwed up than Struts. After having had some major exposure to the various members of the Struts family and Rails, I would say that the experience of using Struts 2 is slightly worse than using Rails while being flogged by an expert torturer. :-)

If you want to test the world beyond MS I would recommend (apart from Rails or Django) looking into the Scala/Lift (my preferred toolset), Clojure/Compojure or JavaScript/Node.js combos (depending upon you language preferences).

I would be careful with Rails, when you plan to do some heavy data processing and/or if you need your application processes to run for a long time without being restarted.

For small, straightforward applications or prototyping the Ruby/Sinatra/MongoDB combo is also really really nice.

I would be careful with Rails, when you plan to do some heavy data processing and/or if you need your application processes to run for a long time without being restarted.

Heavy data processing yes, but the long running process is bogus. The major memory leaks in Rails were patched up years ago. The tooling is a lot better today on the off chance that you do need to debug a memory leak, and the new breed of ruby runtimes such as Rubinius will keep memory in even tighter control.

Being somewhat problematic for long running process is not only a function of memory leaks.

Even with the better runtimes now available, suggesting that they come close to the stability (and performance and long term memory consumption and profiling + debugging capabilities) you'll find on the big JVMs is not really helpful (JRuby being the obvious exception but even here I am sceptic).

I've got a small webapp targeting ASP.NET MVC 2.0 (built with Visual Studio 2010) running on Linux with Mono 2.6 and served with nginx (using the fastcgi interface to mono) so if you put the time in, it's possible to deploy on an open source stack.

I saw a commenter talk about Linq-to-SQL and yes this is possible too. I use a PostgreSQL server and use Linq-to-SQL with it. It works but as expected, the documentation is poor.

This is free to use, but from my experience some of the costs can be very frustrating time spent trying to figure out why things are not working as they should, or barrier to entry with poor documentation.

As one commenter pointed out, mono behaves strangely when changing part of your codebase while it's running. Modifying a file can cause 500s or timeouts to be thrown. Killing and restarting the fastcgi process is needed.

A major positive is the developers who work on these parts of mono are very responsive to issues and code is improving all the time.

If you're an ASP.NET MVC programmer looking to learn Ruby on Rails, check out my book Ruby on Rails Tutorial at


I don't know ASP.NET MVC at all, so I haven't tailored the presentation to Microsoft developers, and I'd be curious to hear if you find my approach accessible. You can leave me feedback at http://www.railstutorial.org/feedback.

N.B. Although NoSQL is outside the scope of an introductory tutorial, I'm hoping to do some follow-on articles on such specialized topics once the core tutorial is finished. (I'm currently writing the final chapter.)

My first question after reading the title was "Why?"

From the article:

"JA: All the problems we had (licensing, testing, deployments) could have been overcome. We could have used workarounds, written our own deployment framework, etc. What is comes down to is that we both really enjoy working with Rails and we enjoy the Rails community and the tools and libraries available. One of the best parts about running the show is that we get to do what makes us happy."

Nope. FTA: RB: If the platform was holding up fine, what prompted the change of architecture?

RC: Money.

Rob (RC) and I (JA) tend to disagree on things all the time. For me it wasn't as much about the money as the pleasure of using Rails, and I know Rob also loves using Rails. The money was basically what made the decision easy, here were our choices:

1) Continue to use a platform that costs more and isn't as much fun.


2) Use a platform we both love using and works out to be cheaper.

Pretty simple decision really.

Actually, from Rails, to ASP.NET MVC, to ASP.NET MVC again ("because it was getting too complicated"), then to Rails.

I'd also be very hesitant to use MongoDB as a main datastore as it has no durability model - the 'D' in ACID. I hope they've at least changed the setting, or don't mind losing their last 60 seconds of writes when their EC2 instance goes down.


Note that Mongo compares itself to MyISAM, but that is infrequently used now because of its lack of durability amongst other things - no transaction support, etc (most apps use InnoDB).

We actually use MySQL as a transaction log for things like orders/views to balance that out, MongoDB stores everything else though.

Gotcha, that works, and was mentioned in passing. Mongo still makes me nervous, but otherwise looks very promising.

Our writes to Mongo are few and far between - otherwise I'd be nervous too :)

I'm not an expert with the Microsoft stack, but aren't there ways to mitigate the costs? I've heard Mono supports (most of?) ASP.NET and you don't have to use SQL server either. What other costs are there specific to the Microsoft stack?

> I've heard Mono supports (most of?) ASP.NET and you don't have to use SQL server either.

I wrote a medium-sized online game for a guy who wanted to do it in Mono/MySQL. True, Mono does implement a lot of ASP.NET, and a lot of things work fine, but there are still rough edges that drove us crazy to the point that I finally convinced him to switch over to a Windows server (from Linux/Apache). Some examples:

* Deployment: Mono was very touchy about deploying changes. If you drop in app_offline.htm and then replace every part of the site with new files, it usually worked. When it didn't, it would hang Apache and/or just start returning 500 errors until the web server was restarted. (Whereas with ASP.NET, you can drop in individual files and/or updated DLLs and the site will smoothly recompile as needed.) This was somewhat okay on dev, but got very old very fast in production.

* Strange memory errors: I'm still not sure what was going on, but we had some strange behavior going on where the application would get itself into states that should not have been possible. In one instance I was able to track it down to a particular variable assignment that simply would not happen, despite the code clearly being executed. (E.g., "int x = 42; x++; Trace.Write(x);" would write 42. More complex than that, but that type of thing.) My wild guess is some kind of memory allocation in Mono, but I don't know. Could have been my code somehow, but I have never seen the problem since switching to a Windows server.

* Feature lag: By its very nature, Mono lags behind .NET and it got old being able to use cool 3.5 features (such as LINQ) on other projects and be stuck with 2.0 in Mono.

I think Mono's an impressive project, and my hat's off to the folks to have worked so hard on it, but after some experience with it I decided that if I'm going to write stuff in C# I'm doing it on the Microsoft stack.

We didn't look at Mono because the amount of code we had was fairly trivial and rewriting it in Rails actually let us simply alot of it and write it better than we did before.

I love Mono though and I am actually using that on my other startup (http://adzerk.com) instead of rewriting since I have so much more code there.


What he's getting at (I think) is that, you could work around that by using Mono on a linux server, Postgres, MonoDevelop, so on..

Though I wouldn't go down that route personally, so I agree with you.

Didn't mean to delete my earlier comment. Actually I'm glad he asked the question, because I wasn't aware .Net MVC could be made to work under Mono until I looked it up.

I would've loved to see a rough breakdown of how they got the the "5 figures" cost...

SQL Server license: $7171 per processor - we have a single quad machine... which we'll likely need to split into two machines, incurring extra licensing fees. Our servers were hosted at MaximumASP and they gave us a bandwidth quote with additional servers that was 4 figures (remember, this is 3 years out).

Visual Studio is $1200 a pop - this is for two people.

I'm already at 5 figures and I didn't include Expression/Media Encoder and so on.

http://www.microsoft.com/sqlserver/2008/en/us/pricing.aspx http://www.microsoftstore.com/s/visualstudio

What did a full license of VS give you over just using the Express versions of the tools? From what I've seen unless you have a huge team and need the team features you could probably get by using the express versions.

I do agree with that the SQL server licensing is a huge PITA and in your case you really didn't need all its ancillary features and instead just needed a simple, fast data store.

The article was a great read.

Express -> VS.NET is an improvement on the order of Notepad -> Eclipse. (Or Eclipse to VS.NET, for that matter).

If you're developing on the MS stack, you simply need VS.NET and ReSharper or you'll be wasting hours of your life every week.

Yikes. Why would you pay retail for that stuff?

Small Business Server gives you all the backend stuff for more like $1000 per server. BizSpark/EmpowerISV/WhateverTheyCallItNextYear gives you all the dev tools and OS stuff essentially for free.

I can't imagine that anybody has EVER actually paid $7k per processor for a SQL Server license. We've been running it on our servers for years, properly licensed, and never even come close to that figure.

BizSpark has an expiration date, as covered by a comment on Rob's blog:


The program does, but the software you download does not.

Microsoft comes out with new ISV programs about as often as new versions of Visual Studio. As long as you join the latest one every few years, you'll always have an up-to-date set of developer tools.

So all that's left is server costs, which as I mentioned above come to a little over $1k/box.

So then why not just replace the database and keep the rest? Were you using Linq to SQL and hence tied to SQL Server? As far as VS I'm sure it would not have been a problem for you to get free versions. However, I suppose if you were to change the database portion, probably a sizable chunk of the application, you may as well replace the whole thing...

If you're developing with .NET, you are best off using the whole Microsoft stack. The vertical consolidation and tight integration is the benefit you get for the high costs.

If you mix .NET code with significant OSS components (i.e. databases), you will incur a lot of extra setup work and hassle. There is less of a community and therefore you'll have to figure more stuff out on your own. If you're a .NET programmer for life, then this is great experience for you.

One of the traits of a good CTO is to access the community around a mix of technologies (i.e. C#/Sql Server, C#/MongoDb, or Ruby/MongoDb). If there's a good community around your technology stack, that'll streamline development a lot more. Things will just work. Many people will have already solved the problems you're bound to have.

But why? My cost right now (aside from hardware, which is net even) is 0 - without the hoops. Also - the testing story is much better.

Was the cost of rewriting that small? In my view it would only make sense if the cost of rewriting the app is insignificant. If you can do it in a week or two, sure... any more than that and I would start to question if it's worth it. I mean, you gotta make sure it brings in money first, right? :-)

Overall about 2 weeks total. I took my time and wrote it first in Sinatra, then scrapped and went to Rails - 2 weeks :)

I'd like to hear more about why you switched from Sinatra to Rails. I'm primarily an Asp.net MVC dev who plays with Python/Ruby on the side, but Sinatra really interests me.

What is it about your database requirements that prevents you from using SQL server express?

Using SQL Server Express is just trading one time-bomb for another time-bomb. Now instead of a 3 year bizspark timebomb we have a size time-bomb, once we cross that point we are springing for SQL Server. Why use a stunted Express product when you can use MySQL or Postgres for free?

Because it's a robust and feature rich database/tool-set thats great to develop on and gives me peace of mind. It's been a while since I used MySQL but the database and it's tools left me underwhelmed. I found that I could be more productive with SQL server. I haven't tried Postgres.

I guess I like to think if my databases grow too large for the free version that's a good problem to have. It's not that bad a "time-bomb" to me. Many sites will never need the paid version - especially the ones small enough to be so cost sensitive.

You can't even do automated backups with SQL Server Express (without some hacks or other tools).

MySQL is a pleasure to work with and so it MongoDB, more so than SQL Server.

If you prefer SQL Server than more power to you.

I do backups using a windows scheduled batch file that runs sqlcmd.exe (part of sql express). Slightly hackish but it gets the job done.

Anyway, I hope that articles and interviews like yours do make MS lower the price of SQL standard, but people shouldn't dismiss the MS platform based on cost when in many cases it could be almost free.

Didn't look at Windows Azure as an option? http://www.microsoft.com/windowsazure/

We didn't seriously look at Azure for a couple reasons:

1) It's expensive compared to other hosting platforms. 2) I hate lock-in to a particular platform. If we coded against Azure tables we would be locked in to Azure. If we used their SQL platform we would be space constrained. 3) I have used Azure and deployment, updates, and troubleshooting are all slow and cumbersome. It is still a very immature platform.

We're looking at making the move from Rails to ASP.NET MVC. So pretty much the opposite of what you've done, and we're planning on hosting on Azure. So I read this thread with great interest.

We've found that like for like the Azure platform is very well priced and is actually less expensive than our current Ubuntu setup, as well as being cheaper than comparable high level Microsoft hosting providers.

We don't much like lock in either and for the parts of the Azure platform that will lock us in we're extracting the code into a wrapper so we can replace with the minimum of work should we need to switch hosting platform in a hurry. Database wise we're going with SQL Azure and their 10GB limit I find to be quite spacious for our needs, although that would depend entirely on what you're storing. I believe they have 50GB databases in the works for the near future?

The deployment times are an issue and I have heard similar, but again I believe if you upload the project yourself then request the update the deployment time is greatly reduced making it less of an issue. It would take some doing to match Capistrano deployment though which is simply awesome and something I will certainly miss.

Surprising to hear that Azure is cheaper for you, I would be interested in hearing if that holds true once you actually get up and running on it.

I actually used a powershell script to automate deployments on Azure, it was the delay from when you do that which is so frustrating. Waiting 5-10 minutes was fairly normal.

You really don't HAVE to use SQL Server just because you're using .net you know...

If you're developing in .NET, you might as well use as much of the Microsoft stack as possible. The benefit to using Microsoft stuff is the vertical consolidation and tight integration.

Otherwise, you'll be fighting against the grain. And the support community will be much smaller (i.e. .NET w/ OSS databases).

No I don't agree at all. It's trivial to connect your .net applications to any database you want. If SQL Server is $7000 too expensive it's a mistake to assume you'll be better off dumping the entire .net framework just because .net + SQL Server is more popular than .net + (arbitrary DB)

I agree about using the rest of the MS stack with .net but the DB component specifically is highly modular. Let's say you want to go for PostGre or Couch. Neither of those are part of the 'RoR stack' is it? How is is any less correct to use PostGre + .net rather than PostGre + RoR? Is the PostGre + .net community really that much smaller than the PostGre + RoR? I seriously doubt it.

Drivers dude. The drivers are SUCK for using MySQL and PostGreSQL. Couch is fine and so is Mongo but the drivers aren't baked (I worked on one for Mongo - built the initial LINQ provider).

Run MySQL on Windows and see how slow it is. The driver story is horrific.

I can vouch for the Postgres part of that. We use .NET against PostgreSQL at work (a not especially database-intensive app, fortunately) and wound up using the ODBC drivers. We experimented with Npgsql, but ran into some flakiness that scared us away. There's really not a tremendous amount of documentation around using .NET with Postgres, either, which is unfortunate.

No self-respecting .NET developer would use MySQL for anything :P

I didn't say anything about connecting to other databases. Yes, .NET does that. But when you have more advanced problems, you're less likely to find other people who had the same problems (and then solved them) than if you stuck with Sql Server.

My opinion comes from first-hand experience developing for a .NET-based startup. I have faced the issues that the two TekPub guys have. Although, switching away from .NET isn't an option for me. So, sometimes I need to integrate with OSS components. And the .NET examples/docs/community are often sorely lacking, and I have to figure out a lot on my own. I realized that it would be a lot easier to integrate if my employer was a PHP/Ruby/Python/Java shop.

Since there's SO many people using .net I really have never had any of these problems you describe. Every database under the sun has loads of users with .net frontends - even compared to RoR users. Yes it's true that the .net+SQLServer userbase is larger than the .net+OtherDB but that does not imply that RoR+OtherDB is always bigger than the .net+OtherDB group.

Could you give me an example of the sorts of issues you've had? I've been using .net since 1.0 and we integrate with dozens of thirds party systems every year and database tools for .net are in my experience mature enough to not be an issue.

This article is pretty short on costing details. Silverlight encoding aside (because that's competely unrelated to asp.net mvc deployment) you can deploy web sites really cheap on the microsoft stack.

Windows Web Server: $400 SQL Server Express: Free (Databases have a 4 GB maximum size)

I can't image how it would cost them 5 figures to use asp.net mvc. I find the productivity of the MS development stack to be well worth the meager cost.

Take stackoverflow.com - a hugely successful site that I believe runs off 3 servers (originally 1). Jeff and Joel put this together on a pretty tight budget and I bet their site handles a bigger workload than the OP's site.

Look a few comments up - also (from MS themselves) running a site on SQL Express is not a good idea. I would never do that. Once you leave express, you need to license (for the web) by the cpu - which means you're about to cough up a lung.

Ask Jeff and Joel how much they're going to owe - I think it's almost to 6 figures :).

To be fair, Jeff and Joel are still on Bizspark. StackOverflow is ~2 years old.

And after 3 years if they need to spend 10k on licensing for a very successful site that will be peanuts compared to their own time spent. Or do they value that at nothing?

I think this is a bad article/interview because it gives the impression that you can't do websites in asp.net MVC on the cheap.

You are assuming that we would spend more time using RoR then ASP.NET, we have found this to be the opposite. We build out and deploy features in much less time then we would on ASP.NET now.

Not sure if this is feasible, but it would be great to post your ASP.NET vs RoR code to compare the delta.

When is $10,000 peanuts? Seriously - I'd rather bonus a developer that money then hand it over for something I can get for free.

I think the point is $1 is too much money if the tools aren't the best. But $10k is not a lot of money if the tools are great. I tell my team, if you find a tool that makes you more productive, buy it. There's almost no reasonably priced tool that wouldn't be worth it if the dev thought it was.

We budget around $10k per dev for tools and training per year. We usually come in a fair bit under, but given we spend over $200k/year per dev, this is a small fraction of their cost.

I think your point is that the tools weren't the right fit. Because if they were, it seems like baulking at $10k is a sign that you can't make the right cost-beneift tradeoff -- which is a very bad sign for a company.

Actually, with 2008 R2 the SQL Express limited has been raised to 10GB.

SQL Server licenses will get you there pretty quickly.

DB Servers are irrelevant when you are talking ASP.NET, so long as you use NHibernate.

Tell that to MySQL which runs like an ape through a mud bog on Windows.

Then put MySQL on a Linux box, no need to have it on Windows...

And then you have the added complexity of two OS platforms to support.....

I think they made the point in the article that they could have overcome the obstacles of the ASP MVC platform, but why? They said they're more productive on Rails, they like working on it better, and it's cheaper.

What positive would there be (for them) of staying on the MS platform?

How many mixed platform server shops do you know of? If you're going to go linux/OSS for your DB you might as well go all the way.

Nice article! I really enjoy hearing about other people's experiences.

I have nothing per se against Microsoft's hosting except for the expense. I believe that it is much more expensive than AppEngine or AWS. Question: the lock-in factor is likely not that big of an issue since apps could be run on Mono and a leased server, right?

Really, software, writing and deploying web apps is a business and there are two large costs involved: labor costs for writing and maintaining software, and hardware+admin costs for deployment. The question is what is least expensive and fastest to deployment. For me, that is Ruby on Rails for the front end, and as needed, back end processing in Java, or Clojure, or Common Lisp - whatever makes sense for a project.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact