Как я могу сказать своим коллегам, что кодовая база, которую они построили, представляет собой полный беспорядок, а их методы устарели?

Ситуация

Уже несколько месяцев я работаю с новой командой в новой компании. Компания предлагает некоторые веб-сервисы, и роль команды заключается в разработке и поддержке этих сервисов.

Проблема №1: команда — это не команда, это набор личностей. Они не сотрудничают друг с другом. Каждый работает над своим куском кода так, как ему нравится, со своими соглашениями и методологиями. Самое близкое к сотрудничеству, что я видел до сих пор, это: «Я закончил реализацию этой функции, теперь вы можете начать создавать что-то на ее основе».

Проблема №2: Нет модульности. Ну, на самом деле, работа каждого разработчика находится в своем собственном репозитории, но эти репозитории очень разнородны и смешивают разные вещи (часто заново изобретая велосипед и дублируя код).

Проблема №3: ​​Практика разработки действительно древняя. Они знают слово «agile» , но не понимают его концепции (вероятно, потому, что никогда не пробовали). Код-ревью не проводится, тестов нет, софт сложно настроить и адаптировать. Общий процесс разработки медленный и неэффективный.

Есть много других дефектов, но они, вероятно, являются следствием трех проблем, перечисленных выше. Короче говоря, кодовая база - беспорядок.

Как с этим бороться?

Работая здесь, я быстро заметил эти проблемы и сначала решил действовать по вдохновению: я работал над своим первым проектом с некоторыми гибкими методами разработки, и отзывы были хорошими.

Однако сейчас я нахожусь в ситуации, когда я хотел бы прикоснуться к коду/практике других людей, и я не могу руководствоваться вдохновением, потому что мне нужно их сотрудничество.

Я пытался дать им понять, что они команда, которая создает продукт, а не отдельные лица, работающие над собственными проектами. Однако они не могли понять, что я имел в виду, и просто проигнорировали меня.

Теперь я думаю изменить свой подход: я хочу прямо заявить, что они делают ошибки, анализируя каждую ошибку, их причины и предлагая решения. Я хочу начать с низкого уровня (например, «этот фрагмент кода медленный/неправильный/неэффективный»), а затем медленно перейти к высокому уровню (например, итерации против водопада). Но я боюсь, что они подумают, что я нападаю на них, а это не так.

Это правильный подход? Как мне поступить?

РЕДАКТИРОВАТЬ 1: Судя по вашим ответам, это неправильный подход. Начиная с сегодняшнего дня, я буду продолжать подавать пример и прямо указывать на преимущества, которые приносят мои методы. (До сих пор я постоянно запрашивал обратную связь, но на самом деле никогда не задавал явных вопросов типа «Эй, тебе нравится, что я написал приемочные тесты? Как ты думаешь, они улучшат общее качество проекта?») Давайте посмотрите, работает ли это!

РЕДАКТИРОВАТЬ 2: Как я уже сказал, я начал подавать пример и разговаривать с товарищами по команде и с менеджерами. Результат? Меня назначили "главным рецензентом", т.е. теперь моя роль состоит в том, чтобы активно участвовать во всех технических дискуссиях, вносить предложения по архитектуре и устанавливать новые подходы к процессу разработки.

Вы лидер команды или как-то отличаетесь от других по званию? Во время вашего найма люди, которые вас наняли, указывали, что они наняли вас, чтобы каким-либо образом перестроить или улучшить свои процессы или просто быть еще одним разрозненным работником?
@KateGregory: меня наняли просто еще одним «рабочим бункера». С первого дня меня признали экспертом в своей области, и я заявлял о своих намерениях улучшить процесс разработки, однако большинство моих предложений просто игнорировалось.
Что обо всем этом думает ваш менеджер?
@jcm: до сих пор он слушал меня, но никогда не высказывал своего мнения по этому вопросу.
Вы смотрите на это неправильно. Похоже, у вашего руководства сложилось впечатление, что существующие процессы работают. Учитывая, что они нанимают, это также звучит так, как будто они правы. Изменение этого процесса — риск. Если вы хотите убедить их стать лучше, вам нужно продемонстрировать им, как более совершенные процессы могут обеспечить достаточную ценность для бизнеса, чтобы оправдать риск.
Этот вопрос был бы намного более уместным на Programers.stackexchange.com - на самом деле я прочитал там много очень похожих вопросов, которые могут вам помочь.
@Philipp маловероятно, см. Мета-ссылку Programmers в комментарии выше .
Я думаю, вы описываете большинство кодовых баз и большинство организаций.
Проблема здесь в том, что вы пытаетесь применить инженерное решение бизнес-проблемы. Это должно работать в идеальном мире, но не в реальности. Лучше всего превратить ваше инженерное решение в бизнес-решение. Помните, что вы и ваши коллеги были наняты по деловым причинам, а не для того, чтобы писать код самым удивительным образом.
Большое спасибо за то, что поделились тем, как вы изменили свой подход на основе отзывов сообщества, и как вы добились успеха! +1
Теперь, когда прошли годы, вы можете рассказать нам, что произошло?

