i've been wrestling with this for a while and finally have a view.
current situation: senior SWE, 3.5 years at the company, been 'promo-track' for 8 months, next cycle is 4 months away. outside offer came in at the staff title I'd be getting if I wait.
here's the math I ran:
if I wait and get the promo: title upgrade, comp bump of maybe 15-20%. i know the codebase, the stakeholders, the politics. zero ramp time. the promo bump might be 15k-20k more in total comp.
if I take the outside offer: title upgrade immediately. comp jump is usually 25-40% for a lateral-to-promo move. new codebase, new politics to learn. 3-6 month productivity dip.
the part nobody says out loud: if you stay and get the promo, your base comp is still anchored to what you were paid as a senior. the company will give you a raise but it's calculated as a percentage of your existing band. a new company prices you as a staff engineer from day one with no anchor.
the market comps staff differently than senior+15%. that gap is often bigger than the raise you'd get internally.
the other uncomfortable truth: if you've been 'promo-track' for 8 months and there's still 4 months until the cycle, your manager has had 8 months to go to bat for you off-cycle. at some companies off-cycle promos exist. the fact that they haven't happened is itself signal.
what I'm doing: telling the external company I need 2 weeks to decide, having a direct conversation with my skip-level about how certain the promo is this cycle, and then making the call with actual information instead of hope.
if the skip-level hedges, I'm taking the offer. if they're concrete and unambiguous, I'll probably stay for one more cycle and reassess.
four months is not forever. an anchor in comp for three more years of your career is.