Недавно вышла статья, мимо которой я не мог пройти — "Программист не должен решать задачи бизнеса". Неожиданно мой комментарий вырос до мини-статьи. Я не согласен с мнением автора статьи, все сказано ниже ИМХО, с удовольствием подискутирую в комментариях. Сразу замечу, что я веб-разработчик, и все примеры я привожу в контексте своего опыта.
Лычки
Думаю стоит начать с лычек. К сожалению, 3 известнейших грейда не имеют четких определений, каждый человек и компания определяют требования индивидуально, границы которых размыты, а иногда это приобретает неожиданные обороты. Поэтому для начала стоит определить, что я понимаю под этими понятиями.
Juinor — тут меньше всего проблем с определением, начинающий программист, который только-только выучил теорию, возможно, сделал пару pet проектов. Ну или только выпустился из университета.
Middle — Middle — опытный программист. Разбирается, а не просто знает стек-технологии, которые использует каждый день.
Senior — это опытный программист, который обладает большим разноплановым опытом, имеет "production" работы на нескольких стеках и обладает "насмотренностью", обладает опытом в смежных областях (например: я считаю нормой, когда Senior Web может обладает навыками администрирования), спокойно может перейти с одного фреймворка на другой или даже с языка на язык без сильной просадки.
Хочешь не хочешь
Программист, хочешь или не хочешь, решает проблемы бизнеса. Всегда, но есть редкие исключения. Нужно понимать, что работа по найму или работа на себя — это всегда товарно-денежные отношения. Бизнесу нужно получать прибыль, с этой прибыли в том числе платится зарплата сотрудникам. Из этого также следует, что для получения прибыли нужно решать проблемы (ну или можно сказать — решение задач бизнеса). Программисту же нужно на что-то жить, и желательно не плохо. Так же нужно понимать, что "пользу" бизнесу (или решать его проблемы) можно приносить по-разному — как косвенно, так и напрямую.
Как это происходит
Давайте разберем классический кейс, и на его примере посмотрим, как происходит решение проблем бизнеса. Прилетает задача — нужно сделать новый сайт, ничего особенного. Если упростить, то задача прилетает по такой цепочке: руководитель компании -> 1-& руководитель более низкого звена -> менеджер -> Тим Лид и дизайнер (как правило два разных отдела, поэтому задача ставиться параллельно) -> senior и/или сразу всем исполнителям. Есть два варианта дальнейших действий:
Кейс 1. Можно просто делать, что скажут, "тупо кодить" — то есть просто все делают в рамках своих прямых обязанностей — Тим Лид обсуждает с бизнесом и заводит задачки в джире, senior продумывает архитектуру и берет на себя наиболее сложные участки, junior верстает, а middle делает обычные задачи, возможно, и сложные вещи вместе с Senior (для упрощения, все Full Stack).
Кейс 2. Перед тем, как взять в работу, организуется несколько совещаний, на которых Senior с Тим лидом, дизайнерами и руководством обсуждают подробно проблему бизнеса. И даже не просто, как решить, а как решить эффективно для всех — и для бизнеса, и для разработчиков, и для дизайнеров. Находится золотая середина, устраивающая всех, и только после этого начинается уже собственно разработка.
Что в итоге?
В рамках первого варианта, когда все "тупо кодят" — в итоге решается проблема бизнеса. Другой вопрос, что она решается не эффективно — 100% срывы сроков, костыли, передача ответственности друг другу, потом, как правило, очень долгое исправление правок и добавление "новых пожеланий заказчика". Все потому, что делали задачу, как поставил ее бизнес. Никто не сказал, что так не нужно делать — все работали как "винтики" в рамках своих компетенций и не лезли решать проблему бизнеса. Здесь не было команды. После таких проектов, как правило, отношения к разработчикам не очень. Бизнесу важен результат. Умные руководители после этого как раз нанимают Senior, которые готовы решать проблемы бизнеса.
А теперь рассмотрим второй вариант. В этом случае максимальное количество подводных камней, которые случаются всегда, удалось решить командным взаимодействием. Не говоря уже о том, что разработчики могут кардинально изменить реализацию проектов, потому что бизнес может понимать неправильно что для этого нужно. Возможны ли в этом случае проблемы? Конечно, многое зависит от компетенций, но их точно будет несоизмеримо меньше. В этом случае также решается проблема бизнеса, но эффективно.
Инфраструктурные проекты
В комментариях к статье, ссылку на которую я приводил в самом начале, советуют перейти на инфраструктурные проекты. Что там как раз можно просто кодить. Это обманчиво. Разработчики так же решают проблемы бизнеса, внутренние. Это точно такие же товарно-денежные отношения. И проблемы такие же, как и при работе над внешним продуктом компании. Другой вопрос, что, как правило, инфраструктурные проекты пишут по первому кейсу. Отсюда и результат. Но даже здесь решаются проблемы бизнеса, и программист принимает участие в решениях.
Команда
Основное отличие первого и второго кейса даже не в реализации, а в команде. И под командой я подразумеваю не пару кодеров, которые реализуют проект, а всю компанию. В первом случае — просто отсутствие команды, во втором ее присутствие — все работают совместно, чтобы получился хороший результат. Понятно, что есть много допущений, но мир в целом не идеальный.
Решение проблем бизнеса != продажи
Я не знаю почему, но часто решение проблем связывают с продажами. Да, зачастую многие задачи с ними связаны, но это только один из факторов и зачастую не самый важный.
Программист не должен задумываться о том КАК будут продавать, но он должен задумываться о том ЧТО будут продавать. От принятия чисто архитектурных решений (которые зачастую Senior и продумывает), скорости отклика, логики работы, дизайна (да, перед его разработкой программисту НУЖНО участвовать в проектировании интерфейса) и т.п. — зависит качество конечного продукта. Даже инфраструктурный проект продают, но внутри компании. От качества конечного продукта зависит эффективность компании и соответственно персональные плюшки (не только материальные).
Исключения
В самом начале статьи, я говорил, что программист хочет не хочет — решает проблему бизнеса, но есть исключения. На мой взгляд единственное исключение, это pet проекты. То, что ты делаешь для себя. С натяжкой можно взять OpenSource, но там часто получается, что твой коммит решает проблему бизнеса, но не твоего.
Вывод
Программист ДОЛЖЕН решать проблемы бизнеса? Да, должен. На уровне своих компетенций, должности и опыта. Программист должен ПРОДАВАТЬ? Нет конечно, хотя навык далеко не бесполезный, особенно на высоких позициях. Можно ли просто кодить? Конечно, можно. Может ли Senior просто кодить? Нет, на просто кодить можно взять мидла.
fiftin
Тогда уж так «все должны решать проблемы бизнеса». Рабочий на заводе тоже решает проблемы бизнеса.
lair
Ну, в каком-то смысле, это именно так.
(особенно если вместо "бизнеса" поставить "потребителя")
Amokmorg
на самом деле там треугольник: бизнес — клиенты — сотрудники. решать надо «проблемы» всех 3 частей.
и да, бизнес это не всегда про «продать» товар, это вполне может быть и благотворительность или какой нибудь исследовательский. тогда и цели/проблемы другие.
acyp
Четыре части!!! Себя! Себя же забыли!
Kobystan
Есть байка о рабочем на оптическом заводе. Кажется про Германию
начала 20 века. Он полировал внутреннюю поверхность какого-то прибора которая не влияла на работу прибора и не была видна потребителю. Когда его спросили зачем он это делает, полировка ведь не будет видна. Он ответил, что бог-то видит.
Мотивы как работников так и потребителей, которые в другой ипостаси работники, в какой-то мере иррациональны. Наука о человеке не точная наука вообще ни разу.
Сеньоры и миддлы, решая проблемы бизнеса, создают проблемы которых до решения проблемы у них не было. В долгосрочной перспективе игра с нулевой суммой. Все умрут, солнце погаснет. У потребителя и у работника должны быть какие-то общие долгосрочные цели, что-бы игра для них была вин-вин.
lair
Какие у меня долгосрочные общие цели с неизвестной мне компанией в Новой Зеландии, которая кому-то продает молоко, пользуясь продуктом, в разработке которого я участвую?
McDuk
Кто платит деньги за продукт — тот и потребитель.
Если деньги вам идут непосредственно от новозеландской конторы — пожалуй, да, общие цели у вас есть.
lair
Кому платит?
Какие же?
McDuk
Ваша зарплата из каких средств формируется?
У вас — продолжать получать деньги. У них — продолжать делать свою работу с помощью вашего продукта. Но это не точно.
lair
Оу, это длинная цепочка. Новозеландская контора платит не мне, и даже не моему работодателю.
Так это же две разные цели, а не "общая цель".
McDuk
Человечество придумало много разных вариантов товарно-денежных отношений, не все можно описать одной фразой ;)
Ну нет и ладно ;) Можно сказать, что общая цель — продолжать заниматься тем же. Стабильность, наше всё. В древнем Риме у патрициев и рабов были общие цели? Но Рим просуществовал дольше, чем любая экономическая теория.
lair
Тогда непонятно, зачем уточнение "если деньги вам идут непосредственно от новозеландской конторы".
Неа, она не общая, она раздельная.
Иначе заявление "У потребителя и у работника должны быть какие-то общие долгосрочные цели" выше теряет всякий смысл.
McDuk
Это если хочется найти соответствие между четким и простым утверждением из учебника и унылой реальностью. Если хочется найти несоответствие — так и 2**2 == 3.999(9) на некоторых калькуляторах.
grossws
В такой записи — и в математике вполне тождественны
ArRnorets
Денег заработать, очевидно же.
lair
В этом смысле "у потребителя и у работника" (почти) всегда есть "какие-то общие долгосрочные цели".
Flammar
Цели — не знаю, интересы — да много. По крайней мере, в высокой конъюнктуре рынка и низких транзакционных издержках.
Вообще, интересно, вы своим вопросом «подсветили», что мне лично мало нравится слово «цель», и почему это так (термин «долгосрочная цель» напоминает оксюморон).
lair
Какие же?
SadOcean
Так рабочий и решает проблемы бизнеса, просто самые базовые.
Flammar
Скорее, не проблемы, а задачи.
Big_Shark
Представляете себе, был как-то завод у мало известного господина Форда, так вот на этом заводе, любой мог подойти к нему, и предложить идею о том как и что можно изменить и улучшить, и если идея была хорошей и приживалась, то за это можно было получить и бонусы, и повышения. Так к чему это я, эти рабочие получается тоже думали как решить проблемы бизнеса?