Your work doesn't end when you deliver a new application to the users. Even the difficulty of a successful deployment doesn't end the application process. In fact, from a certain perspective, your work has just begun, because now the test of your application design and implementation begins by vicious users who will show no pity whatsoever. You may quickly find yourself longing for the days when you spent hours, coffee cup in hand, writing and debugging the initial application — the days when your hopes were high. I'm not trying to terrify you too much, but once the application leaves the test environment and goes onto user machines, everything will change. People will do the inconceivable to your application and that's just the good days — the bad days will be worse.
Supporting and maintaining your application is hard because you often have to fix errors on a short schedule without much in the way of helpful information. The best developers do listen to the user and try to understand precisely what's gone wrong with the application they're using. However, even the most coherent users won't deliver everything you need to fix the application, and all the jumping up and down in the world won't change the situation. That's why the best developers also add capabilities to their applications that make the support and maintenance process easier. This chapter describes many of the techniques that developers use.