We've had IntelliTrace logs for desktop applications for years. When an error occurs, the application generates the log and typically asks the user to send it to the developers. The developers then match up the log with the symbols from the correct build and open the IntelliTrace log in Visual Studio to identify the problem.
In the past, production ASP.Net applications didn't do this, for scalability and performance reasons. Finding a bug that only occurred in production meant taking a performance hit for as long as it took to reproduce the problem, then reverting to release code once the bug was thought to be fixed.
Microsoft Monitoring Agents (MMA) changed that. Now you can run MMA on production websites full time, at least according to Microsoft. (If your site runs above 80 percent of memory or CPU utilization, I'd say all bets are off.) When an error event happens, the application will generate an IntelliTrace log file. These let you go to the code that caused the problem when you open them in Visual Studio 2013, just like they would for desktop applications.
Performance and diagnostics
Energy consumption is a new consideration for desktop and server application developers, although it has been a driving concern for mobile application developers for years. If just one desktop developer learns to replace his busy-wait loops with async code while profiling Windows Store apps, the world will be a better place.
The improvements I discuss in this section were actually introduced in Visual Studio 2012 Ultimate, but I think they are important enough to include here.
Test-driven development (TDD) is near and dear to my heart, but I didn't used to be able to practice it on Microsoft code the way I could on Ruby code, though I was an early adopter of NUnit. What made TDD untenable for me was that IntelliSense would blindly autocomplete the names of stubs I hadn't yet written to some random but similar label.
Sign up for CIO Asia eNewsletters.