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

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

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

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

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

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

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

Закон прозрачности CodeGnome гласит: «Никакой невидимой работы никогда!» Ответственность за ошибки лежит на бизнесе из-за бюджета, процесса или других ошибок руководства. Попытка получить «бесплатное» исправление ошибок не создает заинтересованности инженеров; это просто капитализм взбесился.
Бьюсь об заклад, у вас есть очень долгие бессмысленные споры о том, являются ли вещи ошибками, когда на самом деле все это просто работает. Я не думаю, что это может произойти в самоорганизующейся команде, я предполагаю, что команда разработчиков не имеет права голоса в отношении обязательств по итерации или в отношении этой политики?
«Я чувствую, что мы пытаемся решить проблему качества в обратном порядке, исправляя ошибки, вместо того, чтобы в первую очередь сосредоточиться на предотвращении их появления» — вы никогда не остановите появление ошибок в первую очередь. Лучшее, к чему вы можете стремиться, — это убедиться, что их найдено как можно больше, прежде чем они попадут к клиенту.
И предположение, что ошибки всегда являются ошибкой со стороны разработчика, показывает отсутствие понимания разработки программного обеспечения. Это не то же самое, что класть кирпичи
И даже если это было похоже на кладку кирпичей , если вы обнаружите затерявшийся кирпич, вы не считаете каменщика ответственным и не заставляете его сносить (часть) дом и восстанавливать его самостоятельно в нерабочее время. Это может показаться удовлетворительным наказанием для виновного каменщика, но это глупый способ строить дом.
Я предполагаю, что ваша «хардкорная» среда поощряет запирание тестировщиков в подвале на все время, пока программисты исправляют ошибки, поскольку очевидно, что они не заметили ошибку до того, как она дошла до пользователей. И, по-видимому, вы наказываете своих клиентов в финансовом отношении за то, что они не сформулировали требования сразу и не перечислили все нежелательное поведение системы? В противном случае то, что вы делаете, просто противно и мстительно. Вы платите кому-то за работу 7 (или 8) часов в день — если вы хотите, чтобы они работали больше, вознаграждайте их за это, но не делайте это регулярно, иначе вы обнаружите, что у вас не хватает персонала.
«Я и другие менеджеры по проектам в моей организации планируют время для «непредвиденных» вещей, таких как расползание объема работ, пропущенные требования, неправильная оценка, но это не одобряется в бюджете на ошибки». Кто отвечает за контроль содержания, составление требований и оценку? Почему разработчики несут ответственность за честные ошибки, которые они совершают, а другие ролевые игроки в организации — нет?
Как вы определяете, действительно ли люди исправляют ошибки в свободное время, а не просто дополняют их на следующий день? Тщательно детализированные расписания? Какие процессы защиты от ошибок у вас есть? Каковы ваши местные законы относительно обязательной неоплачиваемой сверхурочной работы?
Не ответ, но если ваша компания хочет стать более гибкой, ей придется изменить свое мышление. Agile работает, расширяя возможности разработчиков, предоставляя им больший контроль над своей работой и проектом в целом, но прежде всего за счет принятия реальности.
В моем окружении это было бы незаконно.
это в какой стране? конечно это незаконно
Система дает результаты (хорошие и плохие). Почитайте Деминга. Перекладывание ответственности за проблемы с качеством на отдельных лиц вызовет у вас только кадровые проблемы. Исправьте основные проблемы с вашим процессом и командой, и результаты не заставят себя ждать. Между тем, похоже, что у вашей управленческой команды есть проблема с культурой, над которой нужно поработать.
Это мой голос за идеальную торпеду морального духа. Какова средняя продолжительность пребывания в вашей команде?
Я просто не могу представить более благоприятный конечный результат после внедрения системы, в которой разработчики должны делать свою работу бесплатно в свободное время. С этой системой вы только проиграете почти во всех мыслимых областях. Вы потеряете боевой дух, производительность и увеличите оборот. Я бы избавился от этого как можно быстрее.
Я не могу поверить в этот пост. Насколько вы должны быть правы, чтобы думать, что требование бесплатной работы этично?
Распространяется ли этот принцип на другие части вашей организации? Например, если ваша команда инженеров не может удержать квалифицированных разработчиков, будут ли технический менеджер и директор по персоналу работать бесплатно, пока не будет устранена «ошибка» управления?
Это не ответ. Это комментарий к первому комментарию (Ларри Домонико) вопроса. Джудит, пожалуйста, используйте комментарий вместо ответа в следующий раз.
@CodeGnome Ну, вот и заканчиваются ваши следующие несколько контрактов с DARPA на работу над стелс-технологией следующего поколения ...
Вы бы не хотели, чтобы я участвовал в вашем проекте, потому что я был бы чертовски уверен, что мой код работает, прежде чем отправлять его. По крайней мере, это будет в рабочее время. К черту расписание, которое вы создали. Если мне не будут платить за исправление ошибок, то я позабочусь о том, чтобы мне заплатили за все дополнительные проверки перед отправкой кода, чтобы убедиться, что у меня нет ошибок.
Я согласен с @SergeyKudryavtsev. Пожалуйста, добавьте в свой ответ что-нибудь действенное или продуктивное, чтобы он не был помечен как «не ответ».
Я также стал юристом по требованиям. Если вы утверждаете, что это ошибка, я просто отсылаю вас к документу с требованиями и спрашиваю: «Где там сказано, что это не может так работать?» Неважно, насколько сломана ошибка на самом деле. Если это явно не задокументировано, и вы ожидаете, что я буду работать в свободное время, то нет, спасибо. Вы должны были написать это в своем документе требований. В вашем документе с требованиями явно есть ошибка. Идите исправьте документ с требованиями в свободное время.
Я не верю, что у Джудит был представитель, чтобы прокомментировать, прежде чем этот ответ собрал пару голосов.
@CodeGnome Нет, при капитализме (сделанном правильно) вам платят за услуги, которые вы предоставляете. Это просто кривая деловая практика вышла из-под контроля. Лично я бы использовал слово "воровство". Такая же хрень происходит в любой экономической системе.
Там, где я живу (США), местная компания, имевшая такую ​​практику, была оспорена в суде. Программисты компании получили значительные выплаты, поскольку «наемный работник» не означает «руководство», а законы о сверхурочной работе не исключают наемных работников.
Проголосовал за этот ужасный, ужасный вопрос, который никто никогда не должен задавать. Я бы просто рассмеялся, ушел в 17:00 и сказал им, что если они не начнут планировать время для исправления ошибок, они не получат никаких исправлений. Но у меня есть то преимущество, что я нахожусь в среде, где работу легко найти, и я могу уйти без предупреждения. Задерживать сотрудников в таком состоянии — настоящее зло.
Задав этот вопрос, вы продемонстрировали, что не понимаете элементарных основ природы программного обеспечения. Вы можете быть в неправильном бизнесе.
Одной из первых вещей, о которых я узнал много лет назад на тренингах по управлению проектами, была «Стоимость качества». Похоже, ваша фирма пыталась сделать вид, что качество не связано с затратами. Есть много исследований, которые говорят, что это неразумно.
Отличная идея! Я всегда хотел работать где-нибудь с формальными методами. Было бы здорово не выпускать какой-либо код, пока не будет доказано, что он правильный. Я бы ни за что не выпустил раньше этого, если бы мне пришлось исправлять ошибки в нерабочее время, поэтому у нас будет исполняемая спецификация, и мы официально проверим нашу работу на соответствие этой спецификации.
Кто-нибудь задумывался о юридических последствиях принуждения работника с почасовой оплатой к работе в свободное время? Это может быть интересный судебный процесс.
После года работы по 45 часов в неделю только потому, что я не знал, чем еще заняться во время обеденного перерыва, меня вызвали в кабинет начальника и сказали, что мне нужно работать больше, разумеется, без дополнительной оплаты. Поэтому я сказал «да, сэр» и сразу же нашел новую работу. Если ваши сотрудники уважают себя, они будут делать то же самое.
Из любопытства, вы слышали о модульных тестах/TDD? Возможно, вы захотите сделать свою команду более ориентированной на тестирование. Это закон природы, что инженеры будут создавать продукты с более низкими стандартами качества всякий раз, когда надвигающиеся сроки заставляют их спешить. Заплатите им за написание тестов заранее, и вы поймаете большинство ошибок до того, как они поразят ваших пользователей. Большинство ошибок не по вине программиста. Они виноваты в том, что руководство пытается ускорить производство до того, как оно будет готово.
...engineers must fix their own defects...В целом я согласен с этим принципом, но его реализация не является устойчивой. Что происходит, когда команда разработчиков уходит в отставку? (Я был в команде, которая, по сути, угрожала генеральному директору.) Вы написали, потому что видите возможные последствия. Вы ищете способ сохранить статус-кво на неопределенный срок? Вы думаете, что есть новые способы сделать это приемлемым (на неопределенный срок)? Или вы ищете руководство о том, как внедрить изменения в процесс, убедив бизнес-менеджеров?
ОП, должно быть, троллит...
Есть ли у вас план SQA и план управления содержанием?
ОП не задавал вопрос в заголовке; исходное общее название этого вопроса было отредактировано. Я предлагаю прочитать его комментарий к моему ответу , чтобы лучше понять первоначальный смысл вопроса, прежде чем комментировать или отвечать.
Предположим, у вас есть два разработчика. А) рок-звезда и Б) плохой исполнитель. У рокстар один баг на 100 строк кода. Плохой исполнитель имеет 5 ошибок на 100 строк кода. Итак, давайте предположим, что рок-звезда выдает 1000 строк кода в неделю, а плохой исполнитель — 100. У рок-звезды будет 10 ошибок в неделю, а у плохого исполнителя — 5. рок-звезда, чтобы узнать, что лучше просто меньше работать
Это похоже на компанию, которая грабит своих разработчиков.
Я наткнулся на эту историю, и мне грустно видеть, что это происходит повсюду. Посмотрите мою похожую историю здесь: work.stackexchange.com/questions/136342/…

