Я технический референт, но потерял лидерство по техническим решениям

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

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

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

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

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

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

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

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

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

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

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

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

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

-------ОБНОВЛЕНИЕ------- 15/11/2016

Я только что разговаривал с клиентом (директором компании) об этой ситуации.
Теперь я все понимаю:

Они явно не знали, что я работаю здесь от имени собственного предприятия под названием «ХХХ».

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

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

В моем контракте с этим хедхантером было написано, что я буду действовать как представитель ХХХ, а не как «Майкл».

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

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

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

Хороший урок для меня.

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Это первый раз, когда вы были в роли фрилансера/подрядчика?
@mcknz Впервые для большой компании. У меня было много внештатных миссий для небольших компаний, таких как стартапы или компании с менее чем 10 сотрудниками.
Ключевой вопрос в том, что они провели совещание о вас без вас. Это должно сказать вам, что (а) они некомпетентны как лидеры или (б) они не понимают вашей ценности (что является некомпетентностью другого рода). Не самое лучшее место.
@ Mik378 имеет смысл - в небольшой среде вас, скорее всего, пригласят в качестве специалиста / эксперта. В крупной компании чаще всего вас нанимают в качестве пополнения штата, выступая в качестве индивидуального участника. Похоже, это не та работа, которой ты хочешь заниматься.
Да, я полностью согласен.
Я так понимаю, у больших компаний мало гибкости
Неважно, были ли вы наняты непосредственно вашей компанией или через зонтичную. Вам назначена роль, и такая характеристика не изменит (не должна) ее. Мне кажется, что вместо этого это было плохим предлогом для оправдания некоторых плохих технических решений от нетехнических/некомпетентных людей. С другой стороны, будьте скромнее, не думайте, что вы лучше остальных, потому что вы подрядчик: вы используете слова «президент», «охотник за головами» и «простой ресурс» для обозначения генерального директора, рекрутера и коллеги по работе. Производство программного обеспечения имеет очень важную социальную составляющую.
Изначально мне сказали, что я буду делать приложение полностью один. Через месяц со мной захотел работать еще один разработчик, и я согласился, и шеф тоже. Их предложение было: «Вы можете написать это заявление в одиночку?», я говорю: «Да», «Окей, поехали!» (он сказал мне). Поскольку проект был привлекательным, пока он развивался, он привлекал к работе других разработчиков. Фишка в том, что быстро код загрязнялся, я проводил ночи, чтобы очистить их работу. Я предложил научить их некоторым знаниям, сделать парное программирование, показав им советы и хорошие практики и т. Д., Но они явно не хотят.
Что вы имеете в виду под бесплатными уроками? Вам за них заплатили? Коллеги заплатили за них?

Ответы (8)

Эта строчка разрушила мое доверие к руководителям вашей фирмы:

Больше никакой разработки через тестирование и модульных тестов.

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

Это плохое программирование, плохой бизнес и выдает непонимание системного мышления. Таким людям нельзя доверять. Они не способны надежно принимать правильные решения в ЛЮБОЙ области бизнеса.

Без системного мышления лидеры в долгосрочной перспективе навредят вам.

Уберайся немедленно.

Комментарии не для расширенного обсуждения; этот разговор о достоинствах TDD перенесен в чат .
TDD не считается общепризнанным средством обеспечения положительного ROI. Его полезность спорна. Конечно, очень политически корректно заявлять, что TDD — это единственный путь, однако довольно трудно найти тщательное исследование, которое на самом деле обосновывает его полезность.
Однако модульные тесты @BradThomas не вызывают споров.
@BradThomas есть какие-нибудь ссылки/ресурсы, подтверждающие это утверждение?
@kazanaki ты программист? Должно быть очевидно, если вы. Наличие юнит-тестов — вот что важно. TDD, управляющий всем, вызывает споры, и на то есть веские причины. Это большая трата времени.
@sgroves "это большая трата времени" = "в проектах , над которыми я работал, это большая трата времени"

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

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

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

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

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

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

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

Я думаю, что комментарий, который я разместил ниже, может также прокомментировать ваш ответ.
Эти две строки должны быть выделены жирным шрифтом: «Составьте план с руководителями по внедрению современных методов разработки программного обеспечения с течением времени». & «Речь идет о поиске баланса между непосредственной производительностью и долгосрочными методами устойчивого развития». Они предлагают четкий путь вперед с взаимовыгодным выигрышем для всех заинтересованных сторон.
Очень хороший ответ ИМО. Не убегайте, пока не попытаетесь найти компромисс. Как джуниор, я бы сказал, что TDD сложно понять, и вы не можете реально попросить джуниора сделать TDD. Модульное тестирование важно, но не стремитесь к 100% охвату. Хорошо разработанных тестов по критическим точкам может быть достаточно. Имейте в виду, что они все равно могут писать плохие модульные тесты. Но, конечно, копипаста из старой версии и никаких юнит-тестов — это ересь. Убедитесь, что руководство понимает это.
А для консультанта «я помог компании x внедрить передовой опыт» звучит лучше, чем «я ушел, потому что меня не послушали». На всякий случай, если он справится с этим зверем сейчас, это будет бесценным опытом для будущих заданий.
@EtsitpabNioliv, честно говоря, я уже давно думал, что 100% покрытие тестами является анти-шаблоном (независимо от опыта команды). Количество дополнительного кода, написанного для модульного тестирования, в конечном итоге достигает точки уменьшения отдачи как от разработки функций, так и от обслуживания.
+1000. Мне потребовалось больше года, чтобы собрать команду, действительно занимающуюся TDD и CI. Пройдет еще 6 месяцев, прежде чем мы перейдем к непрерывному развертыванию. Дело в том, что для смены команды требуется время (и еще больше времени для смены компании).
Я только что обновил свой OP некоторыми новостями.

Я участвовал в этой битве более двух раз.

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

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

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

Японял твою точку зрения. Печально было бы слово так.
Я только что обновил свой OP некоторыми новостями.

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

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

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

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

Я только что обновил свой OP некоторыми новостями.
Я читаю твой ответ раз в месяц и каждый раз радуюсь этому ;)

Держите свои деньги там, где ваш рот. Оставлять.

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

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

В качестве альтернативы свяжитесь с вышестоящим и попытайтесь найти способ заставить все работать на приемлемом уровне. Хотя, возможно, они работают с людьми, которые скорее должны переворачивать гамбургеры в McDonalds — это видно во многих крупных компаниях. Однажды меня наняли обучать разработчиков VB C#. Учебная программа на один месяц сжата до 3 дней («мы не можем позволить им не работать в течение месяца, и все они опытные разработчики»). Ну, опытные разработчики не знали разницы между массивом и хеш-таблицей/словарем на фундаментальном уровне, поэтому все время было потрачено впустую. Это уровень в некоторых компаниях.

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

Я бы сосредоточился на разных вещах. Потому что:

Больше никакой разработки через тестирование и модульных тестов.

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

Нет таких требовательных проверок кода.

Это тоже понятно. ИМХО уровень требовательности нужно повышать постепенно, чтобы люди могли осваивать новые навыки.

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

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

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

Но больше всего меня тревожит другая часть:

У нас была встреча (без меня так), и мы отказались от некоторых методологий, которые вы рекомендовали.

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

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

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

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

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

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

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

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

  1. Отсутствие целей:

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

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

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

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

Но если и есть что спасти, так это доверие и терпение. Если что-то,

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

Убедите людей быть на вашей стороне любой ценой, потому что, если вы не сможете этого сделать, ваша битва проиграна.

Я только что обновил свой OP некоторыми новостями.

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