<p>The ASP.NET application that I am currently responsible for at my day job has hit its limit in terms of its ability to scale inside a single server. Obviously we are working toward moving session out of process and the test and hopefully deploy date draws near. I would like to draw on the experiencies of people using the built in load balancing in Windows vs. an appliance solution such as one by Baracudda, Coyote Point, F5 etc. Did you start with one and move to the other and why ?</p>

<p>thoughts and advice appreciated in advance...</p>

some thoughts
WLBS is often "good enough" to get you started with NLB.  However like any great engineer - you need to "measure to know"
its not just about scale-up its about soft or hard redundancy too.  We often NLB between VMs just to give us soft redundancy.
NLB applies just as much to back-edge as well as front-edge networks
stepping up to hardware acceleration brings you a new degree of ops costs.  New training specialized support, escalation etc.
look for hardware acceleration to give you a lot more than NLB e.g. DDoS protection, SSL, Compression, Caching, Content Switching, Connection Aggregation, Buffering.
educate both Devs & Ops SE's about hardware acceleration benefits,a great design can merge the line between network operations and application development.
hardware buffering on it's own made our ASP.NET around 30% quicker just by reducing our GC time.
content switching can enable you to transparently merge or migrate disparate systems.  We merged MSDN & MSDN2 platforms into a single url space using this technique.
session stickyness is a dual edged sword - use sparingly - again no substitute for good engineering - measure and test
everything
We use both WLBS and NLB within our network - cost often drives the conversation.  Treat both as tools in the toolbox, learn their nuances, cost models etc.