Before answering what makes a person good or bad, it is first necessary to decide what you mean by that. Morality is very subjective, what is needed is an objective metric. Consider the analogy of clothes: peoples opinions may vary as to whether a particular item of clothing looks good or bad, but they could still agree that the workmanship was of a high or low quality.

So my measure of the goodness or badness of a person is the degree to which their actions diverge from their stated goals - how good or bad they are at being the person they claim to be, rather than the extent to which a subjective observer approves of the decisions that they make.

So Stalin was a bad person because he said Of all the treasures a state can possess, the human lives of its citizens are for us the most precious then went ahead and killed 20M of them. Gandhi was a good person, because he said he wanted to liberate India from the British and that's exactly what he did.

After discussion with Cletus the Foetus I think it's important to add that someone can be qualitatively good but morally bad. The moral measure depends on the observer. After all, history is full of things that were considered morally good at the time that we now consider to be morally bad. But that does not in any way diminish the effectiveness of the person who did them.