1) Каждый раз, когда я собираюсь дублировать (или существенно дублировать) фрагмент кода: «О, я мог бы просто вырезать / вставить в этот другой контроллер ...»
2) Каждый раз, когда я пишу код, который, очевидно, будет использоваться в будущем.
3) Код существенного размера, который имеет определенное назначение, где это назначение довольно сильно отличается от основного назначения контроллера / модели. Это в некоторой степени связано с (2), но иногда код не будет повторно использоваться, но модуль помогает организации.