Blocking means one session is waiting because another session still holds the lock it needs. That can be normal. SQL Server is doing exactly what it should do when transactions overlap on shared objects. The problem starts when the wait time, frequency, or business impact shows the workload is not clearing cleanly.
Deadlocks are different. A deadlock is a circular dependency where SQL Server has to kill one participant to let the others continue. Blocking may eventually turn into deadlocks, but many blocking problems never do. They just keep slowing users, timing out application requests, and making the estate feel unstable.
That matters because the review question is not always "how do we stop waiting entirely?" Sometimes the right answer is to shorten one transaction, change one access path, or stop one background job from colliding with live traffic.