На проектах с высоким уровнем легаси часто сталкиваюсь с такой проблемой:

Нет типов у переменных, свойств, параметров, возвращаемых значений.

Это приводит к тому что видишь в коде какой-нибудь $someStrangeId и понятия не имеешь, строка это, boolean или число.

Особенно если оно проверяется вообще каким-нибудь

if ($someStrangeId) { ... }

Иногда приходится даже делать

var_dump($someStrangeId);
die();

только чтобы выяснить что там внутри.

Сидишь потом раскапываешь вверх по всем использованиям, вызовам методов, обратным инжинирингом докапываясь до сути происходящего и теряешь на этом кучу времени.

Чтобы подобные проблемы уменьшались со временем, лучше всего начать указывать типы в обязательном порядке в новом коде и по возможности в старом.

Указываем типы:

  1. Указываем типы для переменных, если тип не определяется IDE из окружающего кода
  2. Указываем типы для параметров
  3. Указываем типы возвращаемых значений
  4. Указываем типы для свойств классов и моделей
  5. Не используем mixed — определите, какой тип вам нужен и используйте его
  6. Если тип можно описать то он должен быть описан
  7. Указываем тип явно, если это невозможно то используем PhpDoc