The point of tipping is to prevent the employer from having to pay a fair wage. Someone who works in such industries depend on tips for their livelihoods. Not performing at 100% resulting in a significant drop in earnings isn't really fair.
Given the typical audience on here, a reasonable comparison would be for employers to be docking wages based on time spent not working. Given how many of us visit this site at work, that could be a substantial drop in wages.
Then again, you might be making so much money that it doesn't impact you. Servers aren't. They might just be having a bad day. Their mistakes on serving you will have less of an impact on your life than your not tipping them.
Most of them are human beings trying to survive. Most of them are not making enough to do more than that.
Always. If I have an issue with the service, I take it up with management.
I don't short change someone's wages because of a perceived or actual deficiency. What am I? Some sort of monster? Just because the rest of society is cheap and short changes service workers because they can get away with it (until labor law gets fixed), that does not make it right.
And if you say, "I can't afford to tip 20 percent all the time", well then my friend, you can't afford to be eating out. Why do you think its more costly to eat out in Europe than the US? Because staff are paid a living wage there.