The kind of heuristic I have is if I ever think, should I fire this person even once, I should fire them immediately. When someone's a superstar, I can't imagine firing them. I think it's impossible, I'd be lost without them.
Fire fast when you know it's not working
Leadership → Team Building
Every time that you hire someone new, mark your calendars for 30 days down the road and ask yourself one question, knowing what I know today, would I hire this person? If the answer is no, fire them immediately.
If everyone knows within a month and every time that you hire someone new... If the answer is no, fire them immediately. They're already set on a trajectory of not being successful and they're creating damage to you, to the rest of the team and to themselves.
Firing people is as important as hiring people. Getting good at identifying when someone does not belong or someone is not going to work out is actually a skill.
Would you enthusiastically rehire this person for the same role?
Fundamentally, the most selfish thing you can do is withhold feedback from someone. When you think a thought that would help someone improve and you avoid giving it to them because it would make you uncomfortable. Well, you're optimizing for your own comfort, and it's fundamentally selfish.