There are, to a first approximation, two things that can happen when we design a program.
We might succeed.
Or we might learn something.
I don't claim that there are no mixed results, but pretty much everything that can happen is somewhere between those two.
Either way, you have some benefit and you need to be sure that you take advantage of it.
If you succeed, the benefit is obvious. If you learn something, maybe not so obvious, unless you really make an effort to be sure exactly what it is you learned and fix it in your mind so you don't have to repeat that particular lesson again later.
To avoid wasting your time and effort with a learning experience, you have to sit down with the 'load of claptrap' as you call it, understand exactly what the problem was that you got into where you couldn't make any more progress on it, and try to figure out what features of the design led specifically to that problem. Extract your lesson. Understand what you did wrong. Then write it down. Seriously, if you're doing something insanely complicated you might learn a dozen or more lessons before you succeed (and maybe one of them will be 'keep it simple'), so you want to be able to review all of them, not just the most recent, when you sit down to design again. Each time you start over, review so you know what to NOT do. Even if you have a lot of learning experiences in your path to success, that is the way to get make progress and eventually get there.
Don't feel too bad about it; this is a basic process that everybody goes through as they learn to design software. Even pros. Your first few designs will always be you learning about software design; your next few designs are you learning about the particular problem space; and after that you are ready for the success.
Just remember that there is no such thing as wasted design effort unless you refuse to learn; if you haven't closed your mind, there are only designs you learn from and designs you succeed with.
Good luck!