Blockers are anything that interrupts conviction during the product experience. They are the reason a user who came in fully pulled; who had desire and initial conviction; ends up leaving anyway.
**Functional blockers** are the obvious ones: the product doesn't work for a key use case, performance is inadequate, an integration is missing, the setup is more complex than the user can manage. These show up in support tickets, in churn surveys, in NPS feedback. They are real and they matter.
**Symbolic blockers** are the ones most product teams miss, because they don't show up in support tickets. A symbolic blocker is anything in the product experience that contradicts the meaning the user came in with. If the user arrived believing the product was the "email killer, no chat" and their first action after signing up is to create a "chat room," the conviction cracks. Not because the feature is bad; the feature might work perfectly. But it breaks the symbolic product. The user's internal model of what this thing is starts to destabilize.
Symbolic blockers are often more damaging than functional blockers because they operate below the level of explicit complaint. A user who hits a functional blocker knows what to say in a support ticket. A user who hits a symbolic blocker just feels vaguely less enthusiastic, less convinced, and often can't articulate why. They convert at lower rates, churn earlier, and are less likely to advocate.
Adoption Engineering is the discipline of identifying and removing both types of blockers; but particularly the symbolic ones, because they are systematically overlooked.
See also: Adoption Engineering, Pull, Conviction.