Почему мы не можем ничего сделать?

9

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

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

Вещи, которые я могу определить как проблемы, включают:

  • Уточнение поставленных задач редко. Это отчасти потому, что управление является узким местом, и у нас нет денег или людей, чтобы посвятить себя разработке подробных требований так, как нам бы хотелось. Это также отчасти потому, что разрабатываемое нами программное обеспечение является следственным, и точный метод неясен, пока не будет продемонстрирован и использован для определения его эффективности.
  • Ведущий разработчик очень любит то, что он называет «прототипированием», до такой степени, что он в последнее время начал настаивать на том, что все «прототипировано», что для всех нас похоже на написание плохого кода и передачу его разработчикам моделей для игры. Не ясно, что он ожидает от этого упражнения во многих случаях. «Реальная» реализация страдает из-за того, что он настаивает на том, что хорошая практика отнимает слишком много времени у прототипирования. Я даже не смог распутать эту извращенную логику, и я не уверен, что хочу попробовать.
  • Предполагается, что разработчики моделей расскажут нам все о желаемой методологии в точных деталях, и она абсолютно уверена, что то, что они предлагают, теоретически безупречно. Это вряд ли когда-либо правда, но никаких действий не предпринимается, чтобы исправить эту ситуацию. Никто на стороне моделирования не вызывает каких-либо проблем в структурированном виде, на которые, вероятно, будут реагировать, и при этом они не ищут руководства в применении лучших практик. С их пассивностью тоже ничего не делается.
  • Я пытался подтолкнуть TDD в команде раньше, но мне было трудно, так как это ново для меня, и хотя те, кто наблюдал за моей работой, были готовы терпеть это, никакого энтузиазма не последовало ни от кого другого. Я не могу оправдать количество времени, которое я провожу, валяя и не заканчивая функции, поэтому идея - на данный момент - была заброшена. Я обеспокоен тем, что его больше не заберут, потому что никто не любит, когда ему говорят, как выполнять свою работу.
  • Теперь у нас есть сервер непрерывной интеграции, но он в основном используется только для запуска многочасовых регрессионных тестов. Было оставлено открытым, что он также должен запускать модульные и интеграционные тесты с полным покрытием, но на данный момент их никто не пишет.
  • Каждый раз, когда я поднимаю вопрос о качестве с ведущим разработчиком, я получаю ответ: «Функция тестирования A проста, функция B гораздо важнее для пользователя, но слишком трудна для тестирования, поэтому мы не должны тестировать функцию А». Еще раз я не продвинулся в попытке распутать эту логику.

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

Том W
источник
5
Насколько хорошо компания продвигает программное обеспечение, которое клиент любит и любит? Другими словами, получает ли команда хорошие результаты, несмотря на то, что вы не верите, что процесс звездный?
Роберт Харви
@ Роберт Харви - Мне сложно судить. Продукты чрезвычайно нишевые, и мы (разработчики) получаем смешанные сообщения. С одной стороны, новые клиенты на прорывных рынках бьют по продукту больше, чем мы изначально предполагали, и, как следствие, обнаруживают неисправности, о которых они не думают, поскольку мы объясняем причину и быстро их устраняем. С другой стороны, некоторые крупные институциональные клиенты не доверяют, и мы начинаем сомневаться в том, что несколько раз вносим поправки в модель. Команда программного обеспечения является одним из немногого преломления даже в компании в настоящее время , так что мы хорошо выглядеть на данный момент .
Том W
1
Я хотел бы получить от клиентов как можно больше отзывов о том, как договориться об основной рабочей «модели», и попытаться немного их закрепить. Это действительно может разочаровать клиентов, когда модель изменится, но если это новое, передовое программное обеспечение, оно идет с территорией.
Роберт Харви
Хороший вопрос. Я заметил, что даже с восприимчивой аудиторией, реальные перемены трудны, если только вы не видите, как они работают на практике. Мой совет - сначала попробовать подходы к повышению вашей производительности, а затем продемонстрировать их для команды. С практикой вы можете быстрее освоить TDD, чем писать / отлаживать / повторять.
Майк Б

Ответы:

19

Позвольте мне сыграть адвоката дьявола на мгновение:

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

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

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

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

Я пытался подтолкнуть TDD в команде раньше, но мне было трудно, так как это плохо для меня

Это тоже не сработает; вам нужно понять технологию, прежде чем вы сможете ее проповедовать. Кроме того, в итеративном магазине со скудными требованиями TDD может быть слишком много накладных расходов. Лучше поощрять адекватное покрытие модульного тестирования.

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

Это может быть уместно в небольшом итеративном магазине.

Каждый раз, когда я поднимаю вопрос о качестве с ведущим разработчиком, я получаю ответ: «Функция тестирования A проста, функция B гораздо важнее для пользователя, но слишком трудна для тестирования, поэтому мы не должны тестировать функцию A»

Похоже, ваш магазин имеет довольно жесткие временные ограничения; нравится вам или нет, вы связаны этими ограничениями.

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

Роберт Харви
источник
Я думаю, что вам нужно подходить к этому с точки зрения «технического долга». Каждая компания делает оценки времени; предполагая, что у вас уже все хорошо, начните встраивать излишки в 10–20% в свои оценки времени на рефакторинг и обучение и заставьте их придерживаться.
Роберт Харви
Продолжать; Итеративная разработка - это название игры, вы правильно поняли. Проблема в том, что итерация прекращается до того, как она фактически закончится, потому что мы получаем смутные банальности от моделистов о том, действительно ли то, что мы написали, действительно правильно. Никто не может определить какие-либо ошибки, так что мы сделали корабли. Через полгода это оказывается не так. Я хотел бы иметь возможность указать, что моделистам нужно дать более строгие критерии для испытаний, но опять же, разве не их работа так говорить?
Том W
2
@Tom: Пока вы не настаиваете на тестируемых спецификациях от моделистов, они всегда могут сказать вашей команде, что они ошиблись. Если они будут привлекать вас к ответственности за получение результатов из их модели, вы должны будете привлечь их к ответственности за предоставление вам тестируемых спецификаций, чтобы вы могли объявить об успехе. Каждая спецификация должна была включать в себя своего рода тест «не ходи», чтобы вы и заказчик (или разработчики моделей) могли взаимно согласиться с тем, что тест прошел, не подвергаясь интерпретации.
Роберт Харви
Совершенно верно. К сожалению, вы, возможно, заставляете меня признать то, чего я не хотел - что у нас недостаточно компетенции. Это очевидно в целом, но особенно с моделистами. По некоторым аспектам мы настаиваем на фирменных спецификациях, тогда это все равно заканчивается неверно. Они ученые, и, исходя из своего опыта, ученые склонны относиться к коду как к эксперименту - исправлять ошибки по мере продвижения. Для бизнеса это просто недостаточно, и от профессионализма следует ожидать, что он это признает.
Том W
Нет ничего плохого в том, чтобы рассматривать код как эксперимент; это часть итеративного процесса. Но в конце концов вам нужно обойтись так: «этот код принимает эти входные данные и, как ожидается, будет производить этот вывод». Вот для чего нужны юнит-тесты; они составляют часть спецификации. Я понимаю, почему вы хотите сделать TDD; это налагает спецификации на код ... Но вам нужна поддержка со стороны корпоративной культуры, чтобы заставить эту работу работать, и TDD имеет вид "религии" об этом. Не все так можно проверить, поэтому, в конце концов, вам, возможно, придется жить с определенной степенью дискомфорта.
Роберт Харви
2

Я собираюсь сосредоточиться на прототипе здесь

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

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

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

чокнутый урод
источник
Это то, что я пытался общаться в течение некоторого времени. Как это бывает, прототипы часто являются ценными и действительно дают нам важные уроки о природе проблемы. Тем не менее, независимо от того, усвоены ли эти уроки или нет, качество реализации зависит от разработчика, воссоздающего полученные знания из своего мозга, а не от использования прототипа для написания спецификации. Ведущий разработчик говорит, что последнее должно произойти, а затем не выполняет его.
Том W
когда он говорит, что хочет прототип, он имеет в виду минимальную рабочую версию и как можно быстрее. Это будет основой для окончательной версии. Проблема с этим подходом состоит в том, что младшие разработчики (как правило) могут писать либо хороший код, либо могут писать код быстро, но редко могут делать и то и другое одновременно.
Кевин
2
Фред Брукс сказал: «Напиши один, выбрось, все равно будешь», сегодня это так же верно, как и 40 лет назад.
Mattnz
1

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

Майк Данлавей
источник
1

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

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

Майкл Браун
источник
«Вы определили кого-то в компании, кто« получает это »» LOL
Kenzo