Thinking Outside The Box
I love to develop. I love designing, architecting, and coding. While I'm very good at debugging, I can't claim it's a love of mine. Sure, you occasionally get that sense of accomplishment after finding a particularly challenging bug... but most often it results in a forehead-slapping moment where you realize that your mistake was something mundane and preventable.
Preventable. I've spent a good portion of my career working towards that.
So unit testing is very helpful, but even more important is the ability to answer the question: “Does it do what it is supposed to do?” This is where System Testing comes in. I write tests for any features that can be easily tested... these tests work “outside the embedded box” and are used to verify that the system behaves as specified.
Both the system tests and the unit tests are tied to a continuous integration server... a server that waits for code to be committed, grabs a copy, builds it, and then runs all the tests against it. Since this is automatic, I always know when things are working properly. More importantly, I know when I've broken something almost as soon as it happens.