Contract-wise, tipping is bad because it is not part of the contract. At least one side of the contract cannot tell how high the tip will be; this creates uncertainty. Often nobody knows how much money will be paid after the service is performed.
Many people think that tipping ensures quality of service. But there are examples of "bad tippers," even in this thread, who ignore their end of the unwritten tipping contract - because it is unwritten, and as such unenforceable. Is it worth it to punish good workers (servers) just because the customer is unfair? Similarly, would it be fair if the server prejudges a customer and, based on his previous experience, reduces the level of service to them, anticipating poor tipping no matter what? Why should we pay for the food and for the service separately? Why should we become judges and discipline servers - isn't it the manager's job? Tipping is even unable to ensure QoS because the money for the service is paid after the service is performed, and there is no contract to pay that money - neither for a good service nor for a bad one, and there are too many restaurants, patrons, and servers, to remember individual visits.
I don't even know if tipping has any educational effect on bad servers. If the customer is unhappy and the server is wrong, the customer has two options. First, he can reduce the tip. This hides the problem because it remains unknown to the management. A bad server will continue to work, sometimes paying a few dollars out of his own pocket for his mistakes but continuing to make them - for example, it may be easier to work this way. As result, the customers stop coming for no apparent reason. Second, in a no-tipping facility, the customer may complain to the management. This makes the problem known, and the manager can educate, reassign, or dismiss a bad worker. Feedback can be easily implemented by printing the URL of a web page on each receipt. It will be used only by those customers who truly want to make the problem known; a lazy and cheap customer, who does not tip today, won't bother with a fake bad review. There is an obvious financial advantage in not tipping, and no responsibility; but it's nothing but loss of time to file a false complaint, and you can be held responsible. Most services in the modern world work without creating a side channel of poorly accountable payments.
Read the thread and you will see that the tip crowd likes that aspect.
Mega dittoes.