Greedy fails when a locally optimal choice blocks a globally optimal solution. Warning signs:
The current choice affects what choices are available later.
You need to "undo" a previous choice to find the optimum.
The problem involves discrete items that cannot be split.
Small examples show greedy gives the wrong answer. The classic example is / knapsack. Greedy by value-to-weight ratio fails because you cannot take fractions of items.