Ответы (19)

И мало того, что они должны исправлять их, они должны исправлять их в свое время, не влияя на планы.

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

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

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

Это, конечно, не означает, что вы не должны продолжать работать над предотвращением ошибок. Но ваш подход как продакт-менеджера и как команды должен учитывать тот факт, что ошибки существуют.

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

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

Очень хорошие моменты, и я, и другие менеджеры по проектам в моей организации планируют время для «неожиданных» вещей, таких как расползание области, пропущенные требования, неправильная оценка, но это не одобряется в бюджете на ошибки. Это элемент подотчетности — мы обеспечиваем подотчетность, заставляя их платить за свое время. Я не люблю это. Мне это не нравится. Я просто пытаюсь либо смириться с этим, либо создать краткий убедительный аргумент против него. Отсюда и мой пост здесь. :)
Я понимаю. Если ваша организация придерживается agile, «отсутствие невидимой работы» — это основной принцип, который можно выдвинуть против «неодобрения бюджета на устранение ошибок», особенно если позиция организации — «ошибки — это факт жизни». Организационная культура, которая а) признает, что ошибки — это факт жизни, и б) ожидает, что сотрудники будут разбираться с ними в свободное время? Удачи вам в том, чтобы инженеры были счастливы... или вообще остались!
Я ожидаю, что если разработчиков попросят платить за ошибки из своего рабочего времени, а не из рабочего времени компании, то они будут чрезмерно осторожны с выпуском кода, потратят слишком много времени на его тестирование или привязку подробных низкоуровневых спецификаций, предназначенных для обеспечить, чтобы проблемы «не считались» дефектами, поскольку код должен соответствовать спецификации, а затем, когда сообщается о дефектах, будет сильно стимулироваться (а) скрывать их и/или перекладывать ответственность на кого-то другого; (b) половинчатое исправление. Вы просите своих собственных инженеров больше походить на тех дрянных корпоративных поставщиков, с которыми вы ненавидите иметь дело. Это риск.
@LarryDomonico: если вы не учитываете ошибки в бюджете, а они случаются, у вас есть явная ошибка в вашем бюджете. Вы должны переписать бюджет в свое свободное время сейчас.

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

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

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

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

