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.)