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

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

В результате наш код имеет «групповую собственность» — никто ничем не владеет, и никто ни за что не отвечает. Или, другими словами, всем принадлежит все, и каждый за все отвечает. Если что-то сломается, любой может быть отправлен тушить пожар, независимо от того, кто создал проблему. Если вы откроете код, он будет довольно хаотичным, потому что разные люди по-разному делают что-то. Более того, исправление чужого кода, не тратя много времени на его понимание, быстро заканчивается появлением патчей за патчами. Это никогда не беспокоит наших начальников, потому что они ориентированы на результат; т. е. они никогда не утруждают себя просмотром чего-либо на уровне кода.

Кто-то может не поверить, но это абсолютная правда, и мы чисто софтверная компания!

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

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

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

Это обычное дело для софтверных компаний? Как бы вы предложили мне сообщить плохие новости этим (невежественным) парням, что программирование сильно отличается от кладки кирпичей, не смутившись, а также убедив их, потому что они оба твердо убеждены, что каждый должен нести ответственность за все?

Ура, ребята, здесь много болтовни и дискуссий. Имейте в виду, что комментарии не предназначены для расширенного обсуждения — все перенесено в чат . Пожалуйста, продолжайте мета-обсуждение и в этом чате. Спасибо!

Ответы (13)

Я бы сказал им, что они правы, так как же мы собираемся достичь этой цели на практике?

В принципе, это похвальная и достижимая цель. Давайте посмотрим на особенности:

Если каждый разработчик работает изолированно на своем собственном маленьком острове со своим собственным стилем и независимо делает свой собственный выбор, это прямой путь к катастрофе. Как их работа будет интегрироваться с работой других? А если они заболели или в отпуске? Что, если, не дай бог, они попадут в аварию и не смогут работать или даже умрут? Если он единственный человек, который знает, как работает его код, и его коллегам требуется значительное время, чтобы понять работу этого человека, это угрожает преемственности компании! (Иногда это называют фактором автобуса ) .

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

Так что же нужно сделать, чтобы добиться работоспособной ситуации?

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

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

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

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

  • все они используют один и тот же набор причесок

  • все они режут методами и инструментами, которые либо одинаковы, либо, по крайней мере, эквивалентны

  • они документируют свой прогресс в стрижке, используя согласованную систему, отмечая, что они сделали, как они это сделали и почему они сделали это именно так

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

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

Если достижение цели А означает затрату большого количества времени, усилий или денег на решение проблем X, Y и Z, то это может не стоить усилий, но это решение должно принять руководство, поэтому наша работа как сотрудников состоит в том, чтобы предоставить предоставить им необходимую информацию для принятия обоснованного решения.

