I've covered a rather wide area in this chapter. You first came to grips with why instrumentation and monitoring are useful in developing and supporting your applications. Then I listed some of the types of diagnostic data that are useful when you're monitoring an application, especially in a production environment. Next, you saw how to implement tracing in VB .NET using the Trace , TraceListener , TraceSwitch , and Debug classes, including the use of assertions to check your assumptions. Finally, you saw how you can use custom performance counters to show what's happening within the depths of your application.