Я думаю, що це насправді два питання в одному - я спробую відповісти на обидва.
1) Як зменшити дублікат коду в кодовій базі.
Це допомагає нагадати собі про користь цього: це призводить до меншої кількості помилок через дублюючу логіку бізнесу та менше коду потрібно підтримувати. Найкращий спосіб уникнути цього - через спілкування - як зазначено в інших відповідях. Я повністю погоджуюся з рекомендацією використовувати огляди коду з додатковим застереженням, що ви повинні однаково ділитися обов'язками з перегляду коду, щоб правильно поширювати знання. Ви також повинні використовувати щоденні заходи, щоб розробники часто розпізнавали, коли хтось намагається вирішити проблему, для якої існує існуючий корисний код. Слід також розглянути можливість поєднання коду, оскільки це збільшує обмін знаннями і допомагає програмістам бути дисциплінованими.
Я також рекомендую зв'язати своїх розробників якомога ближче один до одного, бажано в одній кімнаті. З великою кількістю спільних дощок та місця. Потім відправляйте їх на їжу разом. Чим більше ваші розробники «зв’язуються», тим краще вони спілкуватимуться між собою.
Я не згоден з рекомендацією використовувати вікі або подібний до документа код. Незалежно від того, наскільки дисципліновані розробники намагаються бути, документація буде відходити від початкового коду. Більш ефективним підходом було б використання специфікації на прикладі тестів стилю. Вони задокументують код таким чином, щоб зрозуміти, яким чином його слід використовувати, і ваші тести вийдуть з ладу, якщо хтось змінить код без зміни прикладів.
У вас вже є велика база коду з великою кількістю повторюваного коду, тому, ймовірно, ви повинні працювати над рефакторингом цього. Може бути важко знайти дублікат коду, який не був вирізаний та вставлений. Тому замість цього я пропоную вам проаналізувати історію змін. Шукайте файли, які часто змінюються одночасно. Це, ймовірно, вкаже на проблеми з інкапсуляцією, якщо він не вказує фактичний дублікат коду і варто все-таки очистити. Якщо ви також можете проаналізувати історію виправлень помилок щодо змін вашого коду, ви можете знайти конкретні гарячі точки, де виправлення часто необхідні. Проаналізуйте ці гарячі точки, і ви, мабуть, виявите, що багато з них пояснюються дублюючою бізнес-логікою, яку розробник змінив лише в одному місці, не розуміючи, що потрібно змінити двічі.
2) Як нам підходити до створення спільних віджетів, компонентів, бібліотек тощо, які потім можуть бути використані в інших проектах .
У цьому випадку ви не повинні намагатися вписати бізнес-логіку, а поділитися корисним рамковим кодом. Це може бути складним балансом, оскільки вартість створення та обслуговування набору спільних компонентів може бути досить великою, і важко передбачити, в яких випадках це варто робити. Я би запропонував тут підхід - правило три страйки. Не турбуйтеся про те, щоб написати подібний фрагмент коду двічі, але коли вам потрібно зробити це в третій раз, переробляйте його на спільний компонент. На даний момент ви можете бути впевнені, що це буде корисно, і ви добре розумієте більш широкі вимоги до компонента. Очевидно, тут важлива комунікація між розробниками.
Подумайте про створення якомога більшої кількості ваших спільних компонентів з відкритим кодом. Це не бізнес-логіка, тому вона не дасть вашим конкурентам великої переваги, але це означає, що ви отримаєте додаткових рецензентів та обслуговуючого персоналу безкоштовно.