The "Choose One, the Other dies" adds instant replayability, but it has to be done "right", like in ME1.
(I personally want to save everyone, so while I don't like this idea, I get it.)
I thought Thane's outcome was handled beautifully.
I'm a MaleShep, so I don't know much about the Thane romance, but I do know that it's very clear that he doesn't have long to live, that a cure is not available, and that they've been searching for a long time. It hammers home the fact that for all of Shepard's "greatness", they're still just one person.
I think it makes for good storytelling, the only thing that must happen in that regard is that it can't be left ambiguous.
If a squadmate has only so long to live, make it ABSOLUTELY CLEAR that their time is limited; explain that it is not something that can be cured/avoided.
If you tease the player with their possible survival and then the player finds that no matter what, they die, then no one wins in that scenario.
The Wrex/Zaaed factor is also cool.
It pulls double-duty as both character development and a "measuring stick" of your characters morality.
The only thing to watch out for (and ME1/ME2 handled this well) is that you don't suddenly hit the character with it.
To be clear, with Wrex, you hear about the genophage and how there are those searching for a cure, so you know that there is an issue there.
When you reach Virmire, that issue comes to a head. It's shocking, but not in a "way out of left field" kind of way.
The *POW* factor comes from a "Why didn't I see this coming earlier?", not a "What the heck just happened?"
Taking the above a step further, having a squadmate betray you, not just disagree.
To start, it would be neat to have two possible betrayals, based on your morality.
If you're Paragon: "You don't have the strength to do what needs to be done!"
If you're Renegade: "You heartless bastard, I won't let you hurt anyone else!"
It pulls double-duty in that it serves as character development for you and the squadmate in question, and also makes for an excellent plot device/advancement.
A key factor is to let the tension build, and the sense of timing needs to fit. If you consistently oppose or antagonize the squadmate, then it would make sense that the betrayal happens sooner, and their dialogue could reflect that. A sense of disgust and certainty that they're right.
But if you try to at least include them in the decision process or talk to them after disagreeing with them on things, the betrayal could happen later or not at all, and if it does, their dialogue could express trepidation.
"I always knew you were weak."
"I knew I had a bad feeling about you."
VS
"I thought you had it in you, but I guess I was wrong."
"It didn't have to be this way."
It also adds player choice, because while narrative-purposes would likely grant that you defeat them, you could have a choice:
- Execution (Renegade player, self-explanatory, alienation of other squadmates and crew but much easier negotiation now that everyone knows what you do to people who cross you.)
- Imprisonment (always available, can lead to their death because they were caught escaping or some such.)
- Redemption (Paragon player, self-explanatory, the squadmate "sees the error of their ways" and sacrifices themselves to save the ship when it comes under attack.)
-------------
Put simply, if a squadmate dies, it shouldn't be COMPLETELY your decision. Your choices in-game should have an influence on the outcome, but it should also be on the squadmate themselves.
When handled properly, it adds drama, narrative focus/advancement, and can act as a rallying cry:
"For *insert name here*, and all they stand for!"