3 Important Non-Technical Problem Solving Skills a Developer Must Have

Given that, the distinction between a software developer and a programmer is virtually non-existent, a programmer/developer has to learn a lot of aspects of the application her/his company is developing.
Apart from the technical side, when it comes to problem-solving skills, one has to pay closer attention to the human side of the errors as well.
In this article, let me list out the 3 skills that I found were very important and developed over a period of time.
Identify Human Error

More often than not, defects raised in lower (non-production) environments end up being a test data or test scenario issue.
Before pulling out all the logs and switching your IDE to the debug mode, analyze and assess the situation.
Is the scenario valid? Is the test data accurate?
Worst of all, make sure the right code is available in the environment where the defect was raised.
Skills Needed? A clear understanding of the business requirements.
Know the Components

As a Programmer, you have done coding as per the requirements, unit and integration tested it, and deployed to a test environment.
Your code is not working now, how would you solve this issue?
Have a basic understanding of the different systems and software components involved in your application.
Your code might not be working because of the following hypothetical scenarios,
- Response from the external system is not as expected.
- Response from one of the third-party APIs failed and your code was never executed.
- Asynchronous messages are getting produced but the consumer service where your code is written is not consuming messages and your code is not executed.
Fun Fact: 3rd scenario happened in real and my code was reverted by a genius for no reason. I didn't know at that point how to identify Kafka issues :D
Any of these issues and more could happen in real life and you should have a basic knowledge of the multiple parties involved in your application.
Skills needed? A wiki page to document the application architecture and basic skills to understand the components.
Isolate the Error

Isolate the issue as much as possible before using any kind of technical expertise to tackle the situation.
Start with basic questions like,
- When was the issue noticed? Since when is this happening? logs or monitoring tools can help you identify that.
- Did anything change at that point? Did a DB migration happen? Was there a code deployment? Did any software patching happen around that time? Was there scheduled maintenance around that time? Start with the most basic questions.
- If it was related to code deployment, check the commit history and validate the new changes. If it was patching verify any other service that uses the same product.
- If data retrieval is failing, validate that data was saved properly from the application and so on.
Most of the problem-isolation process is not directly related to your technical abilities to develop software or programming concepts. It is more about your basic understanding of various pieces involved in an application.
If x and y are consuming z and y is not working then validate if x is working fine, if yes, most possibly the issue is with y and if no, then check z.
I have debugged a lot of software issues in my career so far and a few of them were in systems and services that I was not directly working with. The confidence my management had in me while pulling me into any production triage call was my ability to narrow down the issue to its origin. As mentioned earlier, I would rarely attribute that ability to my technical skills it's all Analytical.
Skills needed? Logical Reasoning.
Conclusion
Hope you find this article useful. Let me know some of the non-tech skills you used at work to solve issues in your application.