Ура, конструктивный ответ, предлагающий конструктивное решение.
Было бы хорошо, если бы вся управленческая команда также могла поменяться местами. Президент вышел? Без проблем.
«Было бы хорошо, если бы вся управленческая команда тоже могла поменяться местами» , Ха-ха, это хорошо, очень хорошо.
«Если он единственный человек, который знает, как работает его код, и его коллегам требуется значительное время, чтобы понять работу этого человека, это угрожает преемственности компании!» Мой босс называет это Bus Factor .
@PatrickRoberts Спасибо за это, я добавил это в ответ.
Это фантастический ответ! Я рекомендую руководствоваться тем, что каждый фрагмент принятого кода сначала должен быть понят как минимум двумя разработчиками. Это могут быть кодер и рецензент или просто пара программистов, которые написали это вместе. Теперь смешивайте пары достаточно часто, и у вас будет хорошая сходимость в том, как вы кодируете.
Превосходно. Моей первой мыслью при прочтении заголовка вопроса было: «Они правы». Конечно, это упрощенно, но вы хорошо это описали. Нет, мы не каменщики, но многое из того, что мы делаем , взаимозаменяемо, и именно благодаря стандартам это работает.
Писать код немного сложнее, чем подстригать волосы. Лучшей аналогией может быть проектирование здания. Один архитектор уходит, а другой приходит и заканчивает. Если бы первый архитектор закончил рисовать только 95% несущих балок, второй архитектор должен был бы это заметить. Это может быть неочевидно. Потребуется много общения.
Возможно, добавьте немного к ответу, чтобы указать, что совместное владение требует времени. Если ваши начальники хотят, чтобы у вас была совместная собственность, они должны дать вам время, чтобы вы пришли к единому мнению. Вы не можете иметь совместную собственность, если вся команда все время тушит пожары. Членам команды должно быть разрешено встречаться самостоятельно без присутствия или вмешательства руководства.
@PaulRowe В основном это то, что я имею в виду, когда говорю о «обмене знаниями». Я посмотрю, смогу ли я найти способ прояснить это.
@superluminary, поэтому вам нужен один архитектор, который в конечном итоге отвечает за проект от начала до конца. Ваш пример очень уместен, эти недостающие балки могут буквально быть разницей между тем, будете ли вы делать человеческие блины или нет. (Что произойдет, если в подсистеме контроля тяги возникнет необработанное исключение? Я очень рад, что ни одно из моих программ никогда не могло потенциально убить кого-либо напрямую)
@superluminary не стоит недооценивать обучение и навыки, необходимые для продвинутой стрижки.
Действительно? Вы сравниваете стрижку или парикмахерскую с кодированием? Нет никакой логики, присущей стрижке волос, это нелепое сравнение.
@lambdapool Я не провожу буквального сравнения между ними и не утверждаю, что они равны. Я просто делаю абстракцию, чтобы проиллюстрировать свою мысль о том, что два сотрудника с одинаковыми базовыми навыками должны быть в состоянии закончить работу друг друга, и что процесс разработки должен создавать необходимые вещи, чтобы это стало возможным. Не воспринимайте все буквально. Любая аналогия не работает, если вы смотрите на нее с определенной точки зрения, что не снижает ее ценности как инструмента, позволяющего взглянуть на проблему с другой точки зрения.
@superluminary Я думаю, что сравнивать лучше с врачами - хотя мы все знаем основы, после определенного уровня знаний мы специализируемся, поэтому, поскольку уролог не будет знать о мозге почти столько же, сколько невролог, я мог бы быть DB специалист с ограниченными навыками клиентского javascript.
Я бы сказал, что разные стили причиняют огромную боль. Если вы относитесь к разработке программного обеспечения как к инженерному делу, не должно быть много места для субъективности. Решение является правильным или неправильным в данном контексте. По крайней мере, просмотр кода — хороший инструмент для обсуждения некоторых спорных подходов. Очень сложно вспомнить ситуацию, когда я не мог понять, КАК работает код. Обычно гораздо сложнее понять, ПОЧЕМУ код работает именно так. Будь то фича или баг. PS Хороший разговор о стиле кода: vimeo.com/97329157

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

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

То, что существует общий стандарт кода, — это даже не вопрос гибкости, это просто здравый смысл.

