I’m one of those riders who pays for both since I find that both have meaningful benefits.
I started with TrainerRoad since I wanted to get faster, and really enjoy the structured component. Not having to think what to do next is a huge plus for me. However, the downside was, there are only so many action movies I can watch, and staring at the blue boxes waiting for the time to tick by is mentally taxing.
What I like about Zwift is that you’re riding with real people (whether you know them or not) and blasting by other riders is a huge motivator during a V02 or long difficult interval, or watching someone try to hold your wheel when you’re doing an extended 99% FTP interval and seeing when they crack. Not to mention, the incentive system of new bikes and kit and small victories is actually something to add some excitement to structured training. Couple this with some music, its a good combination of structured training, visual stimulation and consistent mental rewards.
So what I may suggest is set TR to control the trainer, and have Zwift “Read” the power from your trainer/PM (do not set trainer as controllable on Zwift, only pair PM/Trainer as “power source”), thereby overriding the feel of gradient changes, but showing your implied speed and moving your character.
Edit: per @mcneese.chad, re-creating TR workouts is a violation of TR T&C, so would likely advise against building workouts in Zwift. For me, I think TR does a great job at showing my historical metrics, TSS, calendar, etc. and frankly drives the workout since it’s so simple to use, which is why it is my primary program, whereas Zwift just adds the “fun” component of sometimes feeling faster than other people.