You wish you had always known "how to design a solution on my own time before I code a solution on company time"?
The more general principle is that you should design before you code... or rather: experiment, research, understand, test, analyse THEN design THEN code, then RE-write that code. It's the oppose to the write-once philosophy, if the task deserves it, then you should try to fully understand the problem before designing and coding for it.
But often with less engineering orientated programming you don't get time explicitly allocated for doing those things... so when you want to do a good job and are asked to write a moderately complex piece of software, you know that to save time overall and create a body of code that isn't going to cause you a headache to maintain later; you will have to invest some of your own time to think about it.
And the more cynical people here will say, "hey you don't get paid for that, programmers work too long hours blah blah blah" but you know what... it's worth it, because you become a better programmer, you learn more interesting things, you become better at thinking about problems and engineering solutions... if you aren't interested in those things then why are you coding at all, there are easier ways to make a living.