From a UX perspective, it has been notoriously slow and is prone to failures. For example, if the transaction could not go through, it remains pending for 3-ish days while Google retries internally. For real-time transactions, like buying groceries from a street vendor, it isn't practical to wait so long to find out - and mostly results in people paying twice for a product.
Aside from marketing gimmicks and usage by vendors, who by the way use a single QR across 5 different UPI vendors, I'm not sure it really is a "runaway success".
Edit:
Another point to note is that GPay (and other vendors like PhonePe) went around sticking their own QR codes on every shop. This meant that if you wanted to pay by UPI at that shop, you had to install GPay.
This prompted NPCI to issue a circular and ensure QR codes were interoperable across UPI apps - but as I've seen, there still remain tons of shops which have only the GPay proprietary QR Code. Ref: https://razorpay.com/blog/npci-circular-on-upi-interoperabil...
Lethargy by vendors to move over to the new QR could also be one of the reasons why these 2 players hold the lions share in the UPI market.