When the domains *D _{i}* are finite, CSP problems can be solved easily
using search: at each level of the search tree, try each possible
value of one variable; fail if a constraint is violated.

While a simple search always works, the time required is combinatoric. It is possible to do much better by making use of heuristics based on the structure of the problem:

- Choose which variable to instantiate next
- Choose which value to try first
- Propagate constraints