+1 за указание фактического эффекта, который может иметь такая политика, когда она применяется к тому самому типу личности, который предрасполагает человека к карьере в области разработки программного обеспечения.
Мой отец видел точно такую ​​же проблему на фабриках (развивающихся рынках) несколько десятилетий назад, где с рабочих лишали зарплаты за допущенные ошибки. В результате ошибки будут скрыты и не будут обнаружены до тех пор, пока стоимость их исправления не станет намного выше. Эта политика вызывала действительно большие проблемы и мало что делала для предотвращения ошибок.
Другая возможность — дополнить другие оценки, включив исправления ошибок, чтобы им не приходилось работать в нерабочее время.
@ jpmc26 jpmc26 Я бы не назвал это дополнением, а просто хорошей оценкой. В любой итерации всегда будут ошибки, которые нужно исправлять.
@Paddy Я имею в виду, что я прямо лгу о том, сколько времени займет конкретная задача, переоценивая ее, чтобы было достаточно времени для функции + ошибки. Если бы они были честными, они бы дали более низкую оценку фактической функции, а затем выделили бы отдельное время для ошибки. Я не могу сказать, что я действительно кого-то обвинял бы в этой ситуации, но был бы не совсем честен.

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

Позвольте мне задать вам вопрос. Всякий раз, когда план меняется, вы меняете его в свободное время ?

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

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

Люди, исправляющие свои собственные ошибки, — это хорошо. Как насчет того, чтобы спросить, как эта ошибка проскользнула через ваше тестирование? У вас есть тестирование, верно?

На мой взгляд, ошибка лежит непосредственно в вашем планировании. Вы планируете, чтобы люди работали на 100%, а затем вам нужно исправить ошибку. Как будто ошибка — это то, что вы никогда не могли себе представить. Ошибки являются частью разработки и улучшения программного обеспечения. Если вы хотите исправить их вовремя, планируйте задачи для своих людей только на 70%. Или 60%. Или 90%. Все, что работает для вашего количества дефектов. Но это ваша работа, чтобы сделать это правильно. Если предположить, что ошибок не будет, а затем позволить разработчикам заплатить за вашу неспособность придумать план, соответствующий реальности, вы очень скоро получите очень пустой отдел разработки.

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


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

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

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

РЕДАКТИРОВАТЬ: Большая часть изменчивости производительности является случайной, т. Е. Вы не можете их контролировать. Если вы измеряете результаты процесса, предполагается, что наблюдения между +3 и -3 сигма являются случайными результатами. Однако эти результаты могут выйти за пределы допусков и, таким образом, считаться дефектом. Наказание за попытку контролировать их ТОЧНО похоже на наказание за выпадение 3 или 6 при правильном подбрасывании костей, с ожиданием того, что 3 и 6 выпадут реже после нескольких карающих ударов током. Если вы ищете аргумент для изменения этой политики, то это он. Многие дефекты возникают из-за случайных драйверов, которые НИКТО не контролирует. Попытка привлечь инженера к ответственности за них — это погоня за стохастическим шумом, тщетная попытка.

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

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

Не пытайтесь наладить здесь политику вашей компании. Измени это. Это просто неправильно по всем мыслимым стандартам.

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

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

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

У любого опытного разработчика в голове есть представление о следующих кривых:

введите описание изображения здесь

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

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

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

Я некоторое время смотрел на диаграмму, но я не могу сказать, что должны представлять оси на этой диаграмме. Не могли бы вы пометить их, пожалуйста?
@Philipp Филипп Я, наверное, мог бы сделать это более понятным, но, по сути, ось X - это время, затраченное на разработку. Ось Y — это время для каждого из различных связанных действий и/или итогов. Вот почему синяя линия прямая. Я сделаю лучшую версию с помеченными осями. Спасибо за ответ.
Я не понял, что такое время разработки и его стоимость. Пожалуйста, объясни
@Krishnan «Время разработки» на этом графике представляет собой количество времени, которое разработчик изначально тратит на данный элемент, например на функцию. На этом графике я не учитываю время, затраченное на исправление дефектов. Стоимость - это деньги, т.е. QA и разработка стоят денег в первую очередь потому, что тестировщики и разработчики ожидают, что им заплатят.

Краткий ответ: нет!

Не такой короткий ответ:

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

Весь код содержит ошибки. Качественный код содержит меньше ошибок.

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

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

Кто-нибудь из ваших разработчиков недавно уволился? Просто спрашиваю...

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

Я могу писать код без ошибок. Вы не хотите платить мне за это. Скажем так, затраты на это составляют около 99% моей продуктивности.
@Joshua: пиши тесты; следовать лучшим практикам разработки; попросите коллег-программистов рецензировать ваш код; попросите тестировщиков проверить это; получить подписку клиента. Тогда ваш код будет более качественным и содержать меньше ошибок. Хотя я не хочу платить вам в 99 раз больше вашей зарплаты за написание кода без ошибок, я также не хочу платить вам вашу обычную зарплату за то, что вы пишете дрянной, неработающий код, полный ошибок.
Я не говорю о типичных уровнях уменьшения ошибок; они работают просто отлично. Почти все затраты связаны с тем, что вам абсолютно необходимо устранить каждую ошибку до последней и быть уверенным, что вы найдете их все. Когда стоимость ошибки в продакшене составляет полмиллиарда долларов, вы должны подумать о том, чтобы заплатить стоимость, чтобы убедиться, что код действительно свободен от ошибок (подсказка: вы не можете сделать это постфактум, но должны начинать разработку с этой целью). А пока не очень.

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

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

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

Баги это нормально. Это не грехи. Никто — ни Гейтс, ни Возняк, ни Торвальд, никто — не пишет чистый код без ошибок. Разработка программного обеспечения — это итеративный процесс, и устранение дефектов — лишь одна из нормальных частей этого процесса. Честно говоря, не платить разработчикам за исправление ошибок — все равно, что не платить садовникам за прополку.

Эта практика — хороший способ вытеснить лучших и умнейших, оставив вас с костяком команды из ваших худших исполнителей. Я разрабатывал программное обеспечение для истребителей 4 -го и 5-го поколений и руководил программно-интенсивными программами для USN : сертификация PMP , несколько инженерных степеней, Eagle scout, yada yada, yada. Оригинальные посты заставляют меня задаться вопросом, действительно ли проблема заключается в интеграции более эффективной практики SQA на линейном уровне для обнаружения, устранения и, что наиболее важно, предотвращения дефектов.

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

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

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

+1 за приоритизацию ошибок наряду с новыми функциями. По моему опыту, это делает невидимую ранее работу очень заметной.

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

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

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

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

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

Дефекты являются частью цикла разработки программного обеспечения. Конечно, нельзя винить в этом только одного человека. Вся цепочка отвечает.

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

Настройте хороший процесс « политики нулевых дефектов », чтобы предотвратить мгновенное исправление всего:

введите описание изображения здесь

Я бы добавил пятую классификацию «Закрытые» для дефектов, которые никогда не должны получать приоритет, потому что они слишком тривиальны. Убедитесь, что вы общаетесь ясно и честно.

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

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

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

Вы выбираете:

  • Разработчик A: Он пропустил точку с запятой из-за усталости и является причиной ошибки.
  • Разработчик B: Сверхбыстрый программист закончил свою задачу раньше и хорошо выспался.
  • Разработчик C: только что обученный разработчик, очень увлеченный, но низкий опыт означает высокий риск ошибок.
  • Разработчик D: Был здесь много лет и почти полностью зомби, и команда не любит его. Никаких моральных наказаний, но чтобы что-то сделать, нужны годы.

Дело, конечно, в том, что вы хотите получить самое быстрое/наименее рискованное решение для выполнения работы. Не играйте со своими сотрудниками в какие-то странные моральные «голодные игры».

"чтобы уложиться в приближающийся (не)дедлайн" :D
Это действительно странный, но забавный ответ ... Ваш реальный совет или сообщение потеряны для меня ... :)
Дело в том, что вы выбираете B каждый раз. Потому что вы хотите закончить проект, а не наказывать разработчиков за счет проекта.

Престижность Роберту Гранту за то, что он указал на разницу между контрактом с подрядчиком и контрактом с фиксированной ценой, что тоже бросилось мне в глаза. Даже будучи подрядчиком с почасовой оплатой, я пару раз выполнял работу бесплатно (час по 120 долларов в час в 2 случаях), но по моим собственным причинам для хороших клиентов.

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

ОП: Вы рассматривали этот мысленный эксперимент? Переверните процесс и заплатите разработчикам за исправление ошибок, но пусть они пишут код в свободное время. Глупо, правда?

Попробуйте предложить альтернативный подход к управлению:

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

  1. Это проверяет проблему до того, как она попадет в производство, а не после
  2. Радует разработчиков, потому что они не исправляют чужие проблемы, а тестируют свой код.
  3. Обеспечивает объективную меру того, что ожидается от разработчиков, в отличие от «НЕТ ОШИБОК!» что недостижимо
  4. Соответствие стандарту и покрытие тестами является лучшим показателем индивидуальной производительности, чем количество ошибок, что может быть связано со сложностью порученной работы, а не с навыками человека.

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

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

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

Подрядчики.

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

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

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

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

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

Разработчики будут учиться не тому, как улучшать, а тому, как скрывать свои ошибки и не попадаться. Это простая психология и так себя ведут даже дети, кошки и собаки. В конечном счете они создадут беспорядочный кодовый ад. Найдите причину, по которой они делают ошибки, и решите основные проблемы. Поскольку ПМ работает с разработчиками, а не против них. Дайте им время, образование, возможность учиться и делиться своими знаниями. Уход за документацией как источником знаний. Такая сложная система требует глубокого понимания. Подумайте о рефакторинге, чтобы сделать систему менее подверженной ошибкам.

Я не премьер-министр. Я разработчик.

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

У нас есть отдельная команда, занимающаяся исправлением ошибок. Эта команда не гибкая. Мы просто воспринимаем вещи спокойно, и нас постоянно прерывают.

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

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

Ошибки — это ваши результаты. Вы не должны бояться их или заставлять кого-либо бояться. Вы должны поддерживать их, поощряя всех находить и сообщать о них, насколько это возможно. Вы никогда не должны наказывать свою команду или программистов за ошибки! Это было бы ужасной ошибкой. Посмотрите это видео: https://www.youtube.com/watch?v=7DYr8GYzJ6Q

Проблема, которую вы описываете, кажется, продолжается в течение некоторого времени в вашей рабочей группе. Вашим инженерам платят 1 1/2 их зарплаты в нерабочее время или больше? Настало время действовать прямо сейчас, чтобы не ввести в свой рабочий коллектив шаблон, который будет сложнее исправить в ближайшие несколько лет. Исследования менеджмента показывают, что не заработная плата является фактором № 1, влияющим на мотивацию сотрудников/работников. Это качество их рабочей среды. Люди предпочитают иметь работу, на которой они могут реализовать себя, прежде чем желать более высокой зарплаты. Вы описываете свои задачи по разработке своих продуктов как сложные, вызывающие больше ошибок, чем вам хотелось бы. Программирование в 2018 году — это не то же самое, что в начале 1980-х, когда я прошел курс базового языка программирования, прежде чем изучать бизнес-администрирование, пока не получил степень MBA. Ошибки в компьютерных программах имеют меньше причин для существования сейчас, чем раньше, потому что мы достигли невиданного прежде уровня технологий. Решение ошибок — не самая интересная задача для инженера. Возможно, вы могли бы выбрать или нанять несколько человек, которые занимаются только отладкой; люди, которым это нравится. Этот шаг может расстроить вашу команду инженеров. Это было бы неплохо. Вы должны послать четкий сигнал, что вы совсем не удовлетворены тем, что происходит, пока не стало слишком поздно. Большинство жителей Северной Америки тратят больше, чем зарабатывают. Вы можете получить серьезную негативную реакцию от своих инженеров, если им абсолютно необходимы дополнительные деньги. Кроме того, иногда члены команды саботируют собственную работу, чтобы избавиться от своего менеджера. Не ждите, пока вы доберетесь туда. Сегодня у вас есть симуляторы, чтобы проверить, работают ли ваши программы; насколько я понимаю, некоторые члены вашей команды оставляют нерешенными ошибки, которые они находят или создают. Управление проектами, работа в команде с бюджетом и сжатыми сроками требуют постоянного контроля процедур. Деловое администрирование должно планировать, организовывать, направлять и оценивать/контролировать. За последние два десятилетия в управление вошли некоторые ереси. Некоторые люди не терпят, чтобы их работа оценивалась и контролировалась. Я хочу сказать, что вы должны действовать быстро, прежде чем такая исключительная процедура, как работа в нерабочее время, станет нормой на вашем предприятии. За последние два десятилетия в управление вошли некоторые ереси. Некоторые люди не терпят, чтобы их работа оценивалась и контролировалась. Я хочу сказать, что вы должны действовать быстро, прежде чем такая исключительная процедура, как работа в нерабочее время, станет нормой на вашем предприятии. За последние два десятилетия в управление вошли некоторые ереси. Некоторые люди не терпят, чтобы их работа оценивалась и контролировалась. Я хочу сказать, что вы должны действовать быстро, прежде чем такая исключительная процедура, как работа в нерабочее время, станет нормой на вашем предприятии.

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

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

Что мы сделали, так это сократили команду до 2-3 разработчиков и выделенного ресурса QA. Таким образом, «единица разработки» является неполной, пока ее не утвердил QA. Поскольку QA и разработчики работают рука об руку, они не противостоят друг другу, это совместная работа, направленная на достижение совершенства.

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

Это гарантирует, что ваша «идеальная» функция ничего не ломает.

В результате у нас больше команд, а значит, и больше накладных расходов на управление. У нас больше ресурсов QA. У нас более медленный ритм. Но когда «единица разработки» завершена, качество становится лучше.