Three Categories of Hard Software Problems