Я определенно рекомендовал бы читать эссе Joels по этому:
"В защиту синдрома Not-Invented-Here"
Для зависимости лучшая метрика, о которой я могу думать, была бы, "был бы мир прекращать работу, если бы это исчезло". Например, если бы STL C++ волшебно ушел, то тонны программ прекратили бы работать. Если бы .NET или Java исчезли, то наша экономика, вероятно, терпела бы поражение из-за количества продуктов, которые прекратили работать...
Я думал бы в тех терминах. Конечно, многими вещами является оттенок серого между "концом мира" и "meh", если они исчезли. Чем ближе зависимость к потенциальному порождению конца света, если это dissapeared, тем более вероятно это должно быть стабильно, имеет базу активных пользователей, имеет ее проблемы хорошо - знает, и т.д. Чем больше пользователей, тем лучше.
Его аналогичное тому, чтобы быть маленьким потребителем некоторого аппаратного компонента. Иногда аппаратные средства устаревают. Почему? Поскольку никто не использует его. Если Вы будете небольшой компанией и должны будете получить компонент для Вашего продукта, то Вы выберете то, что обычно доступно - что "крупные игроки" заказывают в больших количествах, надеясь, что это означает что (a) компонент не исчезнет, (b) проблемы с компонентом известны, (c) существует большая, информированная база пользователей и (d) это могло бы стоить меньше и быть более доступным.
Иногда, хотя, Вам нужна та специальная конденсаторная потоком часть, и Вы рискуете, что компания, продавая ее Вам не могла бы хотеть продолжать производить конденсаторы потока, если Вы только заказываете 20 в год, и никто, кажется, не заботится :). В этом случае могло бы стоить разработать Ваш собственный конденсатор потока вместо того, чтобы полагаться на ту ненадежную Doc Brown Inc. Просто не покупайте Плутоний у ливийцев.
Если Вы имели дело с производством чего-то (особенно при создании гораздо меньше, чем миллионы из них в год) необходимо было иметь дело с с этой проблемой. Зависимости от программного обеспечения, я верю, должны быть поняты в очень похожих терминах.
Как определить количество этого в реальную метрику? Примерно рассчитайте, сколько людей зависит от чего-то. Если его высокое, риск зависимости, причиняющей Вам боль, намного ниже, и можно решить, в какой точке риск слишком много.
Я действительно не рассмотрел критериев, которые я использую, чтобы решить, нанять ли стороннюю библиотеку или не прежде, но думавший об этом, вероятно, следующее, без определенного порядка:
Возможная альтернатива должна использовать внешнее программное обеспечение, если это обеспечивает много значения к Вашему проекту, но скройте это позади упрощенного (и более последовательный к Вашему проекту) интерфейс.
Это позволяет Вам усиливать питание сторонней библиотеки, но с очень уменьшенной сложностью (и дублирование как таковое) в вызове библиотеки. Интерфейс гарантирует, чтобы Вы не позволяли определенному стилю стороннего выхода за край библиотеки в Ваш проект, и позволяет Вам легко заменять его внутренней реализацией как и когда Вы думаете, что это могло бы быть необходимо.
Знак того, когда это происходит, мог бы состоять в том, что интерфейсу, который Вы хотите поддерживать, препятствует сторонняя библиотека.
Значительная оборотная сторона к этому - то, что это действительно требует дополнительной разработки и добавляет определенное влияние обслуживания (это увеличивается с суммой функциональности, в которой Вы нуждаетесь из библиотеки), но позволяет Вам усиливать стороннюю библиотеку без слишком большой связи и безо всех Ваших разработчиков, бывших должных понять это.
Хорошим примером этого было бы использование объектного картопостроителя отношения (Hibernate\NHibernate) позади ряда репозиториев или объектов доступа к данным или фабрик, реализовываемых с платформой внедрения зависимости.