Here it is:
Don't critique your code.
If you never ever have a critique view of your code, you are on your way to write software that sucks.
People who pair program may chuckle: they already have a continuous critique process that helps producing high quality code. People who practice code reviews may chuckle too: they already have a process (and, often, tools) for ensuring code is properly discussed.
So what is left for those who do not pair program or practice code review? The same applies: whenever you come back to your own code, critique it. Oftentimes, while adding a new feature, you will realize that a particular design is convoluted, a class is ill named or a method is hard to read.
Do not fall into complacency with your own code: love it, hate it, critique it, refactor it!