+1. Я думаю, что ОП пытается решить не ту проблему - совершенно ясно, что нет связи ни внутри разработчиков, ни между ними и руководством. Менеджер всегда должен иметь возможность попросить кого-нибудь подобрать разработчика в отпуске; поэтому им необходимо организовать (и при необходимости обеспечить) обмен знаниями.
Я согласен с вами обоими. Ожидаемые практики хороши, и они пытаются подтолкнуть вас к использованию этих методологий, теперь должен произойти сдвиг сознания. Команде необходимо найти способ поделиться этими знаниями, используя код-ревью, дизайн-ревью, парное программирование и вообще — общаясь друг с другом.
@SigalShaharabani Вероятно, более важным, чем « Команда должна ... », является « Руководство должно позволить команде ... » и признать, что производительность сильно пострадает, пока это произойдет.
@TripHound Ну... не совсем. Руководству все равно и никогда не будет, просто так обстоят дела. Разработка — это обязанность разработчиков — это их повседневная работа. Ключевой момент заключается в том, чтобы продолжать работать, пока вы вносите эти изменения — учитесь на опыте таких компаний, как Netscape/Mozilla. И ни в коем случае не рассматривайте «код-ревью, парное программирование...» отдельно от разработки. Если тесты не зеленые, код не готов. Если сборка не запускается, код не готов. Если код не был проверен, он не готов. Это сильно облегчит вам жизнь :)
@TripeHound Не только разрешать, но и поощрять и облегчать обмен — похоже, что прямо сейчас все кодеры, выполняющие эту задачу, просто делают то, что они «считают» правильным, и не обращаются друг к другу за советом или делятся своими мыслями. планирование не потому, что они считают, что это не улучшит их производительность, а потому, что они получают вознаграждение только за конечные результаты. Программисты могут сделать больше, если захотят, но поощрять такое поведение — задача менеджеров.
@Zibbobz (и @Luaan) Это и то, и другое: разработчики должны хотеть внести изменения, в идеале во главе с кем-то, кто знает, как внести это изменение (не то же самое, что кто-то, кто знает пункт назначения); руководство должно поощрять это изменение и осознавать/признавать, что во время такого изменения производительность, вероятно, упадет.
Кто-нибудь на самом деле занимается парным программированием или это просто то, что мы используем в качестве примера хорошей практики?
@djechlin Да, иногда. В основном, когда выпускники/юниоры присоединяются к моей команде, чтобы ввести их в курс дела, научить хорошим практикам и поделиться глубокими знаниями.
@djechlin Да, сейчас я работаю в очень гибкой команде, где мы объединяем программы и регулярно проводим проверки кода. Это действительно улучшает качество и расширяет возможности обмена знаниями. Но вам нужна команда И руководство, которое это позволяет и поощряет.
Коллективное владение — это хорошо, но если код выходит за рамки тривиального, потребуется время, чтобы загрузить его в голову. Если мы имеем дело с архитектурой, возможно, потребуется день или два, чтобы понять ее.
@superluminary, поэтому имеет смысл разделить вещи на подсистемы хорошего размера и позволить людям работать над каждой подсистемой ... индивидуально. Каждая подсистема, вероятно, не будет отличаться от мужчин с Марса и женщин с Венеры. Обзоры кода / обзоры архитектуры должны гарантировать, что никто не строит свои собственные острова боли из снежинок.
@ChrisMarisic - Вы не найдете меня несогласным с этим. Для передачи информации о том, что было завершено в этой подсистеме, а что нет, по-прежнему требуется много коммуникаций. Какие исключения он может генерировать? Как мы справляемся с состояниями ошибок? Что делать, если сеть отключается во время обновления? Какие тесты пишутся? Какие тесты нужно написать? Коммуникация является жизненно важной частью гибкой команды, но, похоже, здесь она отсутствует.
@superluminary некоторые люди намного мудрее меня описали ответы на эти вопросы как уровень зрелости организации. Наличие четких и определенных ответов на эти вопросы показывает приверженность деталям и документации, это действительно важная информация, в отличие от более чем половины «документов», выпадающих из проекта программного обеспечения.

Я думаю, что проблема в вас, а не в ваших менеджерах.

разные люди по-разному делают что-то

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

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

Я думаю, что суть проблемы в том, что вы должны начать больше работать в команде.

И если вы не можете попасть туда как коллеги, это должно сделать руководство, им за это платят.

