I've rarely encountered a project or program that went in
so linear and sensible (in a simple sort of way) fashion.
It is more a basketful of intertwined loops with knowledge
revealed along the way. As for being bad at it, well, there's
always somebody better at whatever it is. But they're not
on the job, you are, and it is what you make of it with
determination and desire to learn & improve.
I would say that the first step above is the one which deserve more attention; The more time you devote to determine the appropriate design, the greater the chance of not finding problems in the following steps. This is best achieved by professional experience or technical knowledge of that which you are working.