Yeah, then we came up with CIDR. Then we widely implemented NAT as a stopgap.
CIDR was a great stopgap. NAT was not.
Without CIDR the addresses would have run out faster than any solution could have been implemented. CIDR was not that big a change, so it didn't break lots of stuff. And it slowed down the consumption of addresses a lot. If a decent effort had been put into upgrading to IPv6, it could have been completed before addresses ran out, even if CIDR had been the only stopgap measure, and NAT had never been invented.
But NAT got widely deployed. Not because real scarcity of IPv4 addresses, but rather because of an artificial scarcity. ISPs were charging for IP addresses, so with NAT already available, private users used that to avoid paying extra. It did slow down IPv4 consumption so much, that ISPs decided not to work on deploying IPv6. But a major reason for the deployment not happening faster actually was that there was no competitive advantage.
The ISP which deploys IPv6 has some expenses in doing so. If they decide to save that money, they are causing a problem. But the problem they cause affects the entire industry, so it was not a competitive disadvantage. Moreover the lack of IPv6 deployment is now causing more problems for newcomers than it is for those established companies, who were responsible for the problem in the first place. And this is the real reason we have such a mess today.
Rationing of IPv4 addresses was a great idea. It just happened way too late. Rationing once you have consumed 98% of a resource is not solving the main problem. The 1024 IPv4 addresses an ISP can get if they start deploying IPv6 is not that great an incentive.
At the time CIDR was introduced a rationing policy should have been agreed upon. As soon as IPv6 implementations were reasonably mature, but not widely deployed, rationing should have been applied to keep the base of IPv4 only systems constant. At that point ISPs should only have been able to get new IPv4 addresses for use in dual-stack deployments. If they used the newly allocated IPv4 addresses for IPv4 only deployments, they should have received no more IPv4 addresses until they had converted enough IPv4 only systems to dual stack.
A proper rationing policy would have ensured by the time IPv4 addresses ran out, there would be at least as many dual stack deployments as IPv4 only deployments. That would make IPv6 only look much more viable, and it wouldn't take a lot of IPv6 only systems to make dual stack look preferable to IPv4 only, if dual stack was proven to work in practice.
It is too late to implement such a policy now. So we will have to find another way out of this mess. It was clear already a decade ago, that there simply didn't exist the right economic incentives for ISPs to deploy IPv6. And nobody in place to implement the needed policy, had the balls to do it. That IPv4 addresses ran out without IPv6 having reached a significant deployment should not have come as a surprise to anybody. That ISPs still believe IPv4 only is the best strategy even now, is however a bit surprising, and quite scary.
NAT was part of the reason it took such a long time to reach the point we are at now. And what good has it done us? It delayed the inevitable. But that extra time was not used to make us more prepared for it, as such we didn't get any benefit from NAT, which we can use to ease the deployment of IPv6. Also the delay has meant the network is now larger, which means more work and more expensive to upgrade, than it would have been, had it happened earlier. NAT also made the network more complicated, and many of the blockers in deploying IPv6 are due to problems caused by NAT. Moreover many people have gotten so used to NAT, they don't know how the Internet was supposed to work. And now they don't want IPv6 because it doesn't look like what they are used to. Lots of effort has been put into developing workarounds for the problems introduced by NAT. And none of them work great. All of that wasted effort would have been much better spent on getting IPv6 deployed in the first place.