IMO, there are three keys to writing good characters. 1) They have to be multi dimensional. Almost nobody is always good, or always bad, or always stupid, or always honest, or always noble, etc., etc. People are shades of every character trait. 2) Motivations. Make me understand why a character does what they do, and why they think what they think. It's not enough to just tell me that they did these things, and they thought this, or they said that. Take the time to develop their backstory and their insecurities, and their vulnerabilities, and their motivations. Then, things people do or say will innately make sense. 3) Give me a reason to care. Whether I like a character, or hate a character, I need to have a reason to care about what happens to them. Like Craig said, maybe there is something that happened to them, or a character trait that I can relate to.