I write tests first, then code, to ensure the code does what I intend.I refactor mercilessly to ensure the code is as clean, expressive and
well designed as possible. The unit tests help me do this by keeping my
code doing what I intend for it to do. I automate my acceptance tests for the same reason I do unit tests - so
that when integrated my collection of code works as intended. I release my code frequently so that I get feedback from those giving me
my requirements; to ensure it does what they need it to do, and so the
priorities/requirements can change quickly. My automated tests allow me
to do this as smoothly as possible. I search out tools/techniques which help me find problems in my code,
and which help me write the correct code faster & better. I strive to always learn, to always improve.