Every problem in NP can be reduced to the satisfiability problem, which is the cornerstone of computational complexity theory.
The most important single aspect of software development is to be clear about what you are trying to build.