I agree in many situations it is like that. But I think what I had in mind are the situations where somebody with a proper computer science degree should seriously be able to sit down and think about the problem upfront and decide what is needed.
E.g. when dealing with data storage, you should ask questions such as: How much data are we dealing with in a typical scenario?
Do we need multi-user access?
What are the ballpark peformance requirements?
If sitting down like that and writing down those kinds of questions take you 30 minutes and you realize that you are dealig with 1 KB of data for a single user and there is never any concurrency. Then a software developer worth his salt should be able to conclude that a plain text file is perfectly adquequate to solve the problem.
The conclusion should not be: Let us use a complex object graph library with transactions, locks, multi-threaded, etc etc to deal with multiple users, performance and so on.
All too often it looks to me as if no thinking when into picking a solution. The think is more like... I usually use databases for storage so will do it this time as well.
So you got people normally working on server side software with lots of users who need to deal with concurrency and large amounts of data. And then completely withot thinking they start adopting the solutions you need for that kind of software for dinky little single user mobile software, with minimal storage needs.
That kind of complete abdication of thiking and reflection can drive me nuts. Especially because I would inherit this mess, and have no clue why an elaborate complex storage solution was used. Only through a lot of analysis you later realize that it only happened because the previous guy didn't think.
But that get us to my second ting to rant about: That people never document their technical choices. If people wrote down WHY they picked a particular data base or framework, then the guy comming afterwards to maintain their mess has a sliver of hope to actually make sense of the mess they made.
I keep getting told that I should assume that people who built a system had good reasons for why they did something. Yet in my experience I seem to always assume there is a reason behind the madness only to later realize it was just pure lack of reflection about the problem being solved.
Ok, I know I sound like really mad and bitter, but I promise you I am actually a pretty chill person. Ranting is just kind of the joys of life ;-)