Comment by teraflop
I keep seeing people say this, but nobody ever takes the next step of proposing how this "missed opportunity" might have been fixed.
The reality is that there is no possible way IPv6 could have been designed that would both solve the IPv4 address exhaustion problem and natively interoperate with IPv4. When you send a packet to an IPv4 host, it needs to know where to send the response, and there simply aren't enough bits in the IPv4 header to fit more than 2^32 possible addresses.
You need something in the middle to translate between IPv6 and IPv4 addresses, and we already have that: it's called NAT64. It works the same way you would expect NAT to, and just like NAT on IPv4, there's no need to codify it as an explicit part of the IP protocol itself.
I think it was bad timing. We might have been able to migrate to IPv6 wholesale when the Internet was much smaller in the early 90s. One thing that comes to mind is the kumbaya moment when everyone got together to switch from BGP v3 to BGP v4 to support CIDR.