Ответы (12)

тл;др

Это не техническая проблема, это проблема людей. Относитесь к этому как к таковому.


Я ничего не меняю!

Вы действительно плохо начали, и это не имеет ничего общего с кодом.

Похоже, вам не хватает навыков работы с людьми. Вы не начинаете браться за новую работу, рассказывая нынешней команде, насколько они плохи.

Люди не любят перемен. И им это очень не нравится от «новенького».

Я хочу начать с низкого уровня (например, «этот фрагмент кода медленный/неправильный/неэффективный»), а затем медленно перейти к высокому уровню (например, итерации против водопада). Но я боюсь, что они подумают, что я нападаю на них, а это не так.

Я не уверен, в какой культуре вы живете, но сказать кому-то «этот код неправильный, я лучше, и вы должны сделать это таким образом» всегда будет нападением.

Что делать?

  1. Перестаньте думать «я против них». Если вы не планируете уйти, вы являетесь частью этой команды. Это не те «ужасные разработчики» против «я суперзвезда», и если вы сообщите об этом своей команде, у вас будут проблемы. Никто никогда не будет уважать ваши идеи. Неважно, работает ли команда как отдельные личности. Это все еще команда, и вы даже описываете ее как таковую.
  2. Узнайте, оправдываются ли ожидания. Соответствует ли команда ожиданиям/желаниям руководителя? Если это так, вы не найдете ни у кого особой мотивации для улучшения. «Если это не сломано, не чини это». Но если команда изо всех сил пытается достичь целей по производительности, у вас есть другой подход к этому и вы можете представить все так: «Эй, мы не укладываемся в сроки — вы, ребята, хотите попытаться изменить это? помогите нам сделать это».
  3. Вы не менеджер, ваш босс. Похоже, вы хотите управлять всем процессом самостоятельно. Это отлично работает - для менеджеров/руководителей команд. Получение информации от вашего босса очень важно.
  4. Люди больше заботятся о результатах, чем о смутных чувствах. Ваш руководитель будет гораздо больше заботиться о вашей точке зрения, если вы действительно продемонстрируете, почему то, что вы говорите, лучше, чем текущее состояние. Не только «потому что так сказал интернет!» но на самом деле через демонстрацию.
  5. Попросите людей о помощи. Найдите способы укрепить доверие в команде. Обращение за помощью/руководством — очень простой способ сделать это. Даже если это незначительно, сделайте это со своей командой. Они будут уважать вас гораздо больше, если вы действительно покажете, что прислушиваетесь к их мнению.
  6. Подавать пример. Люди, которые не хотят меняться, обычно не воспринимают новую информацию и говорят: «Вы знаете, что вы правы, я никогда не считал, что то, как я это делал, было хуже, теперь я просветлен и должен изменить свои пути». Люди меняются, меняя мелочи, медленно, устойчивым образом. Вы можете продемонстрировать это.
  7. Выбирайте битвы с умом. Ваш пример звучит так, будто ваша основная проблема заключается в том, что в команде есть люди, которые плохо справляются со своей работой. Разве это так плохо , если код неэффективен? Влияет ли это на конечную производительность? Или сосредоточить следующий проект на итерациях, а не на водопаде (обратите внимание, что если вы сосредоточитесь на гибких методах, а не на водопаде, вам лучше привлечь к этому своего босса).
4 и 7 очень важны! Вы, вероятно, получите репутацию «чрезмерного инженера», и вам придется учитывать это предубеждение каждый раз, когда вы что-то поднимаете, и дополнительно убеждаться, что вы на самом деле не переусердствуете. Это справедливое беспокойство: «это чрезмерное убийство или нет»
«Просите людей о помощи» — по моему опыту, некоторые люди ненавидят, когда их просят о помощи.
№ 6, пожалуй, самый важный. Как разработчик, если я вижу фрагмент кода, который более эффективен или проще, чем тот, который я написал, я обычно возвращаюсь и изменяю его. К ситуации следует подходить почти как к учителю (но не совсем) — показывая, чем тот или иной кусок кода лучше и объясняя отличия.
Пункт 4 на самом деле должен звучать так: «люди больше заботятся о собственной интерпретации результатов».
«Неужели это так плохо, если код неэффективен?» Нет, но совсем другое дело, если в коде бардак . Это всегда проблема, когда код беспорядок.

Это не правильный подход. Все, что вы будете делать, это отталкивать ваших коллег. Насколько вам понравилось бы, если бы кто-то взял на себя анализ всех ваших ошибок?

