Five major evils
  1. Spaghetti ++: Complex data structures with criss-crossed pointers.
  2. Hard to find pointer errors result in tedious debugging and unreliable code.
  3. No record of the architecture in the final code is the main source of maintenance problems.
  4. Wrong tools that help to find errors instead of building the correct code by construction.
  5. Persistent data are not in the C++ language, and object serialization is clumsy and error prone. OODMS are slow, inflexible, and difficult to use.