While I have never been accused of being heartless by anyone, and I don't relish the opportunity to be called heartless because I've terminated someone's employment in the future, I have to learn to be more neutral in my appraisal of basically everyone and everything in order to become more capable of dealing with these situations as they arise.
In any case, all of my future interactions that end with the termination of an employee will hopefully involve the following features.
As a person who has been dismissed without even a conversation (from a food service job, nothing major) and just "left off the schedule," I know how strange it felt to be simply gone from my work. Obviously, even in the event that a person is underperforming without improvement, that person is still a human being and deserves to be treated with as much respect as the situation will allow. One of the best forms of respect that can be given in an unpleasant professional situation is an attempt to explain the complete justification for the decision and to explain what will follow and ensue. Leaving people things to wonder about, especially when they are fired, might invite legal action and is certainly likely to generally invite potentially disruptive situations later. Explaining the documented reasons why a person has been let go, in as much detail as possible without moving into "litany-of-badness" territory, is common courtesy and makes good sense.
Whatever the case, firing people is hard, especially when they might be "good folks" who just happen to not be able to do the work, if time has passed them by or they have been promoted to the wrong position, etc. While I can be somewhat sensitive to the feelings of others, I must be able to face personal criticism, anger, resistance, and many other things that most people tend to avoid in their daily lives. A willingness to face these situations head-on is simply part of being a strong person, a strong colleague, and a good boss. Firing should come out of an assessment of the data, which will underpin the situation and afford us great confidence. Being potentially hated, while not a fortunate circumstance, is nonetheless something that I must accept as the boss.
Firing people can create some severe morale problems. In some cases, the person who is let go might be just a horrible person who everybody doesn't like, who hurts morale, etc. That makes things easier. But in many cases, organizations become factionated and cliquish, and removing a member of one of the groups instead of another can create really significant problems. Firing also creates work gaps, a need to redistribute workload, and a general sense that everyone might theoretically be on the chopping block at some point. In an effort to avoid this, I think transparency beyond just the individual being fired is necessary. Discussing what has happened and what will be done in the absence of the fired employee with everyone (as long as this doesn't create confidentiality issues) is a useful way to support the remaining members of the organization and avoid creating odd forms of confusion that seem to always accompany firings.