22 tools you need for your ASP.NET Startup

My latest company, CorpQNA - Social Q&A For Business, is built (mostly) on the .NET stack. This article explains some of the components I used to pull it together.  

If you are still using webforms, wean yourself away.  When we first built PayScale, we used classic ASP, which was closer to the right model than WebForms was.  Later, I made the fateful decision to move to ASP.NET Webforms.  I was not happy with this decision.   Trying to debug ASP.NET Webform Lifecycle events (Page_load vs control_load vs onLoad vs ...) will make your head spin and send you fleeing to Django or Rails.

Right now, I like it better than Azure Websites and cheaper to start with than AWS Elastic Beanstalk.  It's the option that's most like Heroku (which is the gold standard)

Azure Websites doesn't support SSL yet.  All of your domains have to be on mysite.azurewebsites.com.  Not a good way to project confidence.  On the downside, appharbor only supports SNI for SSL ($10 / month) or IP based SSL ($100 / month)  Hostname SSL (which Heroku supports for $20 / month) is not yet available.   SNI is a problem because older browsers will give warnings when you are trying to use it.  I'm using it, but eventually, I'll have to switch.  I'm hoping that AppHarbor catches up before then.

AppHarbor is aware of your branching schemes, and you can tell it to listen on a particular branch.  So if you are pushing to staging, just push your code to a staging branch and AppHarbor will only deploy changes that occur in that branch.  AppHarbor also has a continuous integration server built it.  If you use NUnit, this saves you time and helps you avoid breaking your site.   AppHarbor seems to use SQL Express as it's database, which seems like it will be less robust in the long term, than SQL Azure.   AWS has an RDS implementation for SQL Server, but I think it's the most expensive of the three. 

Visual Studio and MS Office for free.  The application process is a little bit burdensome but it's worth it.   There's also a lot of goodies attached (free credits on Azure, opportunities for networking, promotion and guidance) so it should be a no brainer.

An enterprise class bug tracking tool.  I've used FogBugz for 8 years now, and it works very well. 
It's also free for "startups", which means for 2 users or less.  So there's no reason to not get started on it.
It comes with an integration with Kiln, which is Fog Creek's fork of Mercurial + code reviews.  I haven't much used these features, but it's nice to associate my checkins with bugs.

Like RubyGems for your ASP.NET application.  It's super easy to install new functionality in your application.  Install-Package EntityFramework and away you go.

If you haven't joined the keyboard revolution (vim, emacs, etc), it's time to get your hands off the mouse!  You'll need to spend a few weeks learning how to use Vim (try the great Vimcasts website to get started).  Download vim first.  Once you are there, look at ViEmu($) or VsVim(github).  These are "hybrid" vim solutions.  Some commands are still missing and you can't use macros, but the core hjkl type navigation is there.  

Stop monitoring your own errors and performance.   In the past, we've had to build these tools ourselves (error log monitors) or tried to hook together various open source toolsets (like Ganglia).  Do yourself a favor.  Until you get an IT professional working full time, use Airbrake and NewRelic.  They are free to start and you won't think about that stuff for a long time.

Mailgun can send and receive mail for you.  If you are hosted anywhere in a cloud environment (AWS, Azure, AppHarbor, Heroku, etc),  using a service like Mailgun or SendGrid is a requirement, because otherwise, your email will get marked as spam.  Simple as that.  You can also you webhooks to let your users use email as an interface into your product (instead of having to visit a website).  They also even parse out the junk from your email, so you don't have to.  (signatures, Subject lines, etc)

Ninject is Dependency Injection made easy.  There are a lot of frameworks out there for dependency injection.  Fortunately, they all require your code to look almost identical (lots of interfaces, avoiding instantiating objects directly).  So which ever one you use, it's not that hard to swap out for another one.  Ninject is super easy to get started with.  So if you are no to IoC or DI, it's a good place to start. 

Also, If you are planning on doing any sort of testing, you'll need a Dependency Injection Framework.  Otherwise, your test setup scripts will start to look like a mess.

Still using NUnit for testing?  Time to take a look at NSpec.  This is based on the hugely popular RSpec library for Rails.  Your tests will be a lot cleaner with NSpec.  You can set up elaborate contexts to reproduce difficult errors.  It's not as supported as NUnit, and there are other BDD Frameworks available which might be better.

I was looking for a customer feedback tool, and was originally planning on going with UserVoice or GetSatisfaction.  But then my friend Lee mentioned Intercom.  This is by far the best way to get feedback and communicate 1-1 with your users.  It's not cheap but if you want a good relationship with your user base, this tool is a must have.

The pre-eminent framework has lots of best practices built in.  In addition to making your website easier to read and navigate, you'll learn a lot about usability and design simply by implementing the framework.  There's also a growing ecosystem of tools, themes, and plug-ins that work with Bootstrap.  Bootstrap has also recently moved into it's own foundation, so it should be around for a while.

If you are developing a new MVC application, you are either going to choose Entity Framework or NHibernate.  Frankly, for a long time, NHibernate was the better choice.  It probably still is if you have classic N-Tier SOA application.  It just works better with disconnected datasets.  It has better support for caching semantics and more fine grained control over your apps.  But it can't be a bear to get started with.

If you are just starting out, Entity Framework with Code First models will get you a long way quickly.   The LINQ oriented syntax is clean and easy to understand.  But there are still the occasional side effects related to how Entity Framework stores and manages objects under the hood.  Hopefully this stuff will get resolved.  The EF team seems to iterate very quickly and is able to get language-specific features into the .NET platform.

The other caveat is it is really hard to switch from one to the other.  if you use a Repository pattern, this can help.  But a repository pattern doesn't really work well with either ORM, and requires a LOT more code.  So just plan on sticking with one or the other for a long time.

Rails has ActionMailer, which lets you write emails using typical MVC semantics.  Unfortunately, this is not yet built into ASP.NET MVC.  But there are some good libraries to handle it.  I use Postal, which leverages the open source RazorEngine library to create your own Razor views.  The syntax is slightly less powerful than Razor for ASP.NET (ie, no Html helpers, layouts, etc) but it's better than concatenating strings together to produce your emails.

Like Firebug or Chrome Dev Tools, but for your ASP.NET website.  This is a great way to visualize your performance.  

Microsoft doesn't offer a world class search engine. SOLR has all the features you'll need.  SOLR.NET is a wrapper around SOLR and makes it easy to integrate.  Not as easy as Sunspot for Rails, but you can get going with SOLR in less than a day if you code well.

For $20 a month, you'll get your own linux server.  Hard to beat.  I use it for lots of utility functions, as well as hosting my own SOLR server.  There are a ton of "cron jobs" masquerading as subscription cloud services.  If you don't watch out, you can get dinged by 5 or 10 services that each cost $10 a month and all of the sudden, your hosting bill is through the roof.   BTW - oddly enough, Azure is offering a linux VM even cheaper than linode, at $10-$15 a month.  But it's only available in preview right now.  

Like this?  For more, follow me on Twitter @tarr11 or on Google+  
Find a problem or mistake? File a bug or better yet, submit a pull request