Software Development is NP-hard

Update: this blog is no longer active. For new posts and RSS subscriptions, please go to

Here’s one more thought on the subject of complexity in software development: software development is NP-hard.

Software development (in the sense of building large projects end-to-end) has these characteristics:

  1. A proposed solution can be easily proved correct or not correct.
  2. The cost of searching for the correct solution grows exponentially as the problem set grows in size.
  3. There are no known shortcuts that make the process of searching for the correct answer dramatically easier.

What’s the best way to deal with NP-hard problems?

Successive approximation and heuristics.

Comments (1)

  1. Alan Pretre says:

    Formal methods have been developed, such as Z (see and, but a large system must be broken down into smaller components and analyzed.  Proving the correctness for all but the most trivial algorithms is VERY difficult.

    Testing, while useful, is not PROOF that a system is correct.  As we say, testing can show the presence of bugs, but not the absence of them.