The number of reasons is not what breaks it. Two things are, and only one of them gets worse as you add branches.
The first is that a customer tag is a set with no timestamp. It sticks. Someone who sent a jacket back as too small in March and a lamp back as defective in August is carrying both tags at once, and every segment reading tags now matches on a return you closed five months ago. That already misfires at two reasons, so going from two to six does not create the problem, it just makes it visible. Staying on tags means the same workflow that adds one has to remove it later, and that second half is the part nobody writes, because adding a tag is one action and expiring it is a whole other workflow with its own trigger.
The second is worse for a store with real return volume. The reason is not on the return, it is on the return line item. ReturnLineItem carries its own returnReasonDefinition plus a returnReasonNote, so a three item return legitimately carries three different reasons. Tagging the customer forces you to flatten that to one and there is no non-arbitrary way to pick. An email that talks about sizing when the same box also had a defective item reads worse than a generic one, so you lose the thing you went looking for.
So it is not a just add more tags problem, but purpose-built logic is not the answer either. Move the reason off the person and onto the event. If your tool accepts a custom event through its API, fire one at return approval carrying the reason, the order and the line items as event properties, then branch on the properties. Properties are point in time, so nothing accumulates and nothing needs expiring, and a multi reason return arrives as one event you can read rather than three tags competing.
Then collapse the list before you branch on it. Shopify’s reasons are a closed set of ten. Colour, style, changed their mind, size too large, size too small, damaged or defective, received the wrong item, not as described, other, unknown. Most of those want the same email. What differs is what you are asking for next, so three buckets covers it. Fit and preference gets sizing help and an exchange nudge. Defective and wrong item gets an apology and a replacement offer, and should sit out of win-back campaigns for a while rather than receive a different version of one. Changed their mind is your ordinary win-back. Branch on the bucket you assign rather than on Shopify’s taxonomy, because then a reason you add later is a mapping change instead of a new flow.
Worth knowing that other and unknown will be a bigger slice than you expect, and the detail for those sits in the freeform note, capped at 255 characters, which you cannot route on. Those go down the generic path no matter what you build.
Are your returns mostly single item, or do people tend to send back several things from one order?