Both are needed in a healthy team. Unless you're building trivial things then just being smart and communicative doesn't cut it. I would say you need a mix of 50% really smart people, that get along with others, and have the specific knowledge required, and 50% smart people that get along with others, and have some basic skill. That mix +/- is a good team. A team of smart people that have good people skills (EDIT: but lack specific/domain knowledge/experience) will consistently produce terrible software.