In most stories, there are good guys and bad guys, and you can tell who is who. The difference might be fine–you might be choosing between two kinds of asshole*–but you can usually tell who you should be going for. Good versus evil.
But good and evil aren’t that far apart, especially when it comes to people.
I prefer to think of good and evil as a progression. A sort of line with nauseatingly good angels on one side and mindlessly boring devils on the other. Where your characters sit on this line is largely due to their actions, but, and this is important, their position is not static.
Fact: good characters do evil things. For all kinds of reasons. Maybe they think they’re doing the right thing. Maybe they think the ends justify the means. Maybe the good thing is just so hard, so they slip and take the easy way out. Real people do this all the time, so why wouldn’t characters?
Likewise, evil characters do good things. Sometimes it’s to maintain an image. Sometimes it’s to fool someone. But sometimes they do a good thing because they want to.
Characters with depth slide back and forth along the line of good and evil. They might be mostly one or the other, but they’re not all one or the other. The good prince strikes out in a moment of jealousy. The evil queen aids a quest because the adventurers remind her of her friends from childhood.
If you want your characters to have depth–to be believable, because there’s no one out there who makes the right choice every single fucking time–then slide them back and forth along that line. Make their choices count. Give them consequences. They can come back to their core alignment, but it should be a choice, not a given.
Because static characters are boring characters, and, in fiction, nothing is worse than boring characters.
*Which I’ve never felt is a great story. I love a good anti-hero, especially when they’re contrasted with other characters, but having everyone be a dyed-in-the-wool bastard out only for themselves is boring. And interestingly, I’ve never read the reverse: a story where all the sides have good points and you don’t want anyone to lose.