Лучше всего работать с вашим менеджером или руководителем, и то, как вы это делаете, очень важно. Вместо того, чтобы указывать на все, что ваши коллеги делают неправильно, вы должны тщательно подготовить список способов, которыми, по вашему мнению, можно улучшить ваши процессы и какую выгоду получит ваша компания. Другими словами, не нападайте на людей — указывайте на то, что не работает в ваших процессах, и на то, что команда могла бы улучшить, если бы эти проблемы были исправлены.

Если менеджер видит и понимает ценность того, что вы говорите, он/она, скорее всего, примет меры; возможно, не совсем то действие, которое вы хотите, но, скорее всего, ситуация улучшится. Если нет, вы можете продолжать пытаться руководить по вдохновению, и, надеюсь, все наладится само по себе. Однако, если вы хотите сохранить какие-либо рабочие отношения со своими коллегами, не пытайтесь указывать им, как работать, если то, как они работают, не входит в ваши обязанности.

Ненавидь код, а не кодера :-)

Я бы определенно не стал начинать с низкого уровня — «этот код неэффективен» или тому подобное. Это просто вызовет большую оборону для очень небольшой выгоды.

Смешивать и сочетать agile-проект и водопадный проект безумно сложно. Специалисты водопада хотят заранее установить интерфейс между вашими проектами (формат файла, макет таблицы, API и т. д.), а затем уйти и написать в этот интерфейс. Вы хотите просто начать работу с максимально простым интерфейсом, частями, которые, как вы точно знаете, вам понадобятся, а затем прийти к ним и сказать, что вам нужно что-то добавить или изменить, и заставить их отреагировать на это. Для вас это ответственно, гибко и быстро, потому что вы не тратите вечность на споры о дизайне в то время, когда вы не можете знать ответы. Для них это ковбой, дергающий их, постоянно меняющий землю под собой. Это рецепт катастрофы.

Я предлагаю вам показать эту трудность следующему человеку, с которым вам предстоит работать. Обсудите это и вместе решите , будете ли вы сначала полностью разрабатывать свое перекрытие/взаимодействие вместе или начнете с простого и будете готовы изменить его по мере продвижения. действительно слушайк сопротивлению, которое вы получаете от другого разработчика. Они не ошибаются автоматически. Ловкость хороша, когда вы владеете всеми своими границами, но она может потребовать дополнительной работы, если вы этого не сделаете. В некоторых проектах эта дополнительная работа по-прежнему меньше, чем дни или недели размышлений и споров, которые привели к созданию неоптимального дизайна, с которым вы застряли. Но не на всех проектах. В этом случае может иметь смысл полностью спроектировать границу между вами и другим разработчиком, прежде чем кто-либо начнет. Тогда идите вперед и будьте гибкими внутри своего бункера.

Что касается более серьезной проблемы, то вы думаете, что они (а) пишут дерьмовый код, (б) должны быть такими же гибкими, как вы, (в) должны использовать согласованную и современную базу инструментов и (г) должны больше тестировать и больше обмениваться кодом между проекты - действуйте очень осторожно. Вы пытались просто быть великим и видеть, хотят ли они копировать вас, и они этого не делают. Мне совсем не ясно, видите ли вы для них выгоду от того, чтобы оставаться на том же пути, которым они были. Вы никогда не сможете убедить их изменить свой образ жизни, не понимая, почему (помимо инерции) они этого не делают. Вам, вероятно, также потребуется явная поддержка вашего менеджера, чтобы возглавить дискуссию по «лучшим практикам», которая кардинально изменит существующий код и научит этих разработчиков, как это делать с этого момента. Делать это самостоятельно? Они просто будут продолжать отмахиваться от тебя, потому что не

В прошлом я пытался придерживаться следующих принципов, и, похоже, это сработало хорошо:

  • Я заставил себя начать с «периода спокойного обучения»: в течение нескольких месяцев или около того,

    Молчи и учись. Не судите ничего. Интегрируйте себя в команду и компанию. Будьте продуктивны. Завоевать доверие и репутацию. Покажите свою компетентность.

    (Я полагаю, что вы уже пробовали подобный подход.) Часто вы видите вещи, которые считаете плохими, но через несколько недель понимаете, почему они такие, какие они есть.

  • Если вы замечаете проблемы или сталкиваетесь с вещами, которые, по вашему мнению, не оптимальны,

    Собирайте данные: часы, потраченные на простое изменение, всплывающие ошибки, рассылаемые гневные письма и т. д.

    Любое изменение, которое вы когда-либо планируете предложить, нуждается в фактах, чтобы показать, что оно необходимо и полезно. Я люблю делать записи в своем личном «дневнике» (одна из этих старых добрых чистых книг из настоящей бумаги).

    В одном из моих проектов у меня было ощущение, что внесение изменений было очень дорогим, в частности потому, что не было автоматических тестов, а ручное тестирование было очень громоздким. Поэтому я отслеживал часы, которые я тратил на каждую задачу, отделяя часы фактической реализации от часов тестирования.

  • Через некоторое время ваши наблюдения (или заметки) помогут вам

    Получите четкое представление о том, каковы основные проблемы. Найди их (только!)

    Я не могу себе представить, что вы можете сделать это «снизу вверх», как вы упомянули. Это скорее сверху вниз: возникает проблема, и вы пытаетесь найти ее основную причину.

  • Решайте только одну проблему за раз. Используйте имеющиеся у вас данные и попытайтесь

    Разработайте предложение по улучшению этой проблемы,

    показ проблемы и потенциального выигрыша с использованием ваших данных. Используйте удачный момент и выберите наименее обидный способ. Кроме того, постарайтесь предложить как можно меньшее изменение с наибольшим положительным эффектом. Небольшие изменения с большей вероятностью будут приняты/одобрены командой, чем большие.

  • Никогда не указывайте пальцем. Станьте ценным другом каждого члена вашей команды.

    Вы, кстати, тоже ошибаетесь. И я думаю, что чаще всего плохие вещи, с которыми вы сталкиваетесь, не были «сделаны» «плохим парнем». Они развились, потому что никто не позаботился о том, чтобы предотвратить это. Всегда полезно не обвинять людей в проблеме, а заняться процессами, тем, как команда работает вместе и т. д.