Как это проблема с ОП, а не с менеджерами? ОП должен иметь возможность принимать разные стандарты кодирования, но должен ли он следовать стандартам, которые использует Боб, или тем, которые использует Билл?
@Taemyr Боб, Билл и ОП должны собраться вместе и согласовать стандарты кодирования. Работа менеджеров состоит в том, чтобы этот процесс произошел, если Боб, Билл и ОП не могут.
+1 за «установить стандарты кодирования, начать работать с дизайном». Совместное владение кодом является стандартом. Это проблема только тогда, когда программисты говорят на «разных языках».
«Я думаю, что суть проблемы в том, что вы должны начать больше работать в команде». => Нам ДЕЙСТВИТЕЛЬНО нужна кнопка "+100" для отдельных предложений на этом форуме.
Я никогда не работал в команде, которую я не возглавлял, где кто-то, кроме меня, хоть немного заботится о кодировании таким же образом. Как вы предлагаете, чтобы OP заставил всех согласиться и следовать стандартам кодирования, предполагая, что он / она не является руководителем группы?
@AmyBlankenship Вот почему я сказал, что это управленческая работа. Одна вещь, которую я хотел бы для программистов, это чтобы они посещали курс экономики или два. Это значительно облегчит общение с руководством. Что вам нужно сделать, так это объяснить руководству (на их языке, не вдаваясь в эмоции), сколько стоит каждый заниматься своим делом.
Где в вашем ответе вы говорите, что задача управления состоит в том, чтобы заставить программистов устанавливать стандарты кодирования, работать с дизайном и становиться взаимозаменяемыми? Может быть, вам следует отредактировать его, чтобы он выделялся.
@AmyBlankenship последняя часть моего поста была: «Теперь есть работа, которую должно выполнить ваше руководство». Так и имелось в виду, я отредактировал пост и уточнил. И я не имею в виду, что руководство должно устанавливать стандарты кодирования, а заставлять команду работать как одна команда.
Вы сказали: «Мы получаем документ... (говоря), где находится документация». РЖУ НЕ МОГУ. А если не найдут?
IME, вы не сможете заручиться поддержкой других программистов для установления стандартов и т. Д. Без сильной поддержки со стороны руководства. Человек, не являющийся руководителем группы, не сможет реализовать ваш ответ. У меня такое ощущение, что ваша команда уже делала вещи, которые вы описали, когда вы присоединились, и вы не видели команду, в которой они не были бы сделаны или участвовали в их реализации.
Сначала, когда я читал, я думал, что ОП говорит, что люди используют разные языки программирования, поэтому это казалось таким хаотичным. Но теперь, когда я думаю, что это вопрос стиля кодирования, на самом деле речь идет о том, чтобы разработчики собирались вместе, делились знаниями и внедряли лучшие практики. Я согласен с этим ответом.
¨I think the heart of the problem is that you should start working more as a team."Понимаете, это проблема управления. Суть этой проблемы в том, что, если все так, как описано, это может быть одна из тех компаний, которые избавляются от менеджеров, потому что эти ребята не выполняют свою работу.
Технический директор должен устанавливать стандарты кодирования, и вам нужны проверки кода и парное программирование, чтобы распространить их по всей организации. Это не вина разработчиков, если такие вещи не были реализованы.
Технический директор @superluminary, вероятно, не заботится о стандартах кодирования, это слишком мелкая деталь. Если это небольшая компания с несколькими командами разработчиков, это может быть до технического директора. Как правило, это будет решать человек, который отвечает за несколько команд разработчиков. Следующее поколение, увеличивающееся в размерах, просто не может заботиться о таком низком уровне детализации, они будут озабочены общекорпоративной функциональной совместимостью , а не отдельными строками кода.
Хороший разработчик программного обеспечения принесет решения команде и заполнит пробелы в методах управления. Разработчик ОП не выполняет роль профессионального эксперта в своей области. Вместо этого он обвиняет руководство в том, что оно не знает его ограничений. ... он тот, кто должен признать ограничения команды и программного обеспечения и понять, что он не соответствует целям руководства, и работать с другими профессионалами, чтобы установить реалистичные ожидания и цели технического развития, чтобы команда и руководство были в одном месте. .

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

