This has been a fantastic thread to follow… Tossing my hat into the ring, I believe all three of them have strengths and weaknesses, and a good, stable HA system should make use of them.
Operating in the 900MHZ band, Z-Wave is great for longer distances with fewer repeating devices. It is ideal for switches and dimmers, along with outdoor sensors and other devices that are far from the core coverage of the mesh. It’s not so good for chatty devices, especially those which report power usage. This can raise havoc on a mesh. Since migrating all powered devices to Z-Wave Plus, everything has been stable and reliable. (I have 72 devices using Z-Wave JS)
Zigbee is excellent for large networks, especially those with lots of sensors (motion, contact, etc). It also handles chatty energy reporting devices very well too. With a good coordinator and the right configuration, Zigbee scales well in to the hundreds of devices, even in HA. (I currently have 214 using ZHA)
WiFi is good for powered devices, such as plugs that report energy, and specialty stuff like ESP32, equipment integrations, cloud stuff, etc. In my experience, it’s terrible for use with battery powered devices, motion sensors, etc. I just use it to connect various systems like UPS’s along with a handful of Kasa devices I got very cheaply.
In my experience, multi-mesh deployments, especially large ones tend to offer better performance. A common design pattern I use is to use a device on one mesh to trigger a device on another. For example, a Zigbee motion sensor to trigger a Z-Wave light switch. This gives a near-simultaneous response of the switch before LED is still lit on motion sensor even goes out.
It’s also a great boost to WAF. Something that was sorely lacking before I migrated from Hubitat a year ago.