This paper will clarify a scientific strategy to dilemma solving. Despite the fact that it is written to address Info Technologies associated challenges, the ideas may well also be applicable in other disciplines. The techniques, ideas, and tactics described right here is absolutely nothing new, but it is shocking how numerous “dilemma solvers” fail to use them. In amongst I will include things like some actual-life examples.

Why do dilemma solvers guess in stead of following a scientific strategy to dilemma solving? Perhaps simply because it feels faster? Perhaps a lack of knowledge in effective dilemma solving? Or perhaps simply because it feels like really hard function to do it scientifically? Perhaps even though you maintain on guessing and not definitely solving, you create far more earnings and add some job safety? Or perhaps simply because you violate the initially principle of dilemma solving: realize the dilemma.

Principle #1. Recognize the *actual* dilemma.

Is not it clear that ahead of you can resolve, you require to realize the dilemma? Perhaps. But, most of the time the solver will get started solving without having figuring out the actual dilemma. What the client or user describe as “The Difficulty” is typically only the symptom! “My laptop or computer does not want to switch on” is the symptom. The actual dilemma could be that the complete creating is without having energy. “Each time I attempt to add a new item, I get an error message” is the symptom. Right here the actual dilemma could be “Only the final two goods I attempted to add gave a 'Product currently exists' error”. An additional classic instance: “Nothing at all is functioning”…

You get started your investigation by defining the “actual dilemma”. This will entail asking queries (and often confirm them), and undertaking some standard testing. Ask the user queries like “when was the final time it worked effectively?”, “How lengthy have you been applying the program?”, “Does it function on an additional Computer or an additional user?”, “What is the precise error message?” and so forth. Ask for a screen-print of the error if feasible. Your standard testing will be to assure the finish-to-finish gear is up and operating. Verify the user's Computer, the network, the Net Server, Firewalls, the File Server, the Database back-finish, and so forth. Finest-case you will pint-point the dilemma currently. Worst-case you can eradicate a lot of places for the trigger of the dilemma.

A actual life instance. The symptom according to the user: “The program hangs up at random occasions when I location orders”. The atmosphere: The user enters the order detail on a type in a mainframe application. When all the detail is completed, the user will tab off the type. The mainframe then sends this detail through communication application to an Oracle Client/Server program at the plant. The Oracle program will do capacity organizing and either returns an error or an anticipated order date back to the mainframe program. This dilemma is pretty significant, simply because you can loose customers if they attempt to location orders and the program does not accept them! To try to resolve this dilemma, persons began by investigating: 1) The load and capacity of the mainframe hardware two) Monitoring the network load amongst the mainframe and the Oracle program three) Hiring consultants to debug the communication application four) Debugging the Oracle capacity organizing program Following spending a couple of months they could not resolve the dilemma.

The “Scientific Difficulty Solver” was known as in. It took much less than a day and the dilemma was solved! How? The solver spends the day at the user to see what the “actual dilemma” was. It was discovered that the dilemma only happens with export orders. By investigating the capture screen and user actions, it was discovered that with export orders the final field on the type is constantly left blank and the user did not tab off this field. The program was not hanging, it waited for the user to press “tab” an additional time. Difficulty solved. It can be noted that the “Scientific Difficulty Solver” had extremely restricted understanding of the mainframe, of the order capturing program, of the communication application, and of the Oracle capacity organizing program. And this brings us at Principle#two.

Principle #2. Do not be afraid to get started the solving method, even if you do not realize the program.

How numerous occasions have you heard “I can't touch that code, simply because it was created by an individual else!”, or “I can't assistance simply because I am a HR Consultant and that is a Finance dilemma”? If you washing machine does not want to switch on, you do not require to be an Electrical Engineer, Washing Machine Repair Specialist, Technician, or what ever specialist to do some standard fault getting. Make certain the plug is functioning. Verify the trip-switch, and so forth. “I have under no circumstances noticed this error ahead of” should really not quit you from attempting to resolve. With the error message and an Web Search engine, you can get lots of beginning points.

In every single complicated program there are a couple of standard functioning principles. Technique A that reads information from Technique B can be horribly complicated (perhaps a Laboratory Spectrometer that reads information from a Programmable Logic Laptop through an RS-232 port). But, some fundamentals to test for: Does each systems have energy? Is there an error message in the occasion log on a single of these systems? Can you “ping” or trace a network packet from the a single program to the other? Attempt a distinctive communication cable. Search the web for the error message.

When you have established what the dilemma is, you require to get started solving it. From time to time the initial investigation will point you straight to the resolution (switch the energy on replace the faulty cable, and so forth). But, often the actual dilemma is complicated in itself, so the subsequent principle is to resolve it very simple.

Principle #3. Conquer it very simple.

Let's get started this section with a actual-life instance. Below particular circumstances, a stored process will hang. The stored process typically requires about an hour to run (when it is not hanging). So, the developer attempted to debug. Make some adjustments and then wait an additional hour or so to see if the dilemma is solved. Following some days the developer gave up and the “Difficulty Solver” took more than. The “Difficulty Solver” had to his disposal the understanding beneath witch circumstances the stored process would hang. So, it was a very simple exercising to make a copy of the process, and then with this copy to strip all unnecessary code. All parameters have been changed with really hard-coded values. Bits of code have been executed at a time and the outcome-sets have been then once again really hard-coded into the copy of the process. Inside three hours the dilemma was solved. An infinite-loop was found.