Хороший ответ, но одного месяца вряд ли хватит, чтобы завоевать доверие и репутацию, если только вы не стремитесь к развитию недоверия и плохой репутации. Шесть месяцев, когда вы абсолютно сияете, или хотя бы год, если вы просто наравне со всеми остальными, гораздо более подходящее время.
@Dunk - Полностью согласен. Но это не значит, что нужно целый год «молчать» и «ни о чем не судить». Но, конечно, абсолютно разумно продолжать обдумывать, даже когда вы начинаете пытаться что-то изменить. Быть учтивым, сиять и развивать доверие — это то, что вы не должны даже останавливаться ни в какой точке.
: Я согласен, что вам не нужно молчать, но вы определенно не хотите быть критичным. Вы должны очень хорошо осознавать, что предложение от кого-то, кого вы едва знаете, с гораздо большей вероятностью будет отвергнуто, чем когда оно исходит от кого-то, кто уже доказал свою компетентность. Поэтому сначала докажите свою компетентность, прежде чем пытаться внести изменения. Кроме того, критика процессов компании, когда вы еще не знаете общей картины, имеет огромное значение для создания себе репутации всезнайки, некомпетентного шута, от которой потребуется гораздо больше года, чтобы избавиться от нее, если вы сможете избавиться от нее. это вообще.
@Dunk Я все еще полностью согласен. Я немного улучшил свой ответ. В частности, я изменил «1 месяц или около того» на «несколько месяцев или около того». У меня был опыт в прошлом, когда я знал, когда начинал, что пробуду там только 4-5 месяцев, поэтому я «поторопился», выполняя шаги, описанные выше, но это оказалось очень хорошо. Через 1 месяц я поднял вопрос о ручных тестах, и вся команда была чрезвычайно заинтересована и благодарна за вклад. Но это во многом зависит от ситуации.

Добро пожаловать в мир бизнеса.

Изменения требуют времени. В крупной компании могут пройти десятилетия, если то, что у них есть, работает достаточно хорошо (и действительно могло быть ведущим в отрасли много лет назад, когда они приняли эти методы). Работая в IBM, я до сих пор использую некоторые инструменты, бэкенды которых восходят к эпохе «зеленого экрана», потому что они ДЕЙСТВИТЕЛЬНО работают, тесно интегрированы с другими инструментами (и, следовательно, их трудно заменить по отдельности), и потому что никто не нашел достаточно средств и времени, чтобы инвестировать в переход таким образом, который не связан с неприемлемым риском.

Аналогичные проблемы возникают и на уровне деловой практики. Смена инструментов сопряжена с риском... либо риск недооценить затраты и не выполнить свои обязательства, либо риск переоценить их и выглядеть недостаточно агрессивно. Менеджмент хочет иметь возможность делать прогнозы, поэтому они могут бояться брать на себя обязательства и придерживаться того, что у них есть.

Изменения могут произойти, но они должны начинаться с малого и строиться наружу. Вы начинаете с того, что показываете пример того, как новый подход помогает ВАМ в течение длительного периода времени. В конце концов у вас будет достаточно доказательств, чтобы убедить лидера команды попробовать это в небольшой группе (или вы станете руководителем команды, который может это сделать), таким образом, чтобы это не оказало негативного влияния на остальную часть компании. Стройте наружу оттуда. Ожидайте, что изменения потребуют времени; линкоры не стартуют, не останавливаются и не разворачиваются очень быстро.

