Комплекс не обязательно означает больше или меньше строк кода для меня.
Идеальная система никогда не создается с первого раза. Все, что вы можете сделать, это попытаться не принимать слишком много сложных решений, которые связывают вас с тем, чтобы делать что-то одно.
По этой причине мне нравится держать сложность на низком уровне во время начальных версий любого проекта. Причина, по которой вы что-то создали (новая гибкость), очень сильно пострадала. Если вы сделаете это настолько сложным, насколько это возможно, меньшее количество людей поймет это в начале. Это может быть хорошо или плохо.
Если вы сделаете его слишком простым (и на 50–70% больше кода), у него могут возникнуть проблемы с производительностью.
По мере того, как система стареет и взрослеет, сложность, кажется, приходит через перефакторинг. К тому времени вы достигнете точки, когда к некоторому коду больше никогда не придется прикасаться, и если вы когда-либо это сделаете, затраты на понимание сложности будут ниже из-за более низкой частоты его касания.
Мне нравится решать сложные проблемы с помощью простых шагов. Там, где это невозможно, сложность возрастает соответственно. Был вопрос в другом вопросе о знании, когда это "достаточно хорошо". Иногда немного больше кода (5-20%) может значительно компенсировать сложность, которая может быть более дорогой для повторного изучения или понимания кем-либо.
Необходимость в лучшем алгоритме обычно является хорошей проблемой, потому что это означает, что ваши вещи используются, и есть новые требования, которые необходимо учитывать.
Это та же сложность, что и для меня применительно к абстракции базы данных, вы должны знать, когда сделать ее более гибкой, а когда сделать ее более простой, и лучше всего ее изучить, собрав ее, и перед тем, как ее пересмотреть. Вы пишете одну строку чего-либо.