What is a problem?
According to dictionaries, there are two main meanings:
- Something difficult you have to deal with (Merriam Webster dict.);
- Something that behaves differently than you expected (Business dict.).
Also business can describe a problem like "the idea that client brings to you".
What exactly does the "problem-solving" term mean?
This term is very widely used in each aspect of our life. The common meaning is providing any solution for the problem. But in business we cannot use any solution, it is risky for the projects. We need the best possible solution in order to avoid having the same problem in the future.
By the way, according to a new report "The Future of Jobs" released by the Davos World Economic Forum, the problem solving was ranked the most important skill in the professional skill sets of the future. So, answering the question of how to become a better problem solver may not only help to solve problems at work. It is also very important from the career advancement point of view.
- Problems with working environment.
- Problems with a task on tracker.
- Problem "Something does not work. Do not know what exactly!"
- Problem "What if I do it this way..."
- Problem of staying focused at work.
- Problem "Brain does not work well" :)
There are many different challenges we can face with and the following tips will show you how to solve work problems.
Steps to solve a problem
1. Recognize and identify the problem.
Problem can be explicit or implicit:
- Explicit problem is a problem that has already been identified by someone. For example, it can be a tracker issue and you just have to check and resolve it.
- Implicit problem is more complex. Unless you are aware of the problem, you can live with it forever, because it is a problem for others but not for you.
To define this kind of problems, people use experience, their own or someone else's. Possibly, the solution of your problem already exists and explained in such things as best practices and design patterns.
How best to identify a problem:
- Follow the best practices.
- Know the design patterns and methodology.
- Ask questions. It definitely works.
- Improve yourself every day.
You have to collect all information about the problem. Look into log files, where each utility writes messages, ask coworkers or search the Internet about similar problems.
For example, if I run into a problem with installing some ruby gem in a project, the first thing I do is to try to find the reason of error in my terminal log. Then I copy the main part of error message into a search engine. This is the quickest solution because in most cases I can find an answer in the first bunch of results.
It refers to the problem "Something does not work. Do not know what exactly!". Unless you know, a computer knows. In any case, unless you can find an answer in the Internet, it is better to seek advice from a colleague with some useful information from log than with just "I don't know, my computer is stupid".
If you have some problem in the project source code, you can use log file or debugger. Then you may probably recall what you or your team did with the problem field last time. You can use communication, version control systems, like git or svn and tests. You always write tests, don't you? This method looks like method used in medicine. At first, a doctor talks to a patient, performs diagnostic tests and only then makes a decision. So, if you have failed tests, you should fix them. It may not relate to your current problem but it always denotes some other problems which you should definitely check.
If you have a more complex problem, after gathering information, it makes sense to get it brainstormed. You can use a paper, mind maps or just sit and think - it depends on the problem.
You can use the Rubber duck debugging method or advice from an experienced colleague. It happened to me that, I was describing a problem to my coworker but suddenly stopped in mid-sentence, said: "Never mind, thanks, I got it" and went to write code before my mate came up with any ideas of how to help me. So, the method of rubber duck works. Try it out.
4. Relaxation and time breaks.
You should turn your attention from the problem, halt, relax, and let your brain have a rest. There is a wonderful practice with time breaks in the work process called pomodoro technique.
This technique will help you to focus on your task for 25 min and then have a short break. Regardless of your work style, you must not think about problem during the break. After a while, when you get back to work, you can discover a new vision of the problem. You will probably exclaim: "Oh, man! It is so easy. Here is a solution, how could I overlook it?" or something something like this. I know that feeling, believe me.
5. Avoid the same problems in the future:
- Write tests. After finding a solution, you absolutely have to cover all it with test units in order to check yourself and avoid similar problems later on.
- Understand solution. If someone helped you with a problem, you still have to fully understand it. Only this way you will earn experience for handling related problems in the future.
- Automate the solution if it's possible. If you have resolved the problem for one situation, try to project what you should do if the same problem occurs again tomorrow.
- Know your environment. To avoid problems, you must know your daily environment: OS, editor, terminal, programing language and project. If you know this well, nothing will disturb you. You do not have to fight with your editor or terminal and you do your job in the best way.
To be an expert developer, you have to improve yourself every day. Problem solving is only one of important and necessary skills. You may start from small problems, then proceed to more complex ones and gradually you can train yourself to deal even with long-term strategic issues.
Keep in mind, problem solving is not a problem, it is just a skill that pays you generously. Practice more and you will work more efficiently. Hopefully, our suggestions on how to become an expert problem solver may give you some useful hints.