{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

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

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

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

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

Мы уже тогда говорили на разных языках, но похоже, они приняли положительное решение ещё до собеса — статья внушила им, что я подхожу команде как человек. Мои скиллы их не особо интересовали. Наверное, ребята думали, что все хорошие программисты пишут код одинаково.

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

Я сразу сказал прямо — это не код, это дырявый пакет с мусором, мы всё здесь к чертям перепишем.

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

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

Как у любого стартапа, у этого был ограниченный бюджет. И я убедил всех, что его надо тратить на правильный код, продуманную архитектуру и глубокое тестирование. «Это самая правильная инвестиция, — настаивал я. — Знаете, почему 90% стартапов схлопываются? Потому что у них все начинает валиться из-за ранних ошибок, и весь бюджет уходит на латание дыр в прототипе, из которого они решили растить продукт, не переписывая. А могли бы разрабатывать новые фичи».

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

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

«Эй, вы меня наняли, чтобы повысить качество разработки — мы его повышаем». Но это моя логика. Кроме логики есть ещё эмоции, и я начал сопереживать. На самом деле я понимал, что им не нужно качество. Если вы любите работать на результат — попробуйте меня понять. Представьте, что вы попали в компанию вечного процесса, где релиз вечно откладывается все дальше и дальше, и вы начинаете понимать, что никто к нему особо и не стремится. Как быстро вы сбежите?

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

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

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

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

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

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

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

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

Если ваш кандидат на должность СТО рассказывает про программирование с горящими глазами, часто говорит об архитектуре, фреймворках и прочем — это тот самый парень. И от него будут одни чертовы проблемы.

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

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

0
397 комментариев
Написать комментарий...
Alex Chernyshev

Статья гарантированно напугает всех кто считает деньги,
поэтому думаю надо дать ряд пояснений для 'непричастных':

"Костыль"/быстрое решение/hotfix - с точки зрения последующих затрат это натурально множитель. Множество костылей и является тн. 'legacy code', по факту.
Каждая следущая добработка в проекте с костылями будет стоить не Х часов разработки а Х * коэффициент костылей.
Вот пример для иллюстрации:
Стоит задача реализовать загрузку файлов картинок через веб-форму,  для генерации и отдачи preview. Задача в такой постановке банальна, посему отдается фрилансеру и делается за день.
Дальше нужно "доработать" загрузку больших картинок, скажем от 1Гб. Все, вы попали на пару месяцев работ, т.к. нужно делать асинхронную загрузку, с прогрессом, с паузой и отменой, с обработкой разрыва связи. Саму генерацию preview нужно тоже докручивать, тк ничего стокового при таких размерах работать не будет.
Дальше нужно добавить "всего лишь" генерацию превью PDF/DOCX какого-нибудь - и вы попали еще раз и сильно, потому что там внутри есть страницы, те на выходе вашего замечательного решения нужен не один сгенеренный preview а несколько. А вы уже например привязали биллинг к количеству сгенеренных пользователем превью.

Т.е всего лишь пара небольших доработок (с точки зрения бизнеса) и проекту на уровне MVP - кабздец, ну либо увеличение бюджета раза в три.

Что было бы если вместо быстрого решения было сделано продуманное?
Месяц-полтора тяжелой работы, зато все последующие доработки - с предсказуемыми сроками, без авралов и выхода за границы бюджета.

Так что не стоит так сразу кидать кирпичами в каждого предложившего рефакторинг - не каждый врач вам враг, даже если таблетки горькие :) 

Ответить
Развернуть ветку
Ingvar K

Идея хорошая, но в реальности будущее неопределенно.

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

Траты на рефакторинг это не просто -1 месяц работы команды, за этот месяц бизнес мог бы добавить новых фич (пусть и на костылях) и привлечь больше пользователей. т.е. стоимость рефакторинга умножайте на 2. 
Сам рефакторинг тоже не 100% страховка от того, что не придется всё выкинуть нафиг и не рефакторить снова, если требования сильно поменяются.

Поэтому хороший разработчик не должен писать хороший код в вакууме.
Нужно задавать вопросы:
Зачем этот код нужен? Как он будет использоваться? Какая планируется нагрузка сейчас и через год? Какие планы у бизнеса? и т.п.
И исходя из ответов и собственного опыта (ведь бизнес сам часто не знает точно или обманывает сам себя) предлагать эффективное решение  (цена=время/качество)

_______________________

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

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

Ответить
Развернуть ветку
Alex Chernyshev

'Траты на рефакторинг это не просто -1 месяц работы команды, за этот месяц бизнес мог бы добавить новых фич (пусть и на костылях) и привлечь больше пользователей'

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

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

Ответить
Развернуть ветку
394 комментария
Раскрывать всегда