As a developer, I will say Apple Watch development is needlessly painful.
You have to use the dumb storyboard layout system instead of programmatic layout.
You cannot use custom views that draw themselves (like drawRect in UIView, or its CALayer equivalent).
Touch and gesture handling are limited at best. Even a simple button tap feels laggy, and you can't customize the button to respond any quicker using tricks and hacks like hitTest and passing gestures.
Development on an actual device is so slow because building with even simple changes and updating the app over Bluetooth/wireless is painfully laggy compared to developing on an iPhone over USB.
Too many guardrails limiting things like live update, fetching data from a server, or refreshing a complication. The OS limits how many times we can refresh, and we get more only if we're on the user's watch face, but we have to limit ourselves in code to make sure we don't exhaust these background operations. Without the freedom that 1st party apps enjoy, it's hard to create apps that can compete on functionality.
Lots of frameworks in iOS have no WatchKit equivalent, so SDK experience doesn't transfer. Many objects and classes in WatchKit feel intentionally limiting and dumbed down, from views to images.
We have to artificially animate images frame by frame, and transmitting between phone and watch requires boxing objects in dictionaries.
When building a watch app, you have to create an Xcode project for iPhone with a Watch extension, introducing two extraneous targets. It's confusing and adds needless complexity.
Stuff doesn't just work out of the box. Multi-frame images don't animate automatically. Loading data from a container doesn't just work like combing the file system on macOS or iOS, and you can't share assets easily.
Debugging is a pain, sometimes stepping over a line of code crashes the debugger or beachballs for seconds at a time.
watchOS SDK deprecates too quickly. From one version to the next, entire delegate callback signatures change for key things like refreshing a complication, or queuing a background task... etc. changed when Home screen widgets were introduced. It's exhausting keeping up with these function deprecations just to keep a simple app functional from year to year. Callback hell, except it's because the callback we painstakingly wrote and debugged last year now has to be rewritten with new objects for the latest watchOS, just to keep working somewhat similarly.
Haptics are limiting. There aren't the array of custom haptics like you get with Core Haptics or UIKit's feedback generator. Instead, you get a small subset that don't have much nuance.
Complication images and images in general can't be custom-scaled on a watch face, so you have to create an asset catalog of images sized just the way you want them to appear.
...among many other things!
For most of us, development time is an asset, and losing so much of it to spinners, debugging lag, unpredictable behavior due to guardrails, and deprecation-based updates is a huge frustrating time sink. It's just not worth it for the return we get.
The entire development pipeline feels like it was built for kids, where we're given so little control we can't really design things that we have in mind because they don't want us to. I've brought this up during tech talk office hours and WWDC labs, and the response is always that "We don't want developers to drain the user's battery." But they're assuming that developers and users don't realize this, and they're limiting what people can create because of that. Big companies, too, want to make their apps look a certain way, with custom buttons and background images, which is hard to do with such a limited set of stock UI options and lack of view customization and object subclassing.