Why do web apps and retailers do this to their paying customers?

Because it was a pain to manage millions of coupon codes on legacy catalog fulfillment systems. In fact, it's still not particularly easy.

Way back in the day, mail order retailers would send out millions of catalogs to current and prospective customers. To get these people to order, they would include coupons as an incentive. The coupons generally involved a short code indicating the mailing and a number indicating a segment. So, you'd get something like SU95615, which would translate to Spring 1995 segment 615. Segment 615 could be part of your own list or it might be part of a list you were renting. When the orders came in the codes would be used to tie back the promotional mailing spend to the revenue, thus allowing the retailer to score a list or segment.

So why not use individual codes and then roll up? More sophisticated companies did that. In fact, some would even have SKUs that had prefixes tied to the mailing allowing for some very deep analysis. However, most did not and it was primarily due to the fact that their systems were not designed to handle such customization. In fact, some would basically choke on that much data.

When these companies moved online, they took the practice of using coupon codes right along with them. As new companies without the legacy issues came along, they adopted the old ways and the cycle continued.

This is why these companies do this to their customers. Is it right? Of course not, but that's the way it is.

That said, there are better ways to handle this need to promote and track marketing dollars. Lots and lots of ways.

Here are a few I've tried. Each one works pretty well:

1. Using specific links in email promotions with codes already embedded: This is probably the best way to go. Customer get the code applied. No need to show the field at all. This is great for targeted promotions.

2. Using business logic to apply a discount automatically: In this scenario, there is no codebox either. The system figures out the right discount based on the promotion. This is good if you're giving account-based promotions or doing something site wide.

3. Single-use, unique codes: This is a special code that can only be used once (ideally by a specific person). This method has the added benefit of being a marketing tool in and of itself (i.e. you can tell the customer they are special because the code is made special just for them). Great for email and print catalogs.

In each case, there was a measured conversion improvement. In some cases, it was quite significant. However, I would strongly recommend testing. You're at the bottom of the conversion funnel here; caution is advised.

You may discover, as JC Penney did, that your customer base has certain expectations and that changing those learned behaviors is more difficult than you might expect. You may find that removing the coupon field generates more customer service requests (i.e. "Where do I put in my coupon?") You may also discover that your marketing department has no clue about how to tie your ingenious solution back into their demand generation. You may also discover that your systems are not well-suited to carrying so much additional data.

It's complicated but from my experience I'd have to say it's worth the effort to solve. Not only will your customers have a better experience, but you'll have better data about those customers and the sources you're tapping to bring new ones in the door.

Of course, be prepared for lots of complaints from the coupon stackers. Those guys really don't like it when you remove the field.