По моему опыту, самым большим фактором успеха общей библиотеки является пользовательский бай-ин; пользователи в этом случае являются другими разработчиками; и культура вашего рабочего места/команды (ов) будет важным фактором.
Отдельные библиотеки (проекты/сборки, если вы в .Net) необходимы для разных уровней приложений (например, очевидно, что нет смысла вводить код пользовательского интерфейса и доступа к данным).
Держите все как можно проще; то, что вы не помещаете в общую библиотеку, часто не менее важно, чем то, что вы делаете. Пользователи библиотеки не захотят думать, поэтому использование должно быть очень простым.
Золотое правило, которым мы придерживались, заключалось в том, чтобы отдельные функции фокусировались на одной задаче - делайте одно и делайте это хорошо (или очень хорошо); не пытайтесь предоставить что-то, что пытается принять во внимание все возможности, тем более многократно вы думаете, что вы его делаете, тем менее вероятно, что он будет использоваться. Code Complete (книга) имеет отличный контент по общим библиотекам.
Хороший подход к настройке/совершенствованию библиотеки - это регулярный просмотр кода и ретроспектива; найти хороших кандидатов, которые вы уже придумали, и подумать о перераспределении их в библиотеку для будущих проектов; хорошим кандидатом будет то, что более чем одному разработчику приходилось делать больше на один проект (например).
Настроить своеобразное простое и ясное управление библиотеками - кто-то, кто может «владеть» конкретной библиотекой и обеспечивать ее избыточное качество (например, старшего разработчика или руководителя команды).
И SRP хорош для общих проектов - http://en.wikipedia.org/wiki/Single_responsibility_principle – Jon