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.