Sowas weiß man immer erst "hinterher".
Sprich: Dann, wenn du deinen Code für Erweiterungen noch mal anfassen musst.
Ich habe deswegen früher immer versucht abzuschätzen, was die Zukunft potentiell noch so bringen könnte und habe dann die Architektur darauf ausgerichtet.
Problem daran war nur, dass in den meisten Fällen eine Erweiterung ausbliebt und wenn nicht, lagen meine vergangenen Gedanken, bzgl. der Auslegung der Architektur, zum Großteil sehr daneben und die damalige Mehrarbeit war faktisch nicht zu gebrauchen.
Meine Empfehlung deshalb:
Mach es dir im Anbetracht der Anforderungen so einfach wie möglich.
Spart Zeit und Komplexität.
Und vor allem die geringere Komplexität führt zur Reduktion von potentiellen Fehlern und bringt auch gleich den Vorteil, dass der Code und seine Intentionen vom aktuellen und zukünftigen "Du", sowie von dritten einfacher verstanden werden kann.
Etwas spezifischer zu deiner ursprünglichen Frage:
Primär musst DU deinen Code verstehen.
DU bist der, der ihn schreibt und der ihn möglichst fehlerfrei halten muss.
DU bist hier also bei solchen Entscheidungen der Dreh- und Angelpunkt.
Wenn du bestimmte Anforderungen an deinen Code hast, wie z.B. sehr gute Lesbarkeit, hohe Wartbarkeit, hohen Wiederverwendungsgrad, möglichst breite und umfangreiche Auslegung, einhalten bestimter Standards oder Prizipien, etc., dann ist das immer ein Prozess!
Da gibt es keinen Schalter.
Du kannst, bzw. solltest vorher natürlich recherchieren, nach Meinungen Fragen und musst dir zwangweise Gedanken machen.
Am Ende solltest du aber genau das machen, womit du am besten klar kommst.
Nach getaner Arbeit musst du dir dein Werk noch einmal anschauen und bewerten ,was gut und was scheiße war.
Beim nächsten Mal machst du dann "einfach" mehr vom Guten und weniger vom Beschissenen.
