Troubleshooting and Debugging
For any technologist these are key skills. These are essential skills for all phases of the software development lifecycle and all members of a project need them to some degrees. Even a non-technologist needs these skills for getting through life whether or not they are aware of it. Essentially these two terms are are synonymous with the term “problem solving”. We all learn to solve problems from an early age. The problems of our childhood are more basic and fundamental such as how get something good to eat or find something fun to do but the skills learned then are very much the same only more sophisticated and the problems more difficult and as we grow into adults. Some of the problems we face share commonalities and are pervasive across domains of expertise and some are isolated to specialized cases in a specific career. However specific the problems we face as adults we must be able to learn to solve problems for others and deliver a satisfactory solution. For technologists this involves solving problems with devices and software in a way that satisfies our boss, our customers and clients. All over the web you can find references and resources to troubleshooting and debugging. The list is pretty much endless. Much of this is specific information to the tools and software being used. Some of it is also general advice and general guidelines which is helpful for those perplexed and feeling overwhelmed. Of course some the best problem solving advice is given out in the community forums, chat rooms and blogs of the specific software or device platform that is giving the trouble. Depending on the size of the user base the knowledge of a given piece of software and its set of commonly reoccuring flaws and failures can be very useful and those who are experts are very much appreciated. A very important thing to keep in mind that is sometimes overlooked or forgotten as we discuss troubleshooting and problem solving abstractly is that not all expertise and troubleshooting ability is equally valuable. The reality is that market forces and economics are at work and the law of supply and demand is in operation. It is in what exactly we are able to troubleshoot and debug very well and deliver in the form that is needed to the stakeholders, customers, and those typically most interested the actual users of that device or piece of software that determines our compensation. This is a fairly basic concept: we are compensated most exceptionally well if we have skills and problems solving abilities that are in high demand. In the technology world this means the platforms, devices, and software we are experts in represent competitive advantage for our employers, customers, or clients. We must be able to distinguish ourselves as being able to provide something that is relatively unique and difficult for others to duplicate. For a technologist this means developing to a high degree the problem solving, debugging, and troubleshooting skills in his area of chosen expertise. Problem solving, debugging, and troubleshooting are learned skills that get better with experience and practice. For developing the fundamentals there are many templates to work from. The scientific method is a great place to start among many other. Generally what I’ve found to work well are the following steps:
1. Identify and Define the Problem
2. Capture and document all the errors and symptoms of the problem
3. Isolate the root cause
4. Get help from experts when needed
5. Come up with possible fixes and workarounds
6. Apply a fix and resolve the issue
7. Deliver the fix to the user base
8. Communicate the results to all stakeholders.
Some examples are definitely in order. This post is definitely going to end up being a series as there is a lot of very valuable material that can be useful for improving troubleshooting and debugging skills. Much of the best advice can be found in specific problems encountered in real world problems.