То же самое с качеством кода и методами кодирования. Помните, что согласованность (способность читать и поддерживать код друг друга) превыше всего, и научитесь работать со стилем кодирования, который они предпочитают. (Хороший программист может читать почти любой стиль — хотя парень, который считал, что точки с запятой должны стоять перед операторами, возможно, был исключением.) Помните, что если вы поддерживаете существующий код продукта, вам нужно свести к минимуму риск введения нового кода. ошибки, а это означает, что локальные исправления предпочтительнее, если вы не можете продемонстрировать Веские причины, по которым более крупные исправления будет легче создавать, легче поддерживать и они будут иметь преимущества для клиентов. Чтобы представить это в перспективе, помните, что многие клиенты используют код многолетней давности, а не последнюю версию, и обновляются только тогда, когда это абсолютно необходимо, именно потому, что они не нужны.

И да, минимальные исправления приводят к уродливому коду. В конце концов, это будет исправлено, но не раньше следующего крупного релиза и только в том случае, если в старом коде действительно возникнут проблемы.

Когда появляется возможность реализовать что-то новое, ТОГДА вы можете рассмотреть возможность использования преимуществ нового подхода. Но техническое обслуживание по определению связано со старыми процессами и меняется очень медленно. К сожалению, для принятия академических передовых практик требуется много времени... и часто к тому времени, когда они появляются, что-то еще является новейшим и лучшим.

Делайте это по одному небольшому изменению за раз, пока/если вы не будете в состоянии реализовать более крупные изменения. Покажите, а не просто расскажите. Будьте терпеливы и настойчивы. Помните, что вещи такие, какие они есть, потому что они ДЕЙСТВИТЕЛЬНО работают, и научитесь управлять текущей системой достаточно хорошо, чтобы вы могли точно объяснить, каковы преимущества и риски перехода.

Или займитесь рискованным делом — создайте собственную компанию и действуйте по-своему… и вы быстро поймете, почему все так нервничают из-за рисков, которые еще не знают, как их измерить; придет какой-нибудь молодой панк с модным на этой неделе подходом, и вам придется объяснить ему, что компании нужно дождаться чистой возможности сократить... а пока вам нужно, чтобы он поработал над тем, что у вас есть сейчас , и если он не может этого сделать, у него нет будущего в компании.

Пока хорошие ответы, особенно от Роджера, Эндерленда♦ и Кейт Грегори, но я хотел бы добавить к этому.

TLDR

Начните с методологий высокого уровня, потому что они приведут к более высокому качеству низкоуровневой части. Дайте вашему руководителю и вашим коллегам понять, что они выиграют от добавления высокоуровневых методологий, заставьте их захотеть, чтобы это изменилось , единственный способ изменить их культуру — заставить их захотеть ее изменить .

Оригинальный ответ

Я предлагаю, чтобы вместо того, чтобы начинать с критики неэффективного кода ваших работодателей, вы начали медленно, сотрудничая с вашим менеджером, с новыми методологиями, одна за другой, где выгода каждого шага подробно объясняется. Корпоративная культура может измениться только в том случае, если работодатели захотят ее изменить , понимая, почему она должна меняться , и в конечном итоге захотят ее изменить .

Предлагаемый порядок методик:

Standups - Старт очень медленный

Начните со стендапов . Если вы сможете объяснить своему руководителю и своим сотрудникам, что миграция информации о том, что делается , кем и в каком проекте , снижает вероятность того, что ваша компания потерпит неудачу, если кто-то внезапно не сможет продолжать свою работу, что сделает ее затруднительной. жопа для следующего работодателя, который должен забрать его работу. Если ваши коллеги думают, что им будет проще взять на себя чужую работу путем переноса информации, потратив на это всего пять минут в день, то это потенциальное начало.

TDD — они по-прежнему могут заниматься своими делами, но более структурированным образом.

Думаю, это хороший следующий шаг. Трудно и почти бессмысленно выполнять модульные тесты для унаследованного кода (на самом деле, определение, по мнению некоторых экспертов, унаследованного кода — это кодовая база, в которой либо нет, либо мало модульных тестов), но написание модульных тестов для новых методов гарантирует что новые методы на самом деле будут делать то, что от них ожидают — в результате будет меньше ошибок, о которых должны думать разработчики, меньшие расходы для компании (ваш менеджер должен знать об этом), и это формирует поток систем, а не наоборот. Прочтите о разработке через тестирование (TDD) и узнайте, какTDD облегчит жизнь вашим коллегам, и в конечном итоге они это сделают, тем более что они могут делать это самостоятельно и им не нужно взаимодействовать с кем-либо еще, кто это делает. Самая важная часть заключается в том, что модульный тест может быть написан за считанные секунды или минуты, если он сделан заранее, что делает его не таким скучным и на самом деле неэффективным и бессмысленным, если он написан позже.

Изобретите концепцию SOA — избавьтесь от сильно связанных систем

