The Art Of Problem Solving
- Posted by Mazen Ameen
- On November 7, 2023
In our daily lives, we stumble upon many obstacles whether it’s in our personal or professional life. However, the way to approach each problem can significantly affect the time taken to solve it and the efficiency of one’s solution; for example, using unneeded extra resources. In this blog, we will highlight how to approach a problem and eventually solve it with the best use of resources possible.
The first thing to do when approached by a new problem is to ensure you understand the problem premise. Do your research and ask questions like:
■ When did we first become aware of the problem or the need for a decision?
■ Have we defined the problem or objective in our own words?
■ Are there any other possible definitions of the problem worth considering?
■ Are we clear about what we are trying to do?
■ Where are we now and where do we want to get to?
■ Have we identified the important factors and salient facts?
■ Have we reduced the problem to its simplest terms without oversimplifying?
Having a misconception about the problem is common and can lead to wasting unnecessary time that you might need. Another thing to note is that you can’t always please every party involved. So sometimes you must make compromises or prioritize certain interests to reach your ideal solution. Additionally, being able to ask someone else with more experience can cut down the time needed in the analyzing or brainstorming phases.
Now that we have grasped the problem, it’s time to brainstorm solutions. We can start by thinking about a solution that will just do the job and work our way from there. This solution would most likely be the easiest, but it would consume lots of resources like time, money, workforce, etc. We can also think about similar problems that we have encountered and see how they can converge to our problem. Another approach would be to consider whether the problem can be divided into smaller sub-problems and solve each subproblem independently and then combine the solutions to solve our original problem, this approach is also known as divide and conquer.
Another way to approach problems is by using design thinking, and we usually use this method when the problem itself is different from problems that we have already tackled before. Reaching the correct solution for such problems has a high level of uncertainty as the usual approach of analyzing old data and predicting the best approach won’t be feasible in this case.
In the context of software engineering, creating software is a problem-solving process, as the main goal of it is to facilitate tasks that are either repetitive or difficult for people to complete. However, to reach this endpoint, engineers working on the software will have to follow the steps explained previously; By deeply understanding the problem at hand and trying to dissect the software into multiple pieces each serving its own purpose and combining all those fragments together.
To put it more into shape, software engineers must make sure that their product is user-friendly so the target audience would be able to navigate through it with ease. They also need to verify that the software does its intended job successfully with minimal errors. The software needs to be responsive consequently considering whether caching can be utilized, and so forth. Finally, what we just did now is separate the concerns to solve each problem independently and merge these segments to have our final output.
Now that we have discussed different approaches to problem solving and their necessity in software development, let’s have an example and see how it applies. Let’s say that there is a village that exists somewhere in Egypt. However, due to the village being relatively far from the capital and other governorates, there are almost no shopping centers inside the village and people would have to either travel to the capital to buy their requirements or call the shopping center to make their order and a pilot from the shopping center would deliver it to them. In the first scenario, villagers will waste a lot of time commuting to make their order, and in the second scenario the shipping fees are high, and some shopping centers refuse to ship due to the distance being huge.
In this case study, the naïve solution would be to build a shopping center in the village, so that making purchases would be more convenient. However, building a shopping center would take so much time and money, and if we are faced with another remote village it wouldn’t help. As we can see this solution is not feasible to implement, after brainstorming with your team you came up with a better solution which is you can collect all the villagers’ requests and have a shipment truck collect all the required goods and deliver them either to a stop in which all purchasers come to or to each purchaser’s home. Therefore, we have saved time the villagers would naturally take commuting and the shipment money would be split across villagers, so it was a win-win situation. Here emerges the need for software that can coordinate the orders of the villagers with a shipment company.
Such a huge piece of software could be divided into multiple components.
• Having a user-friendly interface that is accessible to both villagers and shipment companies, allows villagers to place orders and specify delivery preferences and facilitates the management of incoming orders and delivery tracking for shipment companies.
• Order aggregation by selecting items, specifying quantities and delivery options.
• Database management to track order history for both shipment company and villagers.
• Routing and delivery management to minimize delivery time and costs and providing real-time location sharing for order tracking.
• A payment system that allows villagers to choose a payment method whether through card or cash on delivery as well as ensures fair shipment cost distribution among villagers.
• Communication channels between villagers and the shipment company in case of any issues with orders or changes to it be addressed.
• Taking security measures to protect sensitive user data as well as user’s privacy.
• Designing the application to be scalable to upgrade the business later on and handle an incredible number of users.
• Testing and quality assurance to ensure that the software functions seamlessly and reliably.
• Maintenance and updates to keep the software running smoothly and address any evolving issues.
• Community Engagement by gathering feedback, conducting user training sessions, and establishing a support system to address any questions or concerns.
With all this being said, this division to our software is just scratching the surface as each module will have its own challenges to face and overcome. But now we have a plan that we can follow to reach our final software.
In conclusion, problem-solving is an essential skill that transcends industries, and daily life. We’ve explored various strategies and approaches, from understanding the problem deeply to seeking naive solutions and optimizing them as well as considering a design thinking approach. Challenges may vary in complexity, but the principles of critical thinking, creativity, and perseverance remain constant. Whether you’re tackling personal issues or professional dilemmas, the journey to better solutions starts with a curious mind and a willingness to embrace change. So, keep honing your problem-solving skills, and you’ll not only overcome obstacles but also uncover opportunities for growth and improvement in every aspect of your life.