I've used Home Assistant for years, prior to moving to Hubitat. I think the first version of HA I installed was around 0.17 or so, on their old naming scheme. I've written custom components for it. I wrote the Gitlab-CI integration that's still part of the official integrations. Needless to say, I know HA very well.
That said, I haven't used it in a couple years now. There's just a few things that make it, IMO, unmanageable. The biggest is the terrible decision to make everything based on entity_id, and to make that a human-used object. Hubitat uses DNI for this. That's the correct way to do it. I can rename and rename and rename things in Hubitat and everything just works so long as I don't change DNI and there's honestly no reason to really ever do that.
Example Time:
So let's say I have "switch.plug_kids_room_plug" in HA somehow. Whoops, that's a silly name, better fix it. So I rename it to "switch.plug_kids_room". There, all better.
Well, since HA doesn't have any sort of "DNI" type thing, and instead uses entity_id as both a human-friendly name AND their form of DNI, this causes the same sort of havoc you'd expect if you ran around Hubitat changing DNIs. Now your automation that had a service call of "switch.toggle" and a target of "enitity_id: switch.plug_kids_room_plug" just stops working. That template binary sensor you made for "any switches on" no longer includes this switch. Etc etc.
Yes, HA has "Friendly Name", but that's not what everything uses. Everything uses entity_id. If entity_id were buried so deep that you never ever have to mess with it, like it is with Hubitat, and everywhere in the GUI you touch anything you dealt with just "Friendly Name", then it'd be OK, until you run into the issue that there's still a LOT, even in 2023, that requires fiddling with YAML files in HA. No, YAML isn't hard, and that's not a big deal, but the YAML deals almost exclusively with entity_id. And as such, entity_id needs to be properly named. I don't want to call "switch.turn_on" to turn my basement grow lights on with an entity_id of "switch.kids_room_fairy_lights" because I moved a switch around in my house and didn't rename it.
The lack of a stable machine-only DNI of sorts on HA is probably the single biggest issue I have with it. Renaming something shouldn't be so freaking painful. I can't tell you how much I appreciate being able to freely change device name/device label in Hubitat, and so long as I don't mess with DNI, everything "just works". It's fantastic and HA really needs to figure out a way to having something similar.
There's some other big issues that drove me away from HA, but the ridiculous amount of pain a simple entity_id rename can cause is probably the biggest peeve I have with it. Sure, renaming one entity_id isn't a big deal, until you realize that a busy HA instance might have a couple thousand entity_ids. And worse, sometimes a single action can rename a hundred entity_ids. In HA if you rename a "Device", it'll ask if you want to rename all the associated entity_ids, and if you click on "Yes", then it can break all sorts of stuff:
Seriously. This is just stupid, annoying, and shouldn't even be something that causes friction, let alone pain.