-았/었어야 했다: Should Have (but Didn't)

Korean has a clean, honest way to say "I should have done X" — meaning you didn't do it, and now you regret it or hold someone accountable. That form is -았/었어야 했다. The single most useful thing to understand about it is where it comes from: it is the ordinary "must / have to" pattern -아/어야 하다 with the tense pushed one step into the past. An obligation that existed but was not met is exactly what English calls "should have." Once you see it that way, the double-past shape stops looking strange and starts looking inevitable.

The building blocks

Start from the obligation pattern you already know:

  • 먹어야 해요 — "I have to eat / I must eat" (present obligation)

Now put the first verb into the past. The obligation is no longer about now; it's about something that was supposed to have happened:

  • 먹었어야 해요 → and then push the whole thing into the past: 먹었어야 했어요 — "I should have eaten (but didn't)."

The recipe is: verb/adjective stem + -았/었어야 (vowel harmony) + 했다 (or 됐다). The inner -았/었- says the action belonged in the past; the outer 했다 anchors the regret in the past too. It is genuinely a double past, and that is not an accident — it is the whole meaning.

더 조심했어야 했어요.

deo josimhaesseoya haesseoyo

I should have been more careful.

처음부터 솔직하게 말했어야 했어요.

cheoeumbuteo soljikage malhaesseoya haesseoyo

I should have been honest from the start.

우리가 미리 예약했어야 했어요.

uriga miri yeyakhaesseoya haesseoyo

We should have made a reservation in advance.

💡
Build it in two moves. First form the plain obligation (예약해야 하다, "have to book"). Then move both verbs into the past: 예약어야 다. The past on the inner verb is what turns "have to" into "should have" — an obligation aimed at a moment that has already slipped by.

Vowel harmony picks -았- or -었-

Like every -아/어 ending, the choice between -았어야 and -었어야 follows the stem's last vowel. Bright vowels (ㅏ, ㅗ) take -았어야; everything else takes -었어야. 하다 verbs contract to 했어야.

VerbLast stem vowelForm
잡다 (to catch)ㅏ (bright)잡았어야 했다
먹다 (to eat)ㅓ (dark)먹었어야 했다
오다 (to come)ㅗ (bright)왔어야 했다
공부하다 (to study)하다공부했어야 했다

아까 그 사람한테 사과했어야 했는데.

akka geu saramhante sagwahaesseoya haenneunde

I should have apologized to that person earlier (but I didn't)…

Notice 했는데 in that last example is pronounced [핸는데] — the ㅆ batchim neutralizes to [t] and then nasalizes to [n] before ㄴ, which is why the romanization reads haenneunde.

The trailing -았/었어야 하는데: leaving the regret hanging

Very often Koreans don't finish the sentence with 했다. They stop at -았/었어야 하는데 (or 했는데), letting the clause trail off. The unspoken second half is "…but it didn't happen," and dropping it is itself the expressive move — the sigh is louder than any words that could follow.

좀 더 일찍 출발했어야 하는데.

jom deo iljjik chulbalhaesseoya haneunde

We really should have left a bit earlier… (and now we're late)

좀 더 알아봤어야 됐는데.

jom deo arabwasseoya dwaenneunde

I should have looked into it more… (but I didn't)

That second example uses 됐다 instead of 했다. Both are standard here: 했다 comes from -아/어야 하다 and 됐다 from -아/어야 되다. In this regretful pattern they are interchangeable, and 됐는데 (spoken [됀는데], dwaenneunde) is extremely common in casual speech.

It works for others, not just yourself

This is the key contrast with the self-lament -(으)ㄹ걸 그랬다. That form is a private "aw, I wish I'd…" and only really works about your own choices. -았/었어야 했다 is heavier and more serious, and it points outward just as easily as inward. You can use it to blame someone else, to assign fault, or to state a shared obligation that everyone failed.

너도 그때 왔어야 했어.

neodo geuttae wasseoya haesseo

You should have come then too. (gently blaming a friend — informal)

회사에서 미리 알려 줬어야 했어요.

hoesaeseo miri allyeo jwosseoya haesseoyo

The company should have let us know in advance.

💡
Choosing the right regret form: -(으)ㄹ걸 그랬다 is light, personal, self-directed ("I really should've…"). -았/었어야 했다 is weightier and can assign blame to anyone — yourself, a friend, an institution. If there's fault to be handed out, this is the form that hands it out.

The reframe English speakers need

English "should have" hides the logic that Korean spells out. To an English speaker, "I should have booked ahead" feels like one idea. Korean insists you see it as two: there was an obligation (책임/의무 to book), and it landed in the past unfulfilled. That is why the tense stacks. If you flatten it to a single past — 예약해야 했어요 — you have said something true but different: "I had to book" (a real obligation that may well have been met). The counterfactual "should have but didn't" specifically needs the inner past: 예약어야 했어요.

KoreanMeaningDid it happen?
조심해야 해요I must be careful (now)ongoing / open
조심해야 했어요I had to be careful (then)usually yes — it was required
조심했어야 했어요I should have been carefulno — and I regret it

Boundaries: three regrets that are not this one

  • -(으)ㄹ걸 (그랬다) — casual self-reproach, "I should've…" muttered mostly to yourself. Lighter, and self-only. See -(으)ㄹ걸 그랬다.
  • -지 그랬어요 — advice aimed at the listener about a missed chance, "you should have (why didn't you?)." It scolds gently across the table. See -지 그래요 / -지 그랬어요.
  • -(으)ㄹ 뻔했다 — a near miss that was avoided, "I almost…," not a regret about something undone. See -(으)ㄹ 뻔했다.

The dividing line: -았/었어야 했다 is about an obligation that went unmet and the regret or blame that follows; -(으)ㄹ 뻔했다 is about a bad outcome that nearly happened but was dodged.

Common Mistakes

Mistake 1 — Flattening the double past to a single past. This is the top error. A single past means "had to," not "should have."

❌ 조심해야 했어요.

Says 'I had to be careful' — a real past obligation, not a regret about not doing it.

✅ 조심했어야 했어요.

josimhaesseoya haesseoyo

I should have been more careful (but wasn't).

Mistake 2 — Reading it as a fulfilled duty. Because it looks like a past obligation, learners assume the action was carried out. It was not. 병원에 갔어야 했는데 does not mean "I had to go to the hospital and did" — it means "I should have gone… and didn't."

병원에 갔어야 했는데 안 갔어요.

byeongwone gasseoya haenneunde an gasseoyo

I should have gone to the hospital, but I didn't.

Mistake 3 — Wrong vowel harmony on -았/었-. The harmony rule still applies to the inner verb.

❌ 먹았어야 했어요.

Wrong harmony — 먹- is a dark-vowel stem.

✅ 먹었어야 했어요.

meogeosseoya haesseoyo

I should have eaten.

Mistake 4 — Reaching for -(으)ㄹ걸 to blame someone else. -(으)ㄹ걸 그랬다 is self-directed; it sounds off when aimed at another person. Use -았/었어야 했다 for blame.

❌ 네가 좀 더 노력할걸 그랬어.

Odd — -(으)ㄹ걸 그랬다 laments your own choices, not someone else's.

✅ 네가 좀 더 노력했어야 했어.

nega jom deo noryeokaesseoya haesseo

You should have tried a bit harder. (informal)

Key Takeaways

  • -았/었어야 했다 = "should have (but didn't)" — the obligation pattern -아/어야 하다 shifted into the past, marking a duty that went unfulfilled.
  • It stacks a double past: past on the inner verb (했어야) plus past on the outer 했다/됐다. A single past means "had to," not "should have."
  • 했다 and 됐다 are interchangeable here; the trailing -았/었어야 하는데 leaves the regret hanging on purpose.
  • Unlike self-only -(으)ㄹ걸 그랬다, it can assign blame to anyone — you, a friend, an institution.

Now practice Korean

Reading grammar gets you part of the way. The exercises are where it sticks — free, no signup needed.

Start learning Korean

Related Topics

  • -아/어야 하다 / -아/어야 되다: Must / Have ToTOPIK 2The core Korean 'must / have to' construction — its vowel harmony, the near-interchangeable 하다 vs 되다, the 돼요 spelling, and its 'only if' inner logic.
  • -(으)ㄹ걸 (그랬다): I Should Have / I BetTOPIK 5One spelling, two readings sorted by intonation — a falling -(으)ㄹ걸 (그랬다) laments your own past non-action ('I should have…'), a rising -(으)ㄹ걸(요) hedges a guess ('I bet…').
  • -(으)ㄹ 뻔했다: Almost / Nearly DidTOPIK 4The near-miss form — a bad outcome that very nearly happened but was avoided, so the event did NOT actually occur; always fixed in the past 뻔했다.
  • -지 그래(요)?: Why Don't You…?TOPIK 4A warm, nudging suggestion frame — present -지 그래요 means 'why don't you…?', but its past -지 그랬어요 flips to a gentle 'you should have…' aimed at the listener.