Hi I have tried all 3. Here are my experiences
I stared with ZHA on Conbee 1. I had too many issues with that but this was early this year where ZHA was still implementing basic features and since ZHA has had tons of development. I do not have any up to date experience. It is probably really cool now.
Then I moved to Deconz with same Conbee 1. At this point I only had a few devices - mainly window/door sensors and some Philips remotes.
When Conbee 2 was released I bought it because I cannot help it. I just had to have the latest
I bought a few of these cheap CC2531 dongles and as they arrived after 8 weeks I had to try them so I installed zigbee2mqtt on a Raspberry Pi - not same machine as HA. I only paired a few remotes. It is a bit geeky to setup with no fancy graphical UIs but not at all difficult and the project is extremely well documented. It is probably also the project that supports most devices and add new faster than anyone else. But one negative is that the cheap dongle have a lousy range. I fixed that by adding an external antenna and you can buy such solutions (advertised here in the forum). You really need that for good performance.
My final move was to skip my Philips Hue and move 35 lights and 15 Philips dimmers and 3 motions sensors to my Deconz. I now have something like 40 lights/switches, 20 remotes, 5 window sensors, 1 vibration sensor, 1 smoke sensor. And it works really well.
It is a real nightmare to try and move all these from deconz to ZHA so even if I would love to give the developers feedback on it, it is just too much a risk of having a house and wife with no functional lights for days. ZHA is the only solution that supports multiple Zigbee radios. Deconz is locked to the devices from Dresden Elektronik and zigbee2mqtt works only with the CC chipsets
I am on the Deconz solution now and can recommend it. But remember to backup the config inside the Phoscon app when you add or remove lights. If anything goes wrong and the database file is lost you end up pairing lights manually for hours. Always backup the config. I once made the mistake to start the Deconz app as root. When I again ran it as normal users the database was unreadable and I lost all lights. But I had the backup and it took 10 seconds to load it and all was well again.
Same with zigbee2mqtt. Make sure you learn where the device database is located and back it up when you add/remove devices.
With ZHA same thing. Always make snapshots in HA after adding or removing devices.
All 3 solutions have the advantage over Philips Hue hub that when motions sensors and dimmers are changing state the change is pushed immediately. The Philips Hue API requires continuous polling.
With the ZHA/Deconz/Zigbee2MQTT you can really take advantage of having signals from any Zigbee sensor/remote control anything in your home with no noticeable delays. You walk into a room and a Philips Motion sensor makes your EspHome LED strip turn on instantly. Fantastic