I start to develop this feeling of that a good program or product almost has its own life. It has a natural tendency of forming a certain shape and going to a certain place.
If the feeling is against conventional practices, just follow the feeling, follow the spirit of the code, instead of forcing with mortal mind.
This way, I have much fewer doubts when designing software.