If you've never heard of unit testing or avoid it because it slows you down, you're probably a cowboy. Cowboys can prototype concepts to prove viability before you've finished describing the idea. They can hit unrealistic deadlines and still have plenty of time to gold plate. A cowboy is guaranteed to get you to market before your competition. But God help you if you put their code in the hands of end users: you'll have more bugs than a bait shop.
If your goal is 100% code coverage, you only code TDD, or you spend more time refactoring than producing customer-centric code, you might be a perfectionist. Perfectionists write pristine, maintainable, refactorable, low-defect code. Applications built by perfectionists will last the test of time. The problem is it'll take them twice as long to get to production as it should and if their project doesn't run out of money first, their competition is liable to beat them to market, invalidating all that beautiful code.
Quick quiz: how do the most successful body builders maximize muscle mass while minimizing body fat? Steroids of course. Ok, how do they do it legally? Maximizing muscle mass takes lots of lifting, lots of protein, and lots of calories. Minimizing body fat requires cardio work and dieting. But dieting and consuming calories are mutually exclusive. So the answer is that body builders alternate between periods of cutting (dieting) and bulking (eating and lifting). Neither activity alone will allow them to reach their goals.
Cowboy + Perfectionist = Cowfectionist?So what do body builders have to do with software developers? A fantastic software developer I once worked with used to say he felt software developers should be paid based on the lines of code they delete. I always enjoyed his deleting code theory (clearly he was more of a perfectionist than a cowboy), but it struck me recently that deleting (refactoring) is to writing code as cutting is to bulking. In other words if you try to do one exclusively, or (worse) both simultaneously, you're setting yourself up for failure.
SummaryWe all have tendencies toward cowboys or perfectionists, but to become the most successful software developers our goal should be to alternate between cutting and bulking, refactoring and producing. Obtaining a high muscle, low fat code base that gets to market on time with high maintainability requires neither a cowboy nor a perfectionist: it requires avoiding extremism, embracing moderation, and recognizing the strengths of those different from ourselves. If we can find that balance we can truly accomplish great things.