@feld @phnt @lain >both of these are 100% fine.
Only if you're not the guy who has to clean it up when it should have been in a bloody SQL DB in the first place. Technical debt should be burned with a flamethrower at all times. The endless pursuit of scale without discipline is what gets people into these messes and it will be cheaper in labor cost every time to just think it through prior.
>The only way to charge the card was to keep the CVV.
Recurring "card not present" transactions never required the CVV as far as I'm aware, and at no time was it allowed, even to solve a business problem, because it defeated the purpose of what CVV was trying to do (stop stolen cards). In almost all cases it was better to find a payment provider and iframe their shit in unless you were a bespoke payment processor, or find a tokenizer service which yes, they did exist back then.
But again, this proves my point that the "do it at all costs" mentality is a *human* flaw. We can't help ourselves, when handed a hammer, to treat everything as a nail.