Сервис-ориентированная архитектура (SOA) обеспечивает слабосвязанную архитектуру, которая позволяет легко заменять модули и обслуживать их кем угодно, не требуя каких-либо знаний о других частях системы. Спросите своих коллег, готовы ли они поддерживать чью-либо сверхсильно связанную систему после пяти лет разработки и сопровождения, и спросите их, заинтересованы ли они больше в том, чтобы понимать каждую концепцию в системе, или они предпочли бы нужно только понимать очень небольшие подмножества системы, даже позволяя им переписывать эту очень конкретную часть с нуля, если они хотят, потому что это возможно только с супер объектно-ориентированной или SOA-архитектурой.

Code-review — перенесите знания без необходимости слишком много взаимодействовать с другими

Вы можете спросить своих коллег, хотят ли они быть более ценными. Наличие знаний о различных системах делает их более ценными. Он переносит риск, который очень понравится вашему работодателю, и дает вашим коллегам большое преимущество, если один из них не может продолжать свою работу. 15 минут в день многое изменили бы, и вы позволили бы им указать на недостатки друг друга, не выставляя себя плохим парнем , если только не ваша очередь делать обзор, тогда все в порядке, потому что вы должны были делать обзор код.

Список можно продолжить

Смысл в том, чтобы начать с материала высокого уровня; это приведет к более высокому качеству материала более низкого уровня.

То, что я сказал о каждой вещи, возможно, не убедит всех, но ключ в том, чтобы ваши коллеги захотели измениться, иначе они этого не сделают. Пусть они увидят , почему они должны измениться, найдя привлекательные части методологий высокого уровня, и все улучшится.

Хоть я и являюсь большим поклонником стендапов, TDD, SOA и Code-review, рискну утверждать, что многое зависит от ситуации, какие моменты нужно изменить и в каком порядке или приоритете это нужно делать. У меня лично были подобные списки в моем «дневнике» (см. мой ответ), но я обнаружил, что эти темы не обязательно продвигать и отмечать галочкой одну за другой. Имея это в качестве цели, вы можете сделать себя скорее жалующимся все время парнем, чем «ценным другом» (опять же, см. Мой ответ) для команды - учитывая тот факт, что вы / ОП не в должность руководителя группы (пока).
Мне нравится ваш список, и я бы добавил еще один. Хотя я НЕ фанат парного программирования, в данном случае это может быть полезно. Объединяйте программистов в пары и чередуйте программистов между парами каждую неделю или две, чтобы лучше понять проект в целом, то, как их части вписываются в него, и где могут быть возможности для повторного использования кода, чтобы избежать повторного изобретения колес. Я нахожусь в магазине, который делает это... не идеально, но может предложить некоторые преимущества.
@AnthonyX Действительно, это во многом зависит от ситуации. Важно, чтобы пары обладали одинаковым набором навыков и находились на одном уровне, чтобы понимать друг друга, в то время как, по крайней мере, одна из них должна быть в состоянии принести что-то новое, чтобы другая могла учиться, предпочтительно в обоих направлениях.

Вы назвали три проблемы. Большинство из них звучит как приемлемая передовая практика (в этом нет ничего плохого), но есть одна, на которой, я думаю, вам следует сосредоточиться, потому что она может быть основной проблемой, которую увидят все в компании: «В целом процесс разработки идет медленно. ..."Вы еще и причину приводите, неэффективно.

Слово «гибкий» используется повсюду, но, как и все это, оно относительно. Вы должны сосредоточиться на некоторых реальных проблемах, которые есть у всех. Сколько времени занимает обработка запросов на изменение? Являются ли изменения неполными, т.е. «Новое исправление появилось в разделе A, но не появилось в разделе B. Почему бы и нет?» Это то, что волнует пользователей. Вы получите больше поддержки от остальной компании, если результаты предложенных вами изменений принесут им пользу. Конечно, возможность реализовывать вещи быстрее может быть лучше для всех.

Вы упомянули повторяющийся код. Среди программистов это запрещено, но для более крупных проектов, особенно с большим количеством унаследованного кода, рефакторинг будет непростым делом. В теории это звучит здорово, пока вы не обнаружите, что никто не собирается выделять команде время на это в ущерб текущим запросам. Привести аргументы против технического долга непросто.

В качестве начальной задачи попробуйте собрать команду и обсудить разработку стандартов кодирования. Вы новый человек, так что вы узнали это сразу. Посмотрите, какая у всех реакция. Вы можете получить отказ, потому что они не могут согласиться или «мы пробовали, но никто не подчинился». Может быть, нынешний беспорядок является достаточной мотивацией, чтобы все захотели что-то с этим сделать. Опять же, вы можете не успеть.

Если вы видите, что этой группе трудно ладить, начните с чего-нибудь простого; идите вместе обедать. В этих неформальных ситуациях вы можете обнаружить, в чем заключаются настоящие проблемы. Это может быть недостаток знаний или, может быть, среда, созданная в этой компании, больше связана с тушением ежедневных пожаров.

Не сдавайтесь, но и не ждите, что ситуация изменится за одну ночь. Перед тобой стоит важная задача, мой друг.

