Quick answer: Escort missions frustrate when the escorted character is fragile, slow, or behaves badly—so make the escorted character capable, sensibly paced, and well-behaved, so escorting isn't a babysitting chore. Make the escorted character capable and well-behaved, so escorting isn't frustrating.
Escort missions—protecting and accompanying a character—are notoriously frustrating when the escorted character is fragile, slow, or behaves badly, so making the escorted character capable, sensibly paced, and well-behaved is what keeps escorting from being a babysitting chore. Designing a good escorted character is what makes escort missions work.
Make the escorted character capable, not fragile
Escort missions frustrate most when the escorted character is fragile—dying easily, requiring constant protection, failing the mission if they take damage—which makes escorting a stressful babysitting chore. Making the escorted character capable means the escorted character can handle themselves to a reasonable degree—not fragile and helpless, but reasonably durable and perhaps able to contribute (defending themselves somewhat)—so escorting isn't a stressful task of protecting a helpless, fragile character from any harm. A capable escorted character (durable, not helpless) makes escorting manageable (the player doesn't have to prevent all harm to a fragile character), while a fragile one (dying easily, helpless) makes escorting a stressful babysitting chore (constantly protecting a helpless character). Making the escorted character capable, not fragile—reasonably durable and able to handle themselves—is the foundation of a non-frustrating escort, removing the stress of protecting a fragile, helpless character.
Pace and behavior matter too—sensible pace and good behavior. Beyond not being fragile, the escorted character should be sensibly paced and well-behaved. Sensible pace means the escorted character moves at a sensible pace (not frustratingly slow, not faster than the player can keep up), so escorting isn't frustrating due to the character's pace—a too-slow escorted character (the player constantly waiting) is frustrating, as is one that rushes ahead into danger. A sensibly-paced escorted character (moving at a reasonable, manageable pace) makes escorting smooth, while a poorly-paced one (too slow, or rushing ahead) frustrates. Good behavior means the escorted character behaves sensibly—not running into danger, not getting stuck, not behaving erratically or stupidly—so escorting isn't frustrating due to the character's bad behavior (running into enemies, getting stuck, doing stupid things). A well-behaved escorted character (sensible behavior, staying safe, not getting stuck) makes escorting manageable, while a badly-behaved one (running into danger, getting stuck, erratic) frustrates (the player dealing with the character's bad behavior). Sensible pace (reasonable, manageable movement) and good behavior (sensible, not running into danger or getting stuck) keep escorting from being frustrating due to the character's pace or behavior. Sensible pace and good behavior—reasonable movement and sensible behavior—complete a non-frustrating escorted character. Combining making the escorted character capable, not fragile (removing the protection stress) with sensible pace and good behavior (removing the pace and behavior frustrations) is what makes an escort mission not frustrate—a capable, sensibly-paced, well-behaved escorted character, so escorting isn't a babysitting chore. Designing escort missions this way—a capable, sensibly-paced, well-behaved escorted character—is what keeps them from being the frustrating babysitting chores they're notorious for, with the escorted character handling themselves reasonably, moving sensibly, and behaving well, so escorting is a manageable accompaniment rather than a stressful chore of protecting a fragile, slow, badly-behaved character. Make the escorted character capable, sensibly paced, and well-behaved, and escort missions aren't frustrating, with the good escorted character making escorting manageable rather than the babysitting chore that fragile, slow, badly-behaved escorted characters cause, which is what makes escort missions work rather than frustrate.
Ship it, then learn from it
No amount of internal deliberation substitutes for the information you get the moment real players touch your game. The assumptions that felt certain turn out wrong, the feature you doubted becomes the favourite, and the problem you never imagined is the one everyone hits. That feedback only exists on the other side of shipping.
So bias toward getting something real in front of real people sooner rather than later. A rough thing that's out in the world teaches you more in a week than another month of private refinement, and every release makes the next decision better informed.
Cut the feature, keep the focus
The instinct to add is far stronger than the instinct to remove, which is exactly why most games drift toward bloat rather than clarity. Every system you add has to be built, balanced, debugged, and maintained, and it competes for the player's attention with everything else. A focused game that does a few things excellently almost always beats a sprawling one that does many things adequately.
When you're tempted by one more feature, ask what it costs and what it competes with, not just what it adds. The discipline to keep a game focused is what lets the parts that matter shine, and it's usually the difference between a memorable game and a forgettable one.
The player doesn't see what you see
You know where to click, which path works, and what every system is supposed to do, because you built it — and that knowledge makes you the worst possible judge of how your game reads to someone encountering it fresh. The confusion you can't feel is exactly the confusion that costs you players.
This is why fresh eyes are so valuable and so uncomfortable: they reveal the gap between the game in your head and the game on the screen. Put your work in front of people who've never seen it, watch where they stumble, and treat that stumble as information rather than as their mistake.
Default to the boring, robust choice
It's tempting to reach for the clever, novel, or technically impressive solution, but in production the boring choice — the well-understood approach, the proven pattern, the simple implementation — is usually the one that ships and keeps working. Cleverness has a way of becoming the bug you're debugging at 2am six months later.
Save your novelty budget for the things that actually make your game distinctive, and be conservative everywhere else. A game built on robust, unremarkable foundations is one you can keep building on, while one built on clever fragility is one that fights you the whole way.
Make the common case effortless
Most of what a player does, they do over and over, and most of what you build will be exercised in a handful of common situations far more than in the edge cases. Optimising the rare and neglecting the frequent is a reliable way to make a game that's technically complete and practically annoying.
So spend your polish where the volume is: the action repeated a thousand times, the menu opened constantly, the path every player walks. Making the common case smooth and satisfying does more for how the game feels than perfecting the corners almost nobody reaches.
Escort missions frustrate when the escorted character is fragile, slow, or behaves badly—so make the escorted character capable (not fragile and helpless), sensibly paced, and well-behaved (not running into danger or getting stuck). Make the escorted character capable and well-behaved, so escorting isn't a frustrating babysitting chore.