Team members generally all perform around the same level, at least within a couple of standard deviations. The reason for this is simple: individual skill does not determine performance in a team as much as the rest of the environment does.
The system a software developer works in shapes their performance so much more than individual differences.
So if you're going to assign promotions and bonuses on individual results, make God damn sure these results are truly off the charts compared to their peers.
If you don't, you're basically running a lottery. Except you don't call it that, so your team will still try to actively do things to try to win this lottery. And these things will not be in line with what you want your team to be doing, because they will try those things first and see that they don't work. Because it's a lottery they have very little ability to affect, so obviously nothing will work.
What's worse, you might very well also create internal competition, where your team stops working as a team. They will realise they can't win your lottery by doing great work, so they will start to prevent their teammates from doing great work instead.
Performance reviews are so stupid.
Just talk to your people. Have a conversation about how they are doing. And then let the entire team have the bonus(es). It can be so simple.
Good use of manager time is to figure out what those people do differently and then have them teach their ways to the others. This will, in effect, "improve the whole system" as someone else put it.
Put another way: when there are individual 10x performers on the team (note that this is 10x the average, not 10x the worst), there is also massive untapped training potential, and management has already failed to make use of this. If anyone should have a bad performance review in that situation, it sure isn't the individual contributor who didn't get the tools they needed to do the job! It should be the manager who didn't give them those tools.
That said our business has a tendency to overvalue individual contributions over team contributions. My going example is that a person that spends all day getting other people unblocked on their issues might well be the greatest facilitator of productiveness in the team, but they will appear to be the person that never gets anything done.
What if the greats do that, and the others just don't care enough to learn, like this is a blue collar job with white collar pay to them?
They could be greater than they are; they think they're great already, but they're nowhere near the true greats on the team.
You can't make them care and you can't make them want to be great.
In a great workplace, people start to care. They feel pride over their workmanship and social responsibility with other employees. (In general. As always, there are outliers that need to be handled differently, but they're a small minority.)
So what you need to reward is people who improve the system!