Impossible is not a fact, its an opinion
Building a software requires defining the problem statement clearly. How do we diagnose? Diagnostics is easier done than defining. The magic and tricks of this task can be known only if we examine it in slow motion and for which we need tools like introspection, reflection and interviewing.
As far as I know, there is no hard and fast diagnostic methodology (atleast it is not taught in the books), there are however lots of forms and protocols to guide us here and there (Think of these as few concrete roads to navigate within a jungle). At first i will like to do a literature review on how diagnosis is made: