具体と抽象の振る舞いがある観点で一致するときにはミックスインを使う。具体と抽象が全く同じ振る舞いをするときは継承を使う。って書いているけど、コードを書いていて、継承だとオーバースペックのような気がする、既存実装のメソッドの修正がめんどいから、という理由でミックスインを選んでいたわ。
何を言いたいかっていうと、すでに動いているソフトウェアを変更するのはトレードオフがわかりやすく選択肢が収束していくので修正方針はとても限定的になる。ある意味簡単。一方で、新しくソフトウェアを作るときは制約が少ないので選択肢を枝切りするための体系的な知識が求めれられる。とても難しい。