+1 за обед — неформальные ситуации имеют большой потенциал, потому что никто не боится сделать шаг назад из проекта и поболтать о том, как все идет. Во время работы резервирование времени для таких вещей (к сожалению) часто считается ненужным/не может себе позволить, и для новичка, который не играет ведущей роли, может быть слишком смело резервировать время другого члена для такого дела.
С другой стороны, вполне возможно, что не все в команде с энтузиазмом посвящают обеденное время обсуждению этого вопроса. Это во многом вопрос как личности, так и корпоративной культуры.
@MichaelKjörling — Вот почему я бы не стал прямо говорить: «Давайте пообедаем, чтобы поговорить о работе». Этой группе нужно собраться и о чем-то поговорить. Чтобы перейти к рабочей теме, может потребоваться несколько обедов. В большинстве мест, где я был, где коллеги собирались за обедом, нам в конце концов приходилось заставлять себя перестать говорить о работе.

Если ваша работа не состоит в том, чтобы изменить их методы работы И у вас есть это в письменной форме, не делайте этого, потому что, как говорили другие, это не сработает.

Человек, который должен это делать, — ваш менеджер. Он тот парень, которого нужно убедить. Попробуйте прагматично апеллировать к эффективности с примерами.

Если он не заинтересован? Научитесь с этим жить (и убедитесь, что ваша задница прикрыта) или найдите другую работу. Это ужасно, я знаю. Был там.

(Возможно, дело не в людях, а в политике — иначе кто-то давно бы подхватил их на этих практиках.)

Похоже, вы действительно знаете, что делаете, но будьте осторожны, чтобы не ошибиться со своими новыми коллегами. Если вы так хороши, вы сможете внести положительный вклад в репозитории каждого человека. Лучшие программисты, скорее всего, не будут возражать, если вы улучшите их код, поэтому, если вы можете работать с ними, сделайте это. Те, которые отвергают ваши улучшения, вероятно, не те типы, с которыми вы хотите работать.

Но слово предупреждения: будьте абсолютно уверены, что ваши вклады не имеют негативных последствий. Если в ваших предложениях есть недостатки, вы будете обвинены, если что-то пойдет не так.

Мой личный стандарт заключается в том, что я настаиваю на том, чтобы любые изменения, которые я делаю в коде, разработанном другими, где я не занимаюсь архитектурой, не имели абсолютно никаких недостатков (или, если существуют потенциально неосязаемые недостатки, т.е. «это более читабельно?», что они минимальный.) Используя это как мой стандарт, я все еще могу:

  • рефакторинг кода, написание и улучшение юнит-тестов, создание более конкретных исключений
  • исправлять ошибки, возникшие из-за использования устаревшего кода, и заменять структуры, которые выводятся из эксплуатации более новыми конструкциями.
  • сократить количество строк кода за счет использования встроенных функций и методов, соответствующих варианту использования, повысить эффективность кода за счет исключения материализации структур данных там, где это не требуется, и заменить неудобный поток управления более оптимизированным потоком управления
  • улучшать строки документации/документацию (от орфографии до семантики) и вносить улучшения в стиль кода (поскольку у нас есть руководство по стилю!)

И все вышеперечисленное я делаю без изменения входов и выходов установленного кода, так что в продакшене ничего не ломается.

Делая это, вы можете создать репутацию человека, знающего свое дело. Делая это, вы завоюете доверие работников умственного труда, с которыми работаете. Если вы сможете заменить неуклюжие или плохие компоненты более качественными, они оценят вас еще больше. Завоевав доверие, вы разовьете свою способность убеждать их принять методы, которые, по вашему мнению, принесут большую отдачу.

Я был в похожей ситуации дважды и, как и многие другие, обнаружил, что нет абсолютно никакого способа улучшить ситуацию, если только ваши коллеги не захотят измениться.

Есть простой способ проверить, хотят ли они, предложить команде пойти на конференцию или пройти курс по соответствующим предметам программирования. Могут быть даже группы пользователей или даже общие группы по интересам в области программирования, которые время от времени проводят открытые встречи, которые ваша команда может посетить. Предложите людям почитать какой-нибудь материал или видео (видео дяди Боба прекрасно работают в этой ситуации).

При этом вам не нужно указывать на какие-либо проблемы или ошибки, которые, по вашему мнению, они делают, ответ команды на эти предложения расскажет вам все, что вам нужно знать о том, насколько они заинтересованы в улучшении вещей. Если они с энтузиазмом относятся к этим вещам, у вас есть шанс, если они не заинтересованы, вы должны избавить себя от страданий и уйти оттуда как можно скорее.

Хороший вопрос, хотя и не ответ на вопрос.
Я согласен, что это не дает прямого ответа на вопрос, но прежде чем ОП сможет даже начать поднимать проблему, он должен выяснить, есть ли у него шанс добиться чего-либо с этим. Если коллеги заинтересованы в обучении, ему даже не придется указывать на проблемы, они сами их увидят.

