Когда вы говорите о компонентах, вы имеете в виду компоненты кода или компоненты инфраструктуры? Я бы сказал, что инфраструктура (вспомогательные службы и процессы), а не код, дает максимальную отдачу от качества, скорости и простоты разработки. Примеры, которые вы даете, теперь находятся в стандартных библиотеках большинства языков или являются специфичными для конкретного приложения/использования.
Я также собираюсь предположить, что контроль версий является данным, поскольку он является настолько неотъемлемой частью всей разработки.
Я бы сказал, что наиболее важная инфраструктура будет непрерывной сборки/автоматизированное тестирование. Это позволяет людям писать любой код, который им нужен, проверить его и убедиться, что он работает со всеми остальными.
Вторым наиболее важным было бы общие библиотеки. Это позволяет людям развиваться быстрее и устанавливать стандарты (надеюсь, хорошо) для внешнего вида, ощущения и дизайна. Поскольку общие библиотеки используются больше, важность непрерывной сборки возрастает, поскольку небольшие изменения в них могут вызывать регрессии.
Одна из проблем с общими библиотеками заключается в том, что они прикладывают много усилий для того, чтобы хорошо проектировать - так что их стоит многократно использовать, и это занимает много времени, чтобы довести их до этой точки. Большинство из них начнутся как конкретные для проекта, а затем кто-то взломает его в свой проект, а затем некоторое разветвление, а затем скопирует и вставляет. Через некоторое время, вероятно, кто-то проверит код и начнет сливать их в обычное место. Необходимо разработать план обновления общих библиотек и как (или если) иметь сразу две версии. Еще один скрытый недостаток - они позволяют быстрее развиваться в краткосрочной перспективе, но препятствуют развитию в долгосрочной перспективе, поскольку люди становятся заблокированными в более старых версиях (это в большей степени относится к сторонним библиотекам).
Третий будет инструменты для сборки. Это означает общие инструменты для упрощения построения, проверки, поиска и, в противном случае, взаимодействия с кодом. Вещи, которые автоматизируют маркировку ошибок, которые разрешаются при отправке патча, или уведомляют постоянных строителей, которые изменили зависимости, или автоматически запускают тесты перед отправкой теста, что упрощает (и быстро) тестирование.
Четвертый будет Герметичные сборки, что является простым расширением инструментов сборки. Это означает, что приложение является самодостаточным. Это имеет два преимущества: 1) повторное использование машины проще и, что более важно, 2) его невероятно легко для разработчика, чтобы начать работу - им не нужно устанавливать дополнительные библиотеки или что-то менять в/etc или устанавливать что-то в их окружающая среда - она просто строит и работает.
Некоторый друга я могу думать:
- Мониторинг: Если все использует тот же метод мониторинга, то люди не должны черный ящик отслеживать общие библиотеки. Это также облегчает выявление проблем, поскольку все данные находятся в одном месте.
- Хранение журналов: Гребля и грохот - это боль. Наличие централизованного места, где все журналы хранятся в структурированном формате, позволяет легко искать и находить проблемы.
- Управление филиалом: В большом проекте это позволяет разработчикам разрабатывать, тестировать тестер и выпускать освобождающие, не наступая друг на друга.