Dan North and CUPID

CUPID is Dan’s response to the SOLID principles and back story. Rather than another set of principles, Dan instead chose to focus on the properties of the software.

  • Composable – code that works well with others and does not have too many external dependencies that make it harder to use in another context, ideally with Intention Revealing terminology
  • Unix philosophy – related to the composability property, does one thing well and works well with others to build a larger solution
  • Predictable – or as the saying goes, “does what it says on the tin.” Dan calls this a generalization of Testability, it should behave as expected, be deterministic and observable
  • Idiomatic – naturally fits in with the way code is written in the implementation language, so for example in Python, rather than open, write and then close a text file, the natural way to write this is as below, where Python automatically handles the closing of the file

with open("file.txt", 'w') as textfile: textfile.write("hello world!")

  • Domain based – uses words and language in a way that would be familiar to practitioners in that domain.