да, для соблюдения OCP на этапе проектирования нужно знать будущее. Можно пробовать "придумать будущее" - это в целом работает но скорее всего рано или поздно этот принцип будет нарушен. С SRP похожая история - что бы хорошо понимать соблюдает твой код SRP или нет нужно оч хорошо понимать откуда изменения приходят, почему они приходят и кто от них блага получает. Эти принципы больше подходят для того что бы драйвить рефакторинг. Тот рефактоинг который "пописал код часик - посмотрел что написал отрефактоил" а не "переебашить пол проекта"
Будущее, к сожалению, експоненциально увеличивает число вариантов с каждой итерацией дальше.... что приводит к невозможности его угадать в относительной перспективе.
Про логику в коде я встречал, что часто выбирается компромис для бизнеса в ущерб разработке, чтобы бизнес видел свою модель более ясно. Видимо в данном случае это ближе к этому.