One point I want to add.
In the software world, you need team players and you need stars. But I find it works best when these folks are not on the same team.
A team that’s comprosed mostly of people of roughly equal abilities (talented folks certainly, but not soloists) will work better than the same team with the addition of one or two rockstars.
So what do you do? I think the best arrangement is to take the solists, the software rockstars, and put them on small teams building libraries. The best code lives in libraries that everyone uses.