I have seen this come up a lot in in my lifetime, long before I got into computers and software development. Often times someone will present a problem, and other people will comment or explain the reasons for the problem instead of trying to find a solution. It reminds me of the phrase “Excuses excuses excuses”, which is one of my pet peeves when someone says that.
When I was younger the situation presented itself in a scenario like the following:
Me: I want to go over to Billy’s house.
Mother: You can’t go over to Billy’s house because it is dark and raining outside, so it isn't safe.
What my mother said is perfectly valid, either me walking or riding my bike wouldn’t be safe, thus I can’t visit my friend. But really, those are just reasons for me not to go over to friend’s house. That doesn't really help me. A solution to problem might be to get a ride from my mother over to my friend’s house.
So how does this manifest itself in software?
I was in a meeting a while ago and the conversation when like this:
John: We need to improve the performance of website Foo.
Jim: Well, the website has to authenticate with service Bar. Then we have to query service Baz. And finally we have to use algorithm X to compile the data into a presentable form for the user. And our servers are running program Y in the background while this is happening.
Then a very long discussion about those actions took place, and there was no real outcome.
I fall prey to this problem a lot. I start thinking about the problem but the only thing that comes to mind is the reasons it is happening. I noticed that more I am about avoid thinking about the reasons, and able to focus on solving the problem, I am able to come up with better and more creative ideas. One tactic I have noticed helps to accomplish this is to present the problem to someone who doesn’t know anything about the reasons for the problem. Then try to get them to give you a solution, and you never know, it might be something so obvious you never saw it yourself.