CUPID does make sense in itself. It is a lot easier to learn and to understand than the SOLID Principles. I guess it is also easier for beginners to design projects properly when implementing these properties to their code. You can read more about my thoughts on CUPID here.

This is cupid as designed by Dan North (taken from these slides):

[C] U P I D - Composable

plays well with others

  • Small "surface area"
  • Intention-revealing name and purpose
  • Minimal dependencies

C [U] P I D - Unix philosophy

does one thing well

  • Each Program (/Component) should do one thing well
  • Expect the program's output to be input for another program

C U [P] I D - Predictable

does what you expect

  • behaves as expected with no surprises (even without tests)
  • deterministic
  • observable (internal state can be inferred from outputs)

C U P [I] D - Idiomatic

feels natural

  • language idioms (coding style)
  • local idioms (coding standards)

C U P I [D] - Domain based

in language and structure

  • domain language
  • domain structure
  • domain boundaries

#################################

For me it is important to understand these properties well and to be able to teach them easily. Therefore I translated them to german.

[C] U P I D - Kompatibel

hohe Integrierbarkeit

  • Kleine Berührungspunkte
  • Aussagekräftiges Namensschema und erkennbares Ziel
  • Minimale Abhängigkeiten

C [U] P I D - Unix-Philosopie

macht eine Sache richtig

  • Jedes Programm (/Komponente) macht eine Sache. Und die richtig.

C U [P] I D - Vorhersehbar

Tut, was du erwartest

  • Verhält sich erwartungsgemäß, ohne Ausnahme!
  • entschlossen (macht jedes mal dasselbe, klares Funktionsverhalten)
  • ersichtlich (Ausgabe gibt Einblick in Variablenwerte)

C U P [I] D - Sprachgewandt

fühlt sich natürlich an

  • Vorgaben der Sprache (coding style)
  • Vorgaben der Firma (coding standards)

C U P I [D] - Domänebasiert

in Sprache und Struktur

  • Domänespezifische Sprache
  • Domänespezifische Struktur (antstatt frameworkabhäniger Struktur)
  • Domänespezifische Grenzen (Modulgrenzen, Einheiten etc.)