- is there a course or a guide that you on HN are familiar with that goes one step above
- how to break a problem into constituents
- how to model or architecture a solution before writing code for it
- how to decide which approach would be reasonable if there are multiple ways to model the aforesaid problem
Books that come into my mind that might be useful to you:
A Philosophy of Software Design — John Ousterhout
Designing Data-Intensive Applications — Martin Kleppmann
Domain-Driven Design — Eric Evans
There might be some courses as well, but I never looked into them.
This also works quite well:
Write down the problem. Think real hard. Write down the solution. (Thank you, Feynman).