What the “Difficulty Solver” did, was to replicate the dilemma and at the exact same time attempted to isolate the code that brought on the dilemma. In undertaking so, the complicated (and time consuming) stored process became some thing rapid and very simple.

If the dilemma is inside an application, produce a new application and attempt to simulate the dilemma inside the new application as very simple as feasible. If the dilemma happens when a particular approach for a particular handle gets known as, then attempt to only include things like this handle in the empty application and contact that approach with really hard-coded values. If the dilemma is with embedded SQL inside a C# application, then attempt to simulate the SQL inside of a Database Query tool (like SQL*Plus for Oracle, Query Analyzer for SQL Server, or use the code in MS Excel through ODBC to the database).

The moment you can replicate the dilemma in a very simple way, you are far more than 80% on your way to resolve it.

If you do not know exactly where in the plan the dilemma is, then use DEBUG.

Principle #4. Debug.

Most application improvement tools come common with a debugger. Climate it is Macromedia Flash, Microsoft Dot Net, Delphi, or what ever improvement atmosphere there will be some sort of debugger. If the tool does not come common with a debugger, then you can simulate a single.

The initially point you want to do with the debugger is to identify exactly where the dilemma is. You do this by adding breakpoints at important places. Then you run the plan in debug mode and you will know amongst which breakpoints the dilemma occurred. Drill down and you will obtain the spot. Now that you know exactly where the dilemma is, you can “conquer it very simple”

An additional good function of most debuggers involves the facility to watch variables, values, parameters, and so forth. as you step by means of the plan. With these values recognized at particular actions, you can really hard-code them into your “simplified version” of the plan

If a improvement tool does not assistance debugging, then you can simulate it. Place in actions in the plan that outputs variable values and “hello I am right here” messages either to the screen, to a log file, or to a database table. Recall to take them out when the dilemma is resolved… you do not want your file program to be cluttered or filled up with log files!

Principle #5. There is a wealth of details on the database back-finish that will assistance to resolve a dilemma.

The “Difficulty Solver” was known as to assistance resolve a extremely difficult dilemma. A project was migrating program from a mainframe to client-server technologies. All went effectively throughout testing, but when the systems went reside, all of a sudden there have been pretty a couple of, and pretty random “Basic Protection Faults”. (The GPF-error was the common error trap in Windows 95 and 98). It was attempted to simplify the code, debugging was attempted, but it was not possible to replicate. In the LAB atmosphere, the dilemma would not take place! Debugging trace messages to log files indicated that the dilemma occurred extremely randomly. Some customers seasoned it far more than other individuals, but ultimately all customers will get them! Intriguing dilemma.

The “Difficulty Solver” solved this just after he began to analyze the database back-finish. Not certain if it was by possibility or simply because he systematically moved in the correct path simply because of a scientific strategy. By means of tracing what is taking place on the back-finish level, it was discovered that all these applications have been developing far more-and-far more connections to the database. Each time a user begins a new transaction an additional connection was established to the database. The sum-total of the connections have been only released when the application was closed. As the user navigated to new windows inside the exact same application, far more and far more connections are opened, and just after a precise quantity of connections, the application will have adequate and then crash. This was a programming fault in a template that was utilised by all the developers. The resolution was to initially test if a cursor to the database is currently open, ahead of opening it once again.

How do you trace on the back-finish database what is taking place? The most important database providers have GUI tools that assistance you to trace or analyze what queries are fired against the database. It will also show you when persons connect, disconnect, or have been unable to connect simply because of safety violations. Most databases also include things like some program dictionary tables that can be queried to get this details. These traces can often inform 'n complete story of why some thing is failing. The query code you retrieve from the trace can be assistance to “simplify the search”. You can see from the trace if the plan tends to make effective get in touch with with the database. You can see how lengthy it requires for a query to execute.

To add to Principle#two (do not be afraid to get started…) you can analyze this trace details, even although you may well not know something about the detail of the application.

Recall although that these back-finish traces can place a strain on the back-finish sources. Do not leave them operating for unnecessary lengthy.

Principle #6. Use fresh eyes.

This is the final principle. Do not invest also significantly time on the dilemma ahead of you ask for help. The help does not have to be from an individual far more senior than you. The principle is that you require a pair of fresh eyes for a fresh point of view and often a bit of fresh air by taking a break. The other individual will appear and then ask a query or two. From time to time it is some thing extremely clear that was missed. From time to time just by answering the query it tends to make you consider in a new directions. Also, if you invest hours seeking at the exact same piece of code, it is extremely effortless to get started seeking more than a silly error. A lot of finance balancing challenges get solved more than a beer. It could be a alter of scenery, and/or the relaxed atmosphere that will pop out the resolution. Perhaps it is the fresh oxygen that went to the brain even though walking to the pub. Perhaps it is simply because the dilemma got discussed with an individual else.


Following reading this paper, the author hope that you will attempt these the subsequent time you encounter a dilemma to resolve. Hopefully by applying these six principles you will understand the benefits they bring, rather than to “guess” your way to a resolution.