I suspect that if the situation were reversed and we always had IPv6, and someone proposed a new IP suite where you had to use NAT for everything, and all hosts needed to have their addresses hand-picked (or served via a DHCP server that used an ugly hack to communicate with hosts that don't have an IP yet), you'd find that to be the "hard" one.
I can remember two numbers from 0 to 255, but four? Not in a million years.
Isn't there an idea that our working memory holds seven pieces of information? Which would be two of those numbers and change, if you consider each digit as a piece of information.
I also could have mentioned mDNS as a distinct subclass of DNS. That's most of what I use in IPv6 LAN stuff, personally, but I don't have a lot of subnets to worry about. Also I could have mentioned tricks like writing down a subnet prefix somewhere such as a .env script and using assigned addresses full of zeroes in that prefix like $PREFIX::1, $PREFIX::16, $PREFIX::cafe, or also, if you really want, and just miss dotted quads that much: $PREFIX::136.324.154.123 (that's been a supported address format for a few years now as long as it is on the right side of a :: shortcut).
The addressing is intimidating, getting your head away from NAT, thinking about being globally routable, the lack of (or variances in) DHCP, ND, "static" addressing via suffixes, etc.
None of this is technically "hard", but it's a significant barrier to entry because it's quite different to what most normal technical users are used to.
Dual stack may create some new problems, but it fixes a lot of others. All of the major cloud providers have awful IPv6 only support, and many prominent web resources that usually invisibly "just work" have little to no IPv6 support.