STP Design Philosophy

The design philosophy behind STP has always been

  • Simplicity, Robustness and Effectiveness (Keep code simple, and add features only as needed/requested)
  • Follow the user (Don't impose features on users. Implement what they need)
  • Application-driven (Open to all applications for which constraint solvers can be useful. Not tied to specific application domains)
  • Work with users (Co-develop STP with the application)
  • Measure, measure, measure (Engineering is as important as algorithmics. Measure performance of each part of code)
  • Practice should drive theory (Many tools are designed top-down based on some fancy broken theory ideas. Avoid such mistakes. Theory should generalize practice)
  • Don't try to be all things to everyone (Don't cram down everything into one executable. If users want something very specific, then allow extensibility outside the core)
  • Implement long-term ideas and paradigms (Don't follow fashion)