Q1) What types of problems will appear anyway?
Errors, design flaws, feature requests and usability issues, the same problems as any other application.
Q2) How much time and knowledge will these problems solve?
More than you want to spend.
Q3) What can I do first of all to minimize the required user support?
Tests, tests and other tests. Acquiring full-time testers is the best thing. Otherwise, make sure that you create a support database for yourself so that you can easily view past problems and transfer this knowledge to other support staff.
Use a good bug tracking / ticketing system, preferably one that allows you to open or integrate with some kind of knowledge base accessible to users. If you're lucky, this will help reduce the small number of support requests.
If you want to be really active, create a behavior tracking system in the application (naturally, preserving the anonymity of users) so that you can see which functions users spend the most time and understand the areas in which your mental model of the application is not jibe with them.
Oh, and try to make the program unsuccessful gracefully. A critical dialogue of exceptions does not help anyone; there is a screen that explains at a general level what went wrong and what they can do to solve it ("try again after 30 seconds", "restart the application"). Some unforeseen error conditions can be resolved in this way, for example, by connection timeout. On the same screen, you can either automatically send an exception report or copy debugging information to the clipboard so that they can send it by email. Your work will be much easier if you have a stack trace.
In one of my applications, I modified the global exception handler to display a special message for certain types of network timeouts, and it drastically reduced the number of "errors" sent. While you keep track of exception reports, over time you will find out what types of unhandled exceptions / unexpected conditions occur frequently and can ... deal well with them.
Aaronaught
source share