Вы должны думать о том, что мотивирует людей. «Мне было бы легче заменить вас на вашей работе, если бы вы придерживались следующих практик: «не является большим мотиватором: большинство людей не хотят, чтобы их заменяли. Затраты дополнительных усилий на кодирование таким образом, чтобы его брал на себя кто-то другой , имеют свою ценность даже вне философии найма и увольнения, поскольку код, не привязанный к конкретным людям, позволяет более гибко реагировать на изменение рабочей нагрузки.

Но в ситуации «никто, кроме $x, все равно не будет трогать этот код до завершения проекта», вопрос о возможности сопровождения кем-либо и усилиях имеет разные ответы.

Что касается повторного использования кода: одна из философий C++ заключается в предоставлении инструментов для создания универсальных решений. 95% «повторно используемого кода», создаваемого начинающими программистами, не используется повторно. И причина этого в том, что для многих простых задач стоимость «повторного использования» для опытного программиста выше, чем простое списание, специально ориентированное на рассматриваемый код.

Если вы скажете автору бестселлеров, что он может удвоить свой результат, используя ваши текстовые шаблоны, которые уже предварительно проверены на наличие орфографических и грамматических ошибок, и ему просто нужно вписать правильные имена собственные и глаголы, а вы также параметризовали ряд места для наречий — представляете, как он будет взволнован?

Вы можете себе представить, как он будет рад, если кто-то другой сможет поддерживать его роман, если он будет правильно задокументирован и параметризован?

И никто не хочет обращаться к руководствам и документации для каких-то тривиальных вещей, которые он может записать, что, по крайней мере , требует меньше времени и уж точно требует меньше умственных усилий.

Если у вас есть высококвалифицированная команда строителей органов, работающих над одним инструментом, вы обнаружите, что у каждого есть свой личный набор инструментов, который он сам оттачивал годами. И у каждого свои особенности и фирменные стили работы.

Если вы скажете: «Вот руководство. Мы решили, что будем стандартизировать инструменты Пола. Мы купили/изготовили 20 наборов инструментов, точно таких же, как у Пола, и теперь все будут работать с ними в будущем». Даже если все согласятся с тем, что Пол — лучший мастер по изготовлению органов в компании, мало кто обрадуется такому изменению. Инструменты, скорее всего, не будут работать хорошо для неопытных строителей, и они будут работать иначе, чем их собственные инструменты для опытных.

Даже Пол не будет счастлив, потому что все будут бежать к нему и обвинять его.

Смысл команды не в том, что всех можно заменить, а в том, что они умеют работать как единое целое. Если вы пытаетесь свести процессы к наименьшему общему знаменателю, которым вы довольны, вы не улучшите производительность или рабочий моральный дух.

Развивайте свой стиль. Сыграйте свою роль в команде. Если вы делаете это хорошо и убедительно, в конечном итоге это приведет к «давайте спросим пользователя 1807, это звучит так, как будто он что-то заранее упаковал в свой набор трюков».

То, что вы должны проверить после того, как проведете там около полугода, это не то, как выполняется работа, а то, как она передается: чувствуете ли вы, что общение/встречи команды происходят таким образом, что действительно существенные колеса не рискуют быть заново изобретёнными очень дорого ?

Но для того, чтобы сформулировать это таким образом, чтобы люди согласились с вами, включая «мы могли бы и мы будем работать лучше», вам потребуются годы, чтобы прийти к этому.

Делайте вещи, как командный игрок, по-своему. Вы увидите, как это помогает проектам или нет, другие увидят, как это поможет проектам или нет. Люди учатся, и вы в том числе. И управление.

Делать что-то постоянно иначе, чем вы склонны, — это вопрос дисциплины. Самодисциплина — это хорошо, но вы не в том положении, чтобы дисциплинировать других.

Если руководству станет очевидно, что это хороший шаг, вы в какой-то момент станете руководителем группы. Нет смысла подталкивать руководство к такому результату: тимлид, не принятый командой, не добьется ничего непопулярного. Вы получите каменные стены. Так что будьте хорошим руководителем команды для себя и хорошим членом команды для других.

Создатели органов и романисты? Худшие аналогии.

Проблема №1: множество индивидуумов

Если разработчик может предоставить и поддерживать согласованный API, зачем заботиться о соглашениях? Это человек, который знает код. Никто больше не собирается поддерживать реализацию. Заботьтесь в основном об API.

Проблема №2: изобрести велосипед

Действительно это проблема. Общий код должен быть разделен в репозитории компании или команды. Это должно быть решено в ходе нескольких специальных встреч со всей командой.

Проблема №3: ​​нет гибкости

Пожалуйста, признайте, что agileэто не единственный правильный подход к разработке программного обеспечения. Это гарантирует посредственных разработчиков .

Ваш последний пункт в лучшем случае путает Agile и Scrum.
@PhilipKendall как? AFAIK scrumявляется частью agile.