I don't mind slow programmers, or programmers who know when a problem is too difficult for them, or programmers who ask too many questions and need constant confirmation and hand-holding. They are a bit annoying, granted, but harmless, and can be a somewhat valuable addition to your team if you give them the right tasks. Often these guys can do grunt work at reasonable quality.<p>The worst ones are those that know just enough to be dangerous, and who <i>think</i> they know everything. Instead of asking, they make assumptions, and produce code that <i>almost</i> works. Meaning, it will pass most of the obvious test cases, but breaks as soon as it hits production.<p>Example: One guy had to add a meta tag to a web page, with the page's publish date in ISO format. Instead of using the source data, which had the date as a DateTime object, he parsed the date from the formatted page output. This worked for US pages, and European pages where the day of the month was <= 12 (because of the different order of day and month), but broke as soon as the displayed string was impossible to parse. Ugh. Any half-decent programmer would wonder, "there must a better way to do this?"