Если вы являетесь частью органа по стандартизации, который может навязывать использование ваших классов другим, вы можете действовать гибко и сложно (например, stl).
Для всех остальных, если нет веских причин, простота использования всегда должна быть вашим первым выбором. В противном случае мало кто будет использовать ваш код / API. Если кривая обучения использованию чужого кода высока, большинство людей предпочтут переопределить только те части, которые им нужны. Обычно это происходит намного быстрее, а проблемы легче решать.
По моему мнению, «легкость понимания» является вторым после «Работает правильно», когда дело доходит до оценки качества кода.
Таким образом, если добавить гибкость за счет простоты изучения и использования, не добавляйте гибкость, пока не доказано, что гибкость необходима.