The biggest problem I have with tipping is that it unfairly transfers blame to the customer.
If a server can't make enough money at their job, it's not the customer that put them there. It's their employer for not paying a fair wage or offering reasonable hours, or paying for overtime. It's also their government's fault for not enforcing a higher minimum wage. Servers shouldn't be pissed off at customer's for not tipping well. They should be pissed off at their employers/government for putting them in this ridiculous payment structure in the first place.
Instead, we have servers/drivers spitting in people's food, and customers unfairly judging poor service when sometimes it's out of the server's control.
Or maybe the server should try a different field? To me it sounds like you're talking serving jobs, not careers. This applies to people that work at Waffle House, Applebees and the like. Some of these people work pretty hard, sure, but can you really blame the employer for not paying enough for a job that a high school drop out could easily take if that server quit? I'm just saying that a lot of the people that have these jobs are often not the most motivated/experienced people, so giving them hourly pay could be a horrible idea for employers. Whereas incentive on a table by table basis is an easy way to visualize cash flow and go for it in the moment.
And I would think servers don't spit in customer's food to get back at employers, they do it to piss off an asshole customer, which they will also do regardless of tip (because a tip takes place afterwards). In fact, people that don't get tips may be more inclined to do so since there is no change in outcome either way.
Business jobs out there, for example, get paid on commission; base play + commission can be the best in some situations because you're guaranteed money but you don't get as high a percentage of sales. I see serving as a low grade version of this; if you really try hard at a decent restaurant, people will tip you well. All the prejudice and douchebag-ness in general can be overcome if you're positive, pay attention to what people want, do things speedily, etc.
There are always outliers, but a reasonable customer can usually gauge how much effort a server is putting in. If they look like they're running around and they still don't have time to fill up a customer's water, then it's the employers fault for not putting enough servers on the clock. If I see a server sitting there talking to their server friends and I'm sitting there trying to track them down (especially to the point where I almost get up to go ask them for something), that person should not be paid (or at least be paid less), because they aren't doing their job.