What problems can arise most often?

If I wrote:

  • C # SQL database application (a simple program consisting of a graphical interface for some forms with logic for interacting with an SQL database)
  • for home use that does not perform any network communications
  • which uses a simple, reliable and appropriate SQL database
  • whose graphical interface is properly separated from the logic
  • which has a complete and reliable input validation
  • which has been fully tested to eliminate 100% logic errors.

... and then, if the program was installed and launched by random users on their random Windows computers.

Q1) What types of technical (non-procedural) problems and support situations are most likely and how likely are they?

Q2) Is there anything else that I could do in the first place to prevent these problems and also minimize the amount of user support?

I know that some answers will be applied to my specific platforms (C #, SQL, Windows, etc.), and some will not.

Please be as specific as possible.

Mitch Wheat gave me some of the most valuable tips below, but now I offer an award because I hope to get a better idea of ​​the things that I most likely meet.

+6
language-agnostic c # sql-server
source share
10 answers

If you claim that your logic is correct and verified (according to your question), which leaves mainly the state problems that you have to deal with.

So, what you have to worry about will be:

  • Hardware malfunctions

  • Critical files are launched on the machine at unexpected times, and not by your program.

  • Dependency updates that break you.

  • General system status - things like a full hard drive

  • Database is stopping

  • Dependencies Removed

In addition, any place in your code where you assume that an external process is running and available is just a problem that awaits its appearance. You should always assume that any external process is rough, and that this happens arbitrarily, this is the expected behavior (this is part of why you have things in separate processes). In fact, relying on any condition that you do not fully control is inherently risky. While you can go too paranoid along this road, it’s good to at least consider what you depend on and be very careful and frank about what you are making assumptions (it might be safe to assume that the .NET framework is around as if it’s not, maybe beyond your ability to fix this problem).

+4
source share
  • Never trust unapproved user input

  • Create an excellent error log (and possibly a feature to automatically send messages) to your application. Be able to dynamically increase the level of logging, so that detailed logging can be enabled on the user's desktop.

  • Report bugs to users in a friendly manner; do not blame them!

  • If your application depends on many environmental parameters or third-party add-ons / libraries that can be changed by other software, try starting the initialization step, which checks and registers the expected and found versions. It can save you by pulling your hair out!

+13
source share

It never ceases to amaze me what real users will do. Get ready for everything and everything.

+7
source share

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.

+6
source share

First, if you are creating a Windows application, you need to consider the fact that each installation of Windows will be different. Some may have additional security applications. Some may have UAC; some are disabled. Different OS, different OS patches installed. Some users may only be in the Users groups; others in the Administrators group. Just getting users to have the proper .NET platform installed properly can be a problem if their system is partially fekawied. In addition, you will have cars with different physical capabilities. In short, you need to be careful to make any assumptions about what is on the user's machine.

One thing you can do to reduce the change of security software in your path is to develop an application for working with the most limited level of access rights that you can collect. Learn .NET trust levels. The more limited the levels of trust under which your application will run, the lower the likelihood that any other security feature or application will cease to be used. In addition, you must obtain a full code signing certificate to sign your assemblies.

Another solution you should consider is using your database engine. Although SQLExpress is good, it poses an installation maintenance problem for the type of application you offer. What if they have an older version installed? What if they have a new version installed? What if the version you are using requires a patch? What if their security software stops working? You did not specify how much data will be involved in the application, but you can consider a more portable database format such as SQLite or even Jet (Access) (although Jet has other problems that need to be addressed) to avoid installing another service by user machine.

As you said, minimizing user support is a big problem with something that will have many installations. As others suggested, to reduce support requests and help you make corrections to the application:

  • Testing. In particular, automatic testing of both functional and functional. 75% of the code written for this application should be test code.
  • Logging In addition to the error logging mechanism, you will need to create a mechanism that allows the user to send these logs for troubleshooting purposes.
  • Normal routine. You need to make the installation as bulletproof as possible. If users cannot install the application, they will not be able to use it. Thus, along with testing on your application, you will need extensive automatic testing in the installation routine. Ideally, your application would be encapsulated in such a way that it could be deployed via xcopy.
+2
source share

I started writing code in a spare bedroom in 1988 and created a company that essentially typed on the keyboard and answered calls. Since we still live 20 years later, I think you would say that we did very well. I do not often call technical support, but I pick up the technical line every once in a while, as a way to stay in touch with customers.

What follows is a sort of compendium or classification system for the most common challenges that I have taken over the years. Your results may vary, but the list should give you some idea.


The most common class of complaints I've seen over the years has been about installing the application. I have worked hard to automate every aspect of the installation, but people still have problems.

  • Inability to follow instructions: Some people simply will not follow instructions, and they will call you when something does not work. For example, installing our application has three steps (database server, database and application). Despite very clear instructions, some people will only take the third step because they have a theory as to why they don’t need 1 or 2. Workaround: Use a professional installer (such as InstallShield) to simplify as much as possible. InstallShield and Wise have tools that offer an amazing set of tools to solve almost any unforeseen situation. They are expensive, but worth the investment. The simpler the better - do not accept anything and you will minimize your calls.

  • The database will not be installed: There are several computers that simply will not run SQL Server Express Install. There is no good reason why they are just used to it. There is a lack of a good workaround , although you need to make sure that you just don't see the instance of case # 3 ...

  • The database is already installed: Some people already have SQL Server (in some form), so your installation will not work. Workaround: Use a named instance with a unique name.

  • The installer does not have privileges: A person trying to complete the installation can usually print this code and ask for help from the group that controls the computer. So it’s not often. Workaround: There is no good workaround to avoid calls in general, but you can keep them short by simply explaining that you have no way to redefine the restrictions placed on them by their Administrator so that they need his or her help.

Despite this experience, I do not hesitate to recommend that you use SQL Server and .NET even for a moment. The number of computers that will not start SQL Server becomes vanishingly small (if it was worse in the late 90s, early 00s), and I never had to install .NET. This is a great database for local applications, and it allows you to evolve if you ever want to scale.

The next class of calls comes from people who just have a different software model than you.

  1. Metaphorical Confusion:. Our software uses the Folder and Page metaphor interface and is widely acclaimed for its ease of use. But some people were simply embarrassed by all the choices we made, because they had a very simple model of what they wanted to do. Workaround: I created a multimedia demo in the help system, and the Getting Started topic explained a metaphor for the user interface. Challenges on the topic fell to zero.

  2. New feature requests: you will also have a significant number of calls from people who want new features, but who, surprisingly, express their wishes, telling you that you have a “bug” in your software because you do not support them desired feature! Workaround: Listen! Whenever I received a request from two different people, or I really liked the idea, I built it. I was very aggressive in this regard. In the end, people loved the product, loved the business, and recommended us to friends. I often say that our business is built on the ideas of our customers (even if they are sometimes capricious and unreasonable).

  3. Additional information required: Our software offers a wide range of fitness tests that people can perform. Initially, we asked a lot of questions about the tests themselves, the source of our test information, etc. Workaround . We have built a complete description of our tests and their source to help the system. The broader lesson is that your help system is more than just using your software. This is a very important tool for direct communication with your client across the entire spectrum of processes that you are trying to automate! It will not eliminate all calls, but they can be much shorter if you can say: "Just open the help system and click on topic X."

  4. Error found:. You can believe that you have no mistakes, but this is unlikely. Users do strange things for the software, and they will call when they receive an error message to do what they are allowed to do. Workaround: You have a way to write bug reports (I can recommend FogBugz!) And be aggressive about fixing them. Of course, you will also need tools by which customers can easily upgrade their systems or your fixes will not help. Most commercial installation packages have tools that let you post updates online for automatic download and installation. If you want to be successful, you must listen to users and respond to their pain.

The next class of support calls comes from people who are migrating to a new computer.

  1. Moving the database: People do not know how to back up the database (even if you provide the tool), and they will often be afraid to even try, because their data is now becoming too precious to take risks. Workaround: We have created a number of very detailed documents dedicated to these tasks and posted them on our website. He did not eliminate the calls, but significantly reduced them.

  2. System failures:. My computer suddenly died in the dust of electric sparks. The hard drive made loud noises for several months, and I never made backups because I didn’t feel like that. How can I get my data back? " Workaround: Only one - has a good sense of humor and reminds them to backup.

The next class of support calls that we deal with concerns those related to the license.

  1. Registration: Will someone who uses your application register? Even if they can do it online, some will call you anyway. What for? In 50% of cases, this is because they want to get a free copy and want to tell you a lie in order to get it. The other half is not connected, has an unexpected message, moves to a new computer, etc. Workaround: No, these are people who just decided to talk to you so that they could use the application even if they should have copper balls for this.

  2. Honest people: Some honest people will call you just to ask if it’s good to do it (can I use it on my laptop?) Or because I have to do something, but they hope that you let them do it anyway. Workaround: Make your license as clear as possible - especially in the first few lines, as they will all be read.

  3. Finally, there are fans . People who just love what you do and who want to talk to the company that built it. Now it is less common than in the 90s, but with them the most interesting. There is no workaround, just enjoy while you can.

Good luck, build your business!

+2
source share

We had a client who did not want to use the software because of fear that the software would replace it.

He used a forklift to crush the handheld computer on which the software was running.

+1
source share

Forcing a user to install Microsoft SQL Server Express is a huge dependency. I would recommend using something lighter like SQLite.

In addition, if you do not take my advice into account and use SQL Server, configure it so that it accepts only connections from 127.0.0.1

To make the whole process easy for the user, use as many scripts to install as possible. Do not try to force the user to configure some complex software products to work with your application. Make sure they have the default installation with one click, which works just that.

+1
source share

In my experience of 20 years, the most common problem in your scenario is not the problem of creating software, but the creation of incorrect software.

I mean, it is likely that when you introduce a software product into the routine of users, this procedure changes. If this did not change, your sowftare would be a failure, as it would mean that it did not affect (i.e. there is no added value). Therefore, assuming that it is changing the environment of users, we can also assume that this will change the needs of users and, consequently, their requirements and, therefore, the suitability of the software product itself.

By definition, a successful software product is doomed to an uncomfortable fit after some time. In my experience, this happens every time, and there are no technologies or methods that can get around it. :-)

+1
source share

The biggest problem you will encounter is the user DUMB / AIRHEAD / LAZY.

0
source share

All Articles