Defining and solving problems is something I could do better with. Adapting to circumstance is the default. Dealing with a problem or making something work despite the problem. A workaround.
I have been learning to code without using code to do anything useful. It's been interesting but...
Coding contrived apps and completing code challenges / exercises to learn the lexis, semantics and syntax of Python is losing it's appeal. Cloning apps and such like does not inspire. Whilst there may be nothing new under the sun and greatness may come from iteration, novelty attracts me.
It's important to let go of any notion that a problem is a deficit and something to ignore or tolerate. It helps to have that out the way so we can move onto...
step 1: Problem identification
Identify and define what the problem is. Thinking of problems in terms of goals and barriers may help. There may be more than one of each. The process may reveal the goal is simply a stepping stone. Defining the problem will help understand and make it easier to describe to others.
step 2: Structuring the problem
Developing a fuller picture of the goal(s) and the barrier(s) involved. This might not be necessary for simple problems.
Before step 3 (exploring solutions) a bit of time with the first two would be in order. Seems like the next post is beginning to take shape.