As for the rest of your post, try not to get lost in the details. Questions like "What kind of code is it? Who can design/build the better UI? Can't good developers introduce bugs too?" are valid in general but sort of miss the point of the post, which is that in general, people who are "bad" at programming but "good" at communicating and staying organized tend to be favored by management instead of the good programmers/bad communicators.
Of course there are exceptions (based on the specific skills each job requires and what different companies value in employees), but that's true of all writing that speaks in general terms.
I see what you mean. I just don't think great programming skills are needed to do most of what accounts for programming work these days. Load a couple of objects from the database, change something, put it back and display some HTML, as long as you don't totally mess it up it's OK. The lesser skilled in programming often have some other thing they are great at to validate their place on the team, like understanding what the business side wants, styling, UI or organizing the team.
I think the best solution for working with less skilled programmers is to have a framework in place that lets them be productive without having the chance to mess up too hard, lots of enterprise java frameworks are built on this premise "Write your code >>here<< - and you may only call on >>these<< apis" - enforced in strict rules. Truly skilled programmers are a limited resource, especially when you need a couple of hundred ones for a boring project.
So what if their code is a little bit longer and buggier as long as it works, as a lead developer once told me "if their code breaks, they'll just have to stay a little bit longer that day and fix it".
I'd rather have a medium skilled programmer which is a team player than a really skilled programmer who is a loner. OTOH I have fired bad programmers, like one guy I had to explain what a for loop is to and who delivered something completely unusable.
Off on a tangent:
I'm just generally bored with the Software Craftsmanship pipe dream. It too easily becomes an ivory tower - creating software for it's own sake. Real requirements are messy and real programs run in a messy environment, and I'm not sure that "Doing things properly the first time" is the right approach. I think it's more important to iterate and be prepared to throw stuff away, instead of being more rigorous and shooting up design patterns. I do understand the need for pride especially if there's pointy haired bosses around, but I think that some of the reactions to that kind of environment are too extreme. It's about shipping software that works, and if it does work in 90% of the cases to 30% of the cost of having a 100% solution, then maybe that's a good business decision, especially if it fails gracefully with a good error message "I'm sorry can't do that Dave". It just might be that a couple of months later business has changed so things needs to be scrapped and rewritten anyway. Of course it depends on who is funding the bill, but I rarely see people willing to pay for military-grade software consultancy.
See http://news.ycombinator.com/item?id=4503317
As for the rest of your post, try not to get lost in the details. Questions like "What kind of code is it? Who can design/build the better UI? Can't good developers introduce bugs too?" are valid in general but sort of miss the point of the post, which is that in general, people who are "bad" at programming but "good" at communicating and staying organized tend to be favored by management instead of the good programmers/bad communicators.
Of course there are exceptions (based on the specific skills each job requires and what different companies value in employees), but that's true of all writing that speaks in general terms.