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