1. A computer-implemented method for solving a constraint satisfaction problem (CSP) comprising: defining a constraint satisfaction problem (CSP) as a set of one or more variables and constraints; determining whether there is at least a first solution to the problem by generating one or more combinations of assignments, wherein each combination of assignments assigns values to one or more of the variables; providing an end user with at least one solution to the CSP, in response to determining that the CSP has at least one solution; and in response to determining that the problem has no solution: grouping the combinations of assignments according to causes of failure, wherein each cause of failure is based on at least one constraint not being satisfied; and providing the end user with an explanation of the causes of failure in a format easily understood by the end user.