And the commonest way to do it is to make the characters too morally equivalent.
It's not that the villain has to be pitch black against the hero's incandescent white. It's that I have to be able to distinguish between the shades of gray. We can appreciate a trickster who runs cons against the wealthy as long as he goes up against the murderous extortioner. Two equivalently fatuous self-absorbed slobs leave you no one to cheer for, and you're going to have to give the work some powerful other attraction to keep me reading.
Two heroes of equivalent moral stature work. As long as you are willing to bite the bullet and have one of them suffer because their worthy aims are irreconcilable (being heroes they wouldn't be in conflict over less) or you have an absolute brilliant way to reconcile the issues that is both totally convincing and plausible that they didn't come up with it early. Excruciating, but it works.
The way to moral complexity (if you want it -- you don't have -- the Good Guys vs. the Bad Guys is also fun) is not to tone everything to same muddy gray. It is to mix up the characters and the sides. Give your extortioner a man in charge of security who is trying to support his family; give your trickster a sidekick with no scruples and nasty habits. It can be agonizing, wanting to see both Jack and Jill win and both Eustace and Miranda lose and knowing that either Jack and Eustace will, or Jill and Miranda will, but it works, aesthetically. Moral muddiness doesn't.