Команде необходимо внедрить один стиль программирования, чтобы код сразу всем узнавался. Команде необходимо проводить строгие проверки кода, чтобы знание фрагмента кода распространялось сразу же после его написания и чтобы был обеспечен общий стандарт качества. Вам нужно использовать «определение выполненного», которое гарантирует, что ничто не будет называться «готовым», пока оно не будет задокументировано, протестировано и проверено. Новым членам команды необходимо время и обучение, чтобы освоить все используемые технологии.

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

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

Затем подойдите к своим менеджерам и скажите что-то вроде

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

Я думаю, что этот ответ можно было бы улучшить, перечислив шаги для ОП, чтобы получить поддержку, необходимую для выполнения этого последнего абзаца. IME обычно один программист заботится о такого рода проблемах, а остальные не хотят, чтобы кто-то еще говорил им, как кодировать.
@AmyBlankenship: я согласен с тем, что один программист заботится, но я не могу добавить ответ на эту проблему (поскольку я еще не нашел, как это сделать, как один программист в команде...), и я чувствую, что это было бы зайти слишком далеко за пределы заданного вопроса. В любом случае ему нужно убедить руководство, что все может измениться, если руководство начнет настаивать на переменах. Как просто член команды с руководством, которому наплевать на мой опыт, вы не можете сделать достаточно.
Аргумент «стиль кода» преувеличен. Общий стиль может решить некоторые командные проблемы, но не решает основную проблему. Руководство по стилю полезно, потому что разработчики неграмотны в коде. Разработчики должны практиковаться в чтении другого кода, чтобы стать грамотными. ...Человек, который может читать только свои собственные статьи на английском языке, не владеет английским языком, и разработчик, который не может читать код других разработчиков, столь же неграмотен. ...Если это так, то не сердитесь, вместо этого загружайте и переписывайте крупный проект с открытым исходным кодом ежемесячно в течение 4-6 месяцев. Вы будете поражены тем, насколько легким становится чтение кода.
@Nathaniel: Я думаю о своем уважаемом коллеге, который пишет функции из 800+ строк, которые я нахожу нечитаемыми и которые он считает делом вкуса. Он не понимает мои занятия с множеством мелких методов. Конечно, наши навыки чтения кода всегда можно улучшить, но я бы предпочел иметь какое-то соглашение по этому поводу. Конечно, упор на тесты тоже решит эту проблему (он не может тестировать свои функции).
Если кто-то использует методы для практики процедурного программирования на объектно-ориентированном языке, их следует исправить. Существует множество документации для каждого языка, которая показывает правильное использование методов. Метод должен выполнять только ту работу, которая описана именем метода. Например, если они назвали свой метод DoAllTasksAssociatedWithTheCreationOfANewUserAndUserProfile, то он может быть большим, но вы сможете использовать его так же. Вы могли бы указать, что у него есть 2 проблемы. С другой стороны, если он только говорит SaveUser и делает много других вещей, на которые им нужно согласиться.

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

Разработчики могли бы сделать больше, чтобы приблизиться к идеалу менеджеров:

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

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

Согласен по всем пунктам, за исключением того, что я бы предпочел видеть хорошие имена ( httpResponseDataа не data, например, ) и тесты (рабочие и простые), а не документацию. Последнее субъективно и гарантированно будет неполным (иначе это был бы код).
@ l0b0 Я согласен с вами в отношении кода. Я прошу отличаться в таких вещах, как необходимые специализированные настройки, специализированные инструменты, различия между внутренними и стандартными и другими вещами, которые трудно понять, читая код и типично племенные знания.
@ l0b0 Код намного труднее читать, если интерфейсы не документированы должным образом. Иногда мне приходилось копаться в нескольких слоях, чтобы ответить на простой вопрос вроде «Разрешается ли этому указателю быть нулевым?».

Краткий ответ: Укажите, насколько это нелепо.

Я действительно сталкивался с этим раньше, и я просто сказал что-то вроде:

