One of the hardest things to do as a manager is to fire someone. It sucks. I have done it many times, and it never gets easier.
But it is one of the most important things a manager can do when someone is dragging the team down.
A sign of ineffective management is when a manager retains an underperformer, but what's even worse is when they "layer" an underperformer. This means hiring a new person in between themselves and the underperformer. All that does is saddle the new person with the weak person, setting them up for failure in their new role. It brushes the problem under the rug and makes things worse, not better.
And really, it's incredibly unfair to the underperformer, who would probably be happier and more productive in a different role or even at a different company. I am constantly on the lookout for layering, since it can easily and quietly happen – especially at a fast-growing company.