Распознавание образов или как не наебать себя в выборе конторы для работы

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

В одном из прошлых выпусков было озвучено утверждение - “работа = 8 часов жизни, обменяные на деньги”. Исходя из этого простого факта и будем рассуждать о ценности конторы и желательности в ней работать.

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

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

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

Бизнес

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

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

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

Что подводит к совершенно четкому умозаключению:

  • если у лавки нет никакой цели, которая поддается SMART оценке
  • если бизнес-процесс зарабатывания бабла не определен
  • если в конторе нет бизнес-аналитиков (роль которых часто выполняют продакт-менеджеры) от слова “совсем”

то с бОльшей степенью вероятности на предметном столе исследователя находится

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

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

Маркетинг

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

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

Соответственно, если нет маркетинга - то нет юзеров. Если нет юзеров - то нет прибыли. Нет прибыли - ну вы поняли, доим инвестора до последнего, потом уходим в туман.

Итак, если в конторе нет

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

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

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

Маркетинг - это инструмент еще и получения обратной связи от пользователей, которые голосуют ногами и рублем.

Программинг

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

###Спецификации. Бытует миф, что хороший код в документации не нуждается. Это правда только отчасти - в документации не нуждается небольшой метод, который понять можно с первого прочтения. Или какой-нибудь сервисный слой из трех классов с внятными названиями. В случае же большого проекта, особенно над которым работает несколько команд - без документации никуда, потому как в любой момент любому тиммемберу может прилететь задача по компоненту, который он в глаза не видел. И тогда начнутся вопросы - а почему тут сделано именно так, а не иначе? И соблазны переделать все “по-своему”, с ненулевой вероятностью уебать вот вообще все, особенно в рантайме. Особенно это касается чуваков с типаопытом, которые уже не ссут подрихтовать чужой код, потому что корона уже не жмет, разносилась.

###Дисциплина. Это вовсе не то, что все приходят к 8, и уходят в 17. Хотя конечно доля правды здесь есть - если все чуваки приходят примерно в одно и то же время, то можно нормально запланировать всякие митинги и прочие активности, которые требуют коммуникации. Ну или как минимум если случился локальный пиздец и все умерло - то банально глядя на часы можно сразу понять - имеет смысл дергать Васю вопросами, или он уже валяется в отключке в пабе.

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

###Процесс. Процесс естественным образом вытекает из дисциплины. Если есть правила к стилю и качеству написания кода, то процесс регулирует собственно само написание кода. Как это все будет происходить? Когда пишутся тесты и на что? Как происходит выпуск фичи - хуярим сразу в мастер-бранч или делаем пулреквест? Или можно и так, и так? Процесс может быть хоть СКРАМ, хоть канбан, хоть черт в ступе - главное, чтобы он работал. Критерием работоспособности процесса является результат итерации, если они есть. Ну или еще какие артефакты.

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

  • S - specific. Делаем какую-то абстрактную хуйню в вакууме. Зачем - непонятно, просто так хочется.
  • M - measurable. Можем мы измерить вообще наш прогресс в направлении светлого будущего? Или просто копаем отсюда и до обеда?
  • A - achievable. Можем ли мы забубенить вот эту побубень в указанные сроки? Нет, но кого ебет?
  • R - relevant. А вообще надо эту побубень делать? Хотят ее юзеры? Или мы ее выкатим, и ею никто не будет пользоваться? (см маркетинг)
  • T - time-bound. Когда мы можем выкатить эту фичу? А почему мы так думаем, у нас есть какие-то метрики команды, или каждый дрочит с разной скоростью, потому момент эякуляции невычислим?

##Рекрутинг и хуман ресурсы

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

  • рекрутеры - ищут таланты
  • хуманоиды - делают так, чтобы таланты были счастливы в этой лавке, и не съебывали при первой возможности

Выхлоп рекрутеров обычно более-менее понятен, как минимум по тому чуваку, который будет делать вам техническое интервью. Тут оно или работает, или нет - чаще всего понабирают по объявлениям людей, которые больше нигде себя не применили ввиду собственной тупости. А даже самый тупой рекрутер может найти нормального программиста. Потому что закон больших чисел никто не отменял - если отослать 100500 приглашений кандидатам, то хотя бы один вменяемый найдется.

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

Зачем оно надо лично вам, знать про хуманоидов? А затем, что именно эти чуваки будут обеспечивать твой комфорт и счастье на рабочем блять месте. И если хуманоидов нет, или им все похуй, потому как они - бывшие сотрудники отдела кадров местного завода, сокращенные по разными причинам - то скорее всего вместо помощи они будут дополнительно ебать тебе моск, %username%, всякими перформанс ревью, различными тестами профессионального соответствия и чего там еще модного пишут в книжках. А если рекрутеры будут с суммарным IQ=36.6°С, то работать тебе в компании с инфузориями и прочими туфельками.

Резюме

Как резюме всему сказанному - прежде чем устраиваться на работу в лавку, поймите - а чем же лавка занимается, и не будет ли потом больно и обидно за потраченное время. Ну это если цель - не отсидеть жопой 8 часов и получить свои бабосики.