Давно уже хотел эту незамысловатую мысль выразить словами. Тем более, что при написании последних статей для Хабра ее актуальность подтверждалась снова и снова. Так что вот: говорят, что политика -- это искусство возможного. Но и проектирование программ, программных библиотек или даже отдельных частей программы/библиотеки, -- это так же искусство возможного.
Речь о том, что качество ваших проектных решений определяется вашими текущими возможностями.
Например, количеством информации, которой вы располагаете. Количеством и качеством формализированных и неформализированных требований. Их (не)противоречивостью. Способностью повлиять на требования. Или хотя бы выяснить их происхождение и степень "жесткости".
Наличием опыта. Как вообще, так и опыта в конкретной прикладной нише. Возможностью обратиться к чужому опыту. И качеством этого самого чужого опыта. Впрочем и качеством своего опыта так же.
Если речь о библиотеках и фреймворках (что актуально для меня и нашей маленькой компании), то наличием чувства вкуса. Ибо выбор удобных и запоминаемых имен для API библиотеки -- это та еще задача.
Но, наверное, самое главное -- это наличием времени. Ибо одно дело, когда у вас в распоряжении неделя. Совсем другое -- когда два дня. И уж совсем другое -- когда счет идет на часы.
К чему я все это веду?
К тому, что любое проектное или архитектурное решение -- это результат какого-то компромисса. Вероятно, полученного при всем прочем, в условиях недостатка времени, информации, знаний, опыта. А иногда и желания.
Временами компромисс получается удачным. Хорошо, если есть возможность этот результат с течением времени доработать напильником. Но временами получается так себе. Иногда откровенно плохо. Идеально, наверное, никогда не получается.
Так что, перефразируя Сальвадора Дали: к совершенству нужно стремиться, но достичь его не получится. И это нормально.