Пошли бы вы к ортопеду, если бы вам потребовалась операция на головном мозге? Они оба врачи, да?!

Или же

Вы идете к портному, чтобы подстричься, потому что портные используют ножницы так же, как парикмахеры?

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

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

Пересечение навыков может быть очень полезным для обеспечения непрерывности бизнеса. В моем офисе я единственный разработчик .net, и у нас много кода на С#. Если меня собьет автобус, они будут в заднице.
@Gusdor Смотрите мой комментарий выше. Никто не отрицает необходимость резервирования ресурсов и обмена знаниями. Однако вы не передаете ключи от системы тому, кто не имеет соответствующих навыков или опыта.
Я не думаю, что этот ответ здесь применим, потому что в ОП не упоминается другой набор навыков. Речь идет о владении кодом.
Приятно, если кто-то еще указывает, что это нелепо. Я управлял продавцом промышленного котла стоимостью 1000000 долларов. У нас был большой спор с ними о философии управления, в результате чего BMS (система управления горелкой) была перепрограммирована на месте. Когда исправленные документы прошли через инструментарий сайта, ребята попросили офисного парня просмотреть их. Его первый вопрос: "Что такое BMS?" Его успокоил мой ответ его начальнику: я не приму подпись Пола на этих документах, так как он не участвовал в горячих дискуссиях о философии управления или ее реализации в BMS на месте.
@Chris Мой ответ по-прежнему актуален, если вы должны были подобрать большую сложную систему из другой команды, с которой у вас не было опыта. Вы можете понимать инструменты и язык разработки, но вам не обязательно знать предметную область или то, как команда разработала и внедрила их. Да, документация, но если вам дадут задание починить чужую систему из-за того, что она сломана в продакшене, даже самому опытному разработчику потребуется время, чтобы ее поднять.
Если вы идете к ортопеду, но он болен, вы ожидаете, что замещающий ортопед получит ваше досье и продолжит с того места, на котором остановился другой ортопед.
@PieterB Верно. Однако вы надеетесь , что они ортопед!
@JaneS хорошо, если у вас есть магазин с разработчиками C # и разработчиками php, руководство должно понимать, что это не взаимозаменяемые наборы навыков, но я полностью ожидаю, что разработчики C # возьмут на себя работу друг друга.
@JaneS: они в одной команде.
@Chris Если они в одной команде и имеют совместимые наборы навыков, то я абсолютно согласен с вами, и мой ответ не применим. Тем не менее, ОП подразумевает, что существует разница в наборе навыков (по крайней мере, для меня), поэтому я ответил так, как ответил.
См. выше, сравнивайте яблоки с яблоками, а не с бананами.
Также зависит от контекста, если бы я лежал там с сердечным приступом, я бы взял проктолога, если бы они были единственным доступным врачом
Это предложение кажется бойким и саркастическим и вряд ли принесет пользу ОП его / ее боссам. Указание на проблемы в конкретных терминах (например, со ссылкой на любую литературу по продуктивности программистов) и предложение некоторых предложений по улучшению ситуации (например, согласованные общие стандарты кодирования) может быть более конструктивным.
Я согласен, что это несколько смешно. Требуется время, чтобы заново понять даже собственный код после того, как он некоторое время не видел его, поэтому, безусловно, потребуется время, чтобы понять чужой. И вы не можете уместить так много в своей голове: изучение чужих вещей не задержится надолго. Существует практический предел разделения ответственности за код.
@PieterB «вы ожидаете, что новый ортопед получит ваше досье и продолжит с того места, где остановился другой». Я хочу жить там, где ты. Мой опыт работы с врачами любого убеждения показывает, что достаточно сложно заставить того же врача продолжить с того места, на котором он остановился.
"нежелание" обычно должно вести к "отсутствию работы"

Вы написали,

никто ничем не владеет, и никто ни за что не отвечает. Или, другими словами, всем принадлежит все, и каждый за все отвечает.

Это две крайности (возможно, вам следует искать золотую середину между двумя крайностями) и ложная дихотомия.

Это обычное дело для софтверной компании?

В зависимости от количества программистов существуют различные возможности.

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

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

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

Проверка кода имеет множество целей, в том числе:

  • Перекрестное обучение тому, что делают компоненты и как они реализованы
  • Обеспечение общих/согласованных стандартов (кодирования, документации и/или тестирования)
  • Контроль качества (т.е. тестирование «белого ящика», поиск потенциальных ошибок)
+1 за вашу разбивку процесса проверки кода вместо того, чтобы просто сказать «проведите проверку кода».
Согласовано. Баланс в Agile заключается в том, что у разработчиков должны быть области знаний и области ответственности, но они должны формироваться органично. В Agile Ownership — это не охраняемый военный объект, куда никто не входит и не выходит. Это общее пространство, как и парк, и смотритель парка отвечает за предотвращение его разрушения и работу с волонтерами, чтобы улучшить пространство для всех.
@Nathaniel Использует ли «agile» команды и / или руководителей групп, назначенных компонентам? Например, однажды у меня была работа, на которой я был самым старшим и «главным разработчиком» с (в конечном итоге) 20 или 30 другими разработчиками: другие люди делали свои дела (были назначены ответственными за разработку определенных компонентов), но я ожидал в крайнем случае (например, если они уволятся), чтобы иметь возможность взять на себя или переназначить обслуживание своего кода.
20-30 разработчиков — это слишком много для гибкой команды. Обычно, когда команда становится такой большой, что-то серьезное не так. См. слабое владение кодом: martinfowler.com/bliki/CodeOwnership.html .

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

Вот вам менеджер, который выронил мозг.

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

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

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

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


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

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


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

Это обычное дело? Не так много. Но его можно настроить на работу.

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

Имеет смысл проводить время с другими программистами для обмена знаниями и практикой. Это можно сделать с помощью обзоров, парного программирования или чего-то еще, что вам подходит. Я был в команде из 22 человек, где один консультант (там уже много лет) проводил большую часть своего времени, бродя по коридорам, вместо того, чтобы программировать. Он был связующим звеном в команде, и по крайней мере 15 человек в команде могли работать над программами, которые я делал. Это может быть все, что угодно, неформальные беседы, обмен знаниями за кофемашиной...

Но это имеет свою цену. Платить ИМХО стоит, но если все работают по одной технологии, то не слишком дорого. Стоимость - большие накладные расходы на связь. Это больше, чем вы должны сообщить своему боссу, так как его идея неплоха сама по себе. Просто он должен понимать, что это инвестиции с немедленным вознаграждением.

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

Я знаю одну компанию ( Menlo Innovations ), которая меняет «всех» вокруг «каждого» проекта по установленному графику. Есть способ заставить это работать.

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

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

Почему-то editссылка отключена. Компания Menlo Innovations, а адрес — menloinnovations.com.
@Dancrumb - исправил написание нововведений. URL-адрес был правильным.
Должен отметить, что очень немногие организации нуждаются в ежедневных собраниях. Несколько в неделю, точно. Но что произошло со стендапом в пятницу и утром в понедельник? букис. (если вы не планируете задачи на почасовом уровне, я вам сочувствую)
@ChrisMarisic - Итак, на собрании в понедельник утром, вы собираетесь сказать в пятницу, я ничего не сделал, больше ничего не изменилось, поэтому я просто собираюсь сделать сегодня то, что я сказал, что собираюсь сделать в пятницу?
@JeffO, по большей части, каждое стендап-совещание, на котором я был, в основном говорило: «Я работаю над тем, что сказал сегодня - X дней назад», и, может быть, один или два раза в неделю человек говорит: «Закончил Y, перешел к Z», который будет виден в любом доступном индикаторе состояния (канбан-доска, невыполненная работа и т. д.). Единственный другой тип совещаний, которые я когда-либо посещал, просто превращался в полноценные собрания с людьми, которые стояли вокруг в течение 30-75 минут, обсуждая что-то, что половина команды, вероятно, отключилась за несколько минут.
@ChrisMarisic - Никто никогда не сталкивался с проблемой общего дизайна, конкретной структуры или чего-то еще? Вы обращаетесь ко всему этому по электронной почте или в каких-то других разговорах? Эти перерывы следует отложить до ежедневного собрания. В противном случае, если ваш проект работает так гладко, вам не нужны ежедневные встречи.

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

Вывод

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

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

Как выразилась Патрисия Шанахан, «разработчики и менеджеры заняли крайне противоположные позиции в спектре от индивидуального владения кодом до совместной ответственности» , и я могу четко сказать, какие ответы/комментарии исходят от менеджеров:

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

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

Вероятно, более важным, чем «Команда должна…», является «Руководство должно разрешить команде…» и признать, что производительность при этом сильно пострадает.

Признавайте это или нет, реальная проблема была указана gazzz0x2z: «Это имеет свою цену, и программисты платят цену. Вот почему вашего босса будет трудно убедить, что это плохая идея. У него есть все преимущества, а вы все недостатки» , и я лично согласен с Ремко Герлихом: «Если менеджеры требуют результатов такого процесса, не инвестируя сначала в его реализацию, они нереалистичны» , потому что, в конце концов, как выразился no comprende, «требуется время, чтобы заново понять даже свой собственный код после того, как не видел его какое-то время, поэтому, безусловно, потребуется время, чтобы понять чужой.И вы можете только так много упаковать в свою голову: изучение чужих вещей не задержится надолго.Существует практический предел разделения ответственности за код» ,«Было бы хорошо, если бы вся управленческая команда также могла поменяться местами» .

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

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

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

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

Я не думаю, что этот ответ здесь применим, потому что в ОП не упоминается другой набор навыков. Речь идет о владении кодом.
@Chris Однако здесь применимо общее утверждение боссов. «Программирование заданий, мало чем отличающееся от кладки кирпичей» — вот на что это направлено.
Непонятно, так ли заявили менеджеры, возможно, это фраза ОП.
«разные аспекты программирования требуют совершенно разных наборов навыков» — это правда, но разработчик, обладающий перекрестными навыками (пусть даже в некоторой степени) в работе с другими членами команды, гораздо лучше подходит для найма, чем тот, кто настаивает на том, чтобы никогда не оставить свою специализацию.
Текущая тенденция предназначена для разработчиков полного стека, поэтому ожидается, что, по крайней мере, некоторые разработчики освоят несколько аспектов программирования.
@Chris: Это действительно касается только владения кодом или общих затрат на переключение между задачами?
@Deduplicator: Да, только владение кодом.

Вы можете стандартизировать соглашения о написании кода, инструменты, папки и способ работы. Но вы не можете сделать его равным знаниям о некоторых запутанных функциях и о том, как работают некоторые части кода. Это принадлежит только тем, кто часами думает об этом. Объясните своим начальникам, что это вовсе не кладка кирпичей, мне приходилось иметь дело с такими невежественными начальниками, они из строительной отрасли и пытаются использовать те же стандарты в индустрии программного обеспечения, я не могу вам объяснить, что это приводит к большим бедствиям, провальные проекты и высокая текучка действительно хороших разработчиков. Объясните им это. Каждая часть работает по-своему и соответствует бизнес-требованиям. Например, у вас есть «кирпич», который может выполнять одну операцию «плюс», другую операцию «минус» и операцию деления, когда-нибудь один парень попросит вычисление производной или матричной функции, вы можете сравнить такой «кирпич» с предыдущим? У парня, который запрограммировал новое матричное исчисление, есть время поделиться своими знаниями и в то же время остаться в расписании? Я так не думаю.