What Makes a Good Software Developer?

TSS.NET posed this question in one of their newsgroups on March 1.  Here are the comments I added to the thread:

They only write what they need to. They tend to choose open source libraries and components for needed functionality instead of writing things themselves. They definitely don’t replicate functionality already provided by whatever platform they’re coding against (whether it’s .NET or Java).
A companion characteristic is that they’re good integrators. Because they use third-party components to develop solutions, they’re skilled at making them play well with each other.
They’re good at refactoring. The first version of any application is always the worst one. A good software developer refines and otherwise improves their code as they go along.
The companion characteristic to refactoring is unit testing. No developer can consider themselves good unless this practice is part of their everyday work. A robust set of unit tests is the first line of defense when it comes to high-quality code.

This was what I came up with off the top of my head.  I’d be curious to hear opinions from others (yes, all three of my loyal readers) on what makes a good software developer.