Это сводится к тому, что я начал воспринимать как «Вечный конфликт» (между бизнесом и разработкой). У меня нет решения, так как эта проблема никогда не исчезнет, но вы можете сделать что-то, чтобы помочь смягчить последствия.
Люди часто не осознают, что, будучи инженерами, мы просто предполагаем, что проблема «успешного бизнеса» - это всегда само собой разумеющееся. Мы хотим, чтобы наш код был красивым, аккуратным и обслуживаемым, чтобы мы могли добавлять новые функции и быстро настраивать уже существующие, и при этом минимальное количество клиентов будет выполнять QA за нас, обнаруживая причудливые незначительные случаи, которые были бы сорваны лучшим кодом. Удовлетворение клиентов и поддержание конкурентного преимущества с помощью функций и изящества, которые никто другой не может производить достаточно быстро, - это и деловые победы, благодаря которым хороший код вносит непосредственный вклад, и во многом объясняет причину, по которой мы хотим улучшить код.
Так разберись. «Мы хотим использовать X в нашей кодовой базе, потому что если мы этого не сделаем, это отрицательно скажется на бизнесе из-за Y» или «... потому что это повысит нашу способность оставаться конкурентоспособным, улучшая нашу способность быстрее превращать новые улучшения и функции «.
И приложите все усилия, чтобы попытаться получить реальное доказательство того, что улучшения работают. Если улучшение какого-либо подмножества приложения привело к более быстрой функциональности / улучшению, проверьте любой инструмент невыполненных работ, который вы могли бы использовать, чтобы подтвердить это, и укажите это на соответствующих собраниях.
- Получить команду на той же чертовой странице
Эго часто являются проблемой. Одна вещь, которая очень нужна командам разработчиков, - это установить ценность согласованного согласованного подхода к решению определенных типов проблем, когда каждый выпивает свою чашку Kool Aid d'jour, потому что они знают лучше. Можно полагать, что предпочтения другого парня хуже, чем у вас, но цените последовательность, а не правоту, если его подход выполним, и это аргумент, который вы не можете победить. Компромисс ради последовательности является ключевым. Когда вещи согласованы, сделать их неправильно сложнее, так как последовательный установленный путь обычно также будет самым быстрым.
- Подберите правильные инструменты
Есть две школы фреймворков / наборов инструментов / библиотек / что угодно. «Сделай для меня 99%, так что я должен знать / делать очень мало» против «держись подальше от меня, когда я не хочу, чтобы ты был там, но помогай мне самому быстро и последовательно делать вещи, которые я действительно хочу использовать на моркови, а не придерживаться принципа ". Пользуйся вторым. Гибкость и детальный контроль никогда не должны приноситься в жертву на алтаре быстрого поворота, потому что, по сути, «мы не можем сделать это, потому что наши собственные инструменты не позволят нам» никогда не будет приемлемым ответом, и вопрос всегда будет возникать для разработка тривиального / одноразового продукта. По моему опыту, негибкие инструменты почти всегда ломаются широко или обходятся нелегко и создают огромный гигантский бесполезный беспорядок. Чаще да, чем нет, Гибкие / легко изменяемые решения такие же или почти такие же быстрые в краткосрочной перспективе, независимо. Быстрое, гибкое и удобное в обслуживании возможно с помощью правильных инструментов.
- FFS, если инженеры не решают, по крайней мере получить вклад инженера при выборе инструментов
Я понимаю, что это вопрос с точки зрения разработчика, но я слишком часто сталкивался с ситуациями, когда технологические решения принимались без участия инженера. Что это за фигня? Да, кто-то в конечном итоге должен сделать последний звонок, но получить квалифицированное мнение, если вы не технический менеджер, а не то, что говорит какой-то продавец или демонстрационный сайт о своих собственных продуктах. Все, что обещает сэкономить ваши деньги, потому что люди не должны быть такими умными или потому что это защищает разработчиков от себя, является грязной, грязной ложью. Нанимайте таланты, которым вы можете доверять. Объясните им, что вы хотите от стека или другого технического решения, и серьезно отнеситесь к их мнению, прежде чем решить, на какую техническую подножку перейти.
- Сосредоточиться на дизайне над реализацией
Инструменты предназначены для реализации и, как таковые, они могут помочь вам, но первоочередной задачей должна быть архитектура независимо от того, какой набор игрушек у вас есть для построения этой архитектуры. В конце концов, KISS и DRY и все отличные философии, которые берут свое начало от этих вопросов, важнее, чем то, находится ли он в .NET или Java, или, может быть, что-то бесплатное И не отстой.
Когда деловая сторона настаивает на том, что вы делаете это плохим способом, сохраните это электронное письмо, особенно ту часть, где вы сказали, почему это будет стоить вам. Когда все ваши прогнозы сбываются, и в результате возникают серьезные проблемы, наносящие ущерб бизнесу, именно тогда у вас появляется масса аргументов для более серьезного отношения к инженерным проблемам. Но время все тщательно. В середине пылающего адского периода - неподходящее время для "Я сказал тебе так" при следовании кодексу огня. Потушите огонь и перенесите свой список ранее проигнорированных проблем на ретроспективную встречу / беседу, и постарайтесь сосредоточиться на выраженных и игнорируемых инженерных проблемах и на том основании, что вы поняли, почему их игнорировали, а не на именах реальных людей. Принятие решения игнорировать. Ты инженер. Оставайтесь на проблемах, а не на людях. " Мы выразили озабоченность по поводу X, потому что мы боялись, что это приведет к проблемам Y. Нам сказали Z и отложить дело с этим ".