Четыре ошибки программистов, которые я осознал, только когда стал CTO

Автор оригинала: Jakub Górowski
  • Перевод
image

Я работал программистом более пяти лет. Не особо впечатляет, ведь кто-то из вас, вероятно, имеет в три раза больший опыт, но мне нравилось думать о себе как о сениор-разработчике. Звучит серьёзно и солидно, правда?

Однажды мне предложили стать Chief Technology Officer (CTO) в медтех-стартапе. Поработав некоторое время на этой новой должности, я могу обернуться назад и сказать, что не был сениор-разработчиком. Не поймите меня неправильно — я по-прежнему считаю, что обладаю отличными знаниями программирования, особенно веб-разработки; но если это так, почему я не думаю, что был сениором?

Всё это из-за четырёх заблуждений, которые у меня были.


Пользователь (?)

1. Пользователь — это идиот


Нет, он не идиот.

Да, пользователи работают с приложением неожиданными, часто странными способами.

Да, пользователи могут задавать вопросы, которые кажутся по-настоящему глупыми.

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

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

Пользователь — не специалист. Мой врач не требует от меня, чтобы я знал отличия между липопротеинами низкой и высокой плотности. Так почему я привык предполагать, что пользователь знает, каким браузером он пользуется? Это очевидно вам и мне, но моя мама считает, что Google и Интернет — это синонимы. Она бы сказала, что не пользуется никаким браузером, потому что использует Google.

Иногда чтобы удовлетворить пользователя мне нужно было переопределять части фреймворков для изменения их стандартного поведения. Иногда мне приходилось добавлять поддержку браузеров, которые я поддерживать не хотел (привет, пользователи Safari). Сегодня это кажется мне глупым, но в то время я действительно думал, что если мне приходится создавать в своём коде обходные пути для удовлетворения требованиям клиента, то в этом виноват клиент.


Выбираем самое лучшее имя для переменной.

2. Мой код — это произведение искусства, и он должен быть идеальным


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

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

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

Да, я согласился, что это в какой-то степени ускорит разработку, но был уверен, что это грозит кучей проблем в будущем. Мы потратим кучу времени на устранение регрессионных ошибок, а новая архитектура окажется слишком простой, когда масштаб проекта начнёт расти! И как мы будем знакомить новых программистов с проектом без хорошего readme?

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

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

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

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


Отношение моей старой команды к пробованию чего-то нового.

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


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

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

Помню проект, в котором самым важным требованием был хорошо работающий WebSocket. Что мы выбрали для создания бэкенда? Symfony, разумеется. Возможно, сегодня реализация WS на PHP будет выглядеть проще, но в то время это было кошмаром. Мы потратили много времени, чтобы заставить его работать. ОЧЕНЬ много. Мы знали, сколько времени (и денег) будет потрачено для создания WS на PHP, но мы отказались от идеи использования Node. Почему? Не могу сказать точно. На Node мы бы создали API в десять раз быстрее, но он не был в технологическом стеке нашей команды.

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


Что я думал о решениях менеджера по продукту.

4. Владелец продукта/менеджер по продукту ошибается, я бы сделал лучше


Когда я работал программистом, мои отношения с менеджером по продукту были… натянутыми. Каждый раз когда он говорил мне о новых изменениях в содержании задачи, я думал: «Почему ты не можешь сразу сделать свою работу и определиться с задачей до того, как я начну работать? Разве так сложно решить заранее, как должна работать фича?»

Это было так наивно, но я действительно считал, что всё так просто. Теперь я полностью понимаю, как сложно спланировать каждую деталь проекта. Нужно учитывать ограничения технологий и бюджета (что на самом деле одно и то же), необходимо думать о пользователях, которые будут работать с твоим продуктом, нельзя забывать о требованиях бизнеса и маркетинга. Иногда некоторые требования неизвестны в начале; иногда меняются обстоятельства у бизнеса, а иногда нужно сначала что-то создать, чтобы понять, что это можно сделать лучше.

Ещё один аспект — менеджеры по продукту могут совершать ошибки. Да, всё так просто. Программисты создают баги и PM тоже. Сегодня это кажется мне настолько очевидным. Если бы я был программистом получше, то понял бы это раньше. Вместо того, чтобы пытаться доказать, насколько он ошибается, мне нужно было сосредоточиться на поиске решений.

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

Подведём итог


Для кого-то из вас эти четыре пункта могут оказаться очевидными. Если вы работаете в отличной организованной agile-команде с хорошим руководителем и не забываете основные правила UX, то я искренне рад за вас. Наверно, вы можете быть гораздо лучшим программистом, чем был я. Ведь чтобы «быть хорошим программистом», недостаточно только технических навыков. Гораздо важнее понимать, какую ценность ты можешь принести компании, и как это сделать. Теперь я понимаю определение сениор-разработчика следующим образом:

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




На правах рекламы


Подыскиваете VDS для отладки проектов, сервер для разработки и размещения? Вы точно наш клиент :) Посуточная тарификация серверов самых различных конфигураций, антиDDoS и лицензии Windows уже включены в стоимость.

VDSina.ru
Серверы в Москве и Амстердаме

Комментарии 60

    +8
    > На Node мы бы создали API в десять раз быстрее

    «Если бы знали его так же хорошо, как Symphony», почему-то автор забыл добавить.
      +1
      Это явно следует из контекста:
      Symfony, разумеется.

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

          При том, что Вы говорите правду, Вы вырываете её (понимаю, что случайно) из контекста, что приводит к ложному выводу.
            0

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

        0
        Работал с Symfony и нодой, в том числе с WS. Могу сказать, что для нужд стартапа backend API с поддержкой WS можно сваять очень быстро — есть множество готовых фреймворков куда проще того же Symfony.
        P.S. Судя по тому, что Вы пишете с ошибкой — «Symphony», с ним Вы не знакомы явно :).
          0
          Да это же перевод на скорую руку, типа translate google. Смесь из англицизмов, которые совсем не соответствуют нормальным разговорным англицизмам, которые все понимают. У меня от «менеджер по продукту» слёзы текут. «PM» называется, Product Manager. Ну, или переводите нативно: «Главный по работам».

          1. Пользователь — это идиот

          Это нормальная среда для разработчика UI с учётом UX. Причём всё постоянно меняется. Клиент никогда не виноват, мы для них или для себя это делаем? Золотое правило разработчика.
        +15
        Вот по поводу п.3 я бы возразил. Хорошо известный инструмент — это достаточно весомый аргумент, и если он походит для решения задачи, то лишь это вполне может стать решающим в выборе. В конце-концов, если вы не знаете условный Node.js, почему вы решили, что вы создали бы там что-либо в десять раз быстрее, если вам нужно
        а) выучить его
        б) сталкиваться с неизвестными вам «особенностями» в процессе реализации
          –6

          Да, поэтому банковский софт на Коболе, а в школе/институте изучают Паскаль. Потому, что "только их и знаем". Так и живём..

            +13
            А знаете, что самое забавное? Это не недостаток, как вы вроде бы считаете (ну разве что только в том плане, что специалиста по Коболу найти сложно).
            Паскаль — отличный язык для обучения азам программирования. Он простой, логичный и понятный. Стартовать с него легко, перейти на большинство других языков, кроме JavaScript'овых, тоже весьма легко.
            Ядро банковского софта же в массе своей делает элементарные операции, но делать оно их должно максимально быстро и максимально надёжно. Хотя насчёт Кобола вы скорее преувеличиваете, сейчас это где-то в единичных банках в США осталось разве что. Но все равно суть та же самая: это как раз та сфера, где основное правило при разработке звучит как «работает — не трогай».
              –8
              Про паскаль имело хоть какой-то смысл до появляние пайтона, а теперь смысла нет, пайтон простой логичный и понятный, так им еще и пользоваться можно
                +7
                Проблема Пайтона в том что после него, чтобы перейти на другой язык, вам придется начинать с 'нуля'. При том что Пайтон очень простой язык, он намного сложней обычного Си. После Паскаля перейти на Си просто, меняется синтаксис. После Пайтона переход на Си мучительный
                  +2
                  При том что Пайтон очень простой язык, он намного сложней обычного Си

                  image

                    +1
                    Крайне корявая фраза, но смысл верный. Python (и JavaScript, кстати) — крайне сложные, просто фантастически сложные языки (C++ или там Java отдыхают), на которых, тем не менее просто писать корявые, неэффективные программы.

                    Потому что они массу вещей скрывают. И вам про них, типа, “думать не нужно”.

                    И пока вас устраивает что “весь пар уходит в гудок” (99% имеющихся у вас ресурсов уходят на “простоту”) — всё отлично.

                    Но вот если у вас проект упирается-таки в ресурсы — то тут и возникает проблема: человек, начинавший с Pascal с этим разберётся (хотя и с матами), а человек, начинавший с Python — вряд ли.

                    А с другой стороны: так ли это часто кому-то нужно? Умение программировать на Python (или, прости господи, даже на Excel) — сродни умению водить автомобиль, в современном мире нужно почти каждому. А вот умение что-то делать на более низкоуровневых языках — это сродни умению этот самый автомобить оттюнинговать (или вообще сделать с нуля). Многим ли это нужно?
                      0

                      Думаю многие с вами не согласятся, особенно те, кто с ними работал по несколько лет. Я как раз такой, и как по мне, гоадация сложности здесь примерно такая: С — > С++ — > Java, c#, go, php, — > python, basic, pascal — > javascript, typescript, lua, bash — > asm, lisp, prolog, labview — это мой личный субъективный топ по сложности. Как по мне, web api, с которым обычно имеют дела через js, это по сложности просто букварь на фоне, скажем, STL c++ и того кол-ва синтаксического сахара, что там есть и который используется в 0.5% программ, и его все добавляют, хороший спец должен его знать и понимать...

                +1

                Сильно подозреваю, что финансовая часть постоплатного биллинга в Билайне до сих пор на коболе.

                  0

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

                  согласен, только это было актуально примерно лет 20-30 назад. Щас он остался только в советских школах, только потому, что "только его и знаем" :) https://habr.com/ru/company/skyeng/blog/555098/

                  Язык это же не только синтаксис, но и "экосистема" (тулинг, коммунити, вакансии, поддержка платформ). Для паскаля её на данный момент чуть менее, чем нету

                    +3
                    Язык это же не только синтаксис

                    Вам не нужно знать конкретные фреймворки и тулзы, чтобы научиться программировать. Тем более что в школе или там на первых курсах ВУЗа вы ещё понятия не имеете, что вам пригодится.
                      –2

                      так а смысл учиться программировать на заведомо мёртвом языке? Для которого и помощь актуальную не найти, бест практисы из 70х-80х в лучшем случае; тулзы из 90-х. Или вы предлагаете преподавать перфокарты, авось изучат сами потом компьютеры, неизвестно же, на каком будут работать. Или изучать латинский язык. Ну и что, что мёртвый, зато изучив его, можно потом изучить другие. Да и неизвестно, какой пригодится

                        +2
                        Ну и что, что мёртвый, зато изучив его, можно потом изучить другие.

                        после латыни очень легко изучаются испанский, итальянский, с некоторой натяжкой — французский.
                          +2
                          так а смысл учиться программировать на заведомо мёртвом языке?

                          Да просто потому, что это очень легко. Попробуте новичку объяснить, как работает хелловорлд на C# или Java. У вас в первой же простейшей программе будет куча понятий, которые вам надо будет сейчас «просто написать как есть», а потом в середине курса до них доберётесь. В Паскале такого нет, язык изначально создавался как учебный (Вирт его для продакшена и не позиционировал), где можно последовательно, от простого к сложному, изучить практически всё.
                            0
                            Вот, вот, рукоплещу! Все верно.

                            Добавлю только, что мне теперь начинает казаться, что Ада лучше. Она и в обучении хороша, и в жизни пригодится. Мне вот сейчас на нее пересесть и сделать хоть что-то — крайне сложно уже. Новички смогли бы.
                              0
                              У Ada ещё хуже с экосистемой, чем у Pascal. Начиная с Pascal хотя бы на Delphi или Lazarus можно пересесть и формочи поклепать немного.

                              А Ada заточена под вещи, которые моло кому нужны — всякие высокозагруженные надёжные системы, а банальных ORM к SQL фиг найдёшь.
                            0
                            так а смысл учиться программировать на заведомо мёртвом языке?

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


                            Для которого и помощь актуальную не найти, бест практисы из 70х-80х в лучшем случае; тулзы из 90-х.

                            Какие вам нужны бест практисы и тулзы, чтобы научиться писать циклы, рекурсии и сортировки?


                            Или изучать латинский язык

                            Еще раз повторю, вы изучаете не язык, а алгоритмизацию. Меня в автошколе учили водить на 21099. После получения ВУ я ни разу потом за руль 21099 не сел, но я могу управлять любым другим массовым легковым автомобилем. Я не понимаю, почему вы так зацикливаетесь на языке, я их штук 15 разных использовал за свою карьеру, точно не помню даже, и к Паскалю вот вообще никакого негатива не испытываю.

                          +4
                          Язык это же не только синтаксис, но и "экосистема" (тулинг, коммунити, вакансии, поддержка платформ).

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

                            +1

                            см выше

                      0
                      Именно так. А исходной предпосылкой является кнутовское «Преждевременная оптимизация — корень всех зол». Он говорил, правда, про программирование, а не про разработки вообще или управление разработками вообще, но суть та же. Ну и это вот «Самый короткий путь — который ты знаешь» сюда же.
                        0
                        Весомый, безусловно. И вот тут появляется необходимость весьма тщательно оценивать и другие инструменты, потому что чем выше лежит ошибка (неудачный выбор архитектуры, стека и т.п) — тем дороже эта ошибка будет стоить.
                        +3
                        «Я буду использовать для этого проекта «X», потому что знаю его»
                        Это не заблуждение, это очень хороший аргумент. Просто нужно помнить, что он не единственный и не исчерпывающий.
                        Можно сформулировать его так — «Для решения задачи можно использовать «X»,«Y»,«Z», из них Я лучше всего знаю «Y», поэтому буду использовать его»
                          0

                          Это ещё и весомый аргумент, но, опять, не всегда он может перевесить другие

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

                            Пример в п 2 как бы говорит — не бойтесь писать без тестов. Кроме того, там сказано, что проект развалился — так может, низкое качество результата после отказа от тестов было причиной? Звучит как: ты живешь в хорошем районе, ходишь в дорогой супермаркет, ты слишком закрыт для всего нового, попробуй коробку из-под холодильника и помойки! Не хочешь? Ты закрыт для всего нового! Все равно попробуешь.… Ой, и правда, лучше не стало. Ну извини.

                              +12
                              Вообще, я могу достаточно уверенно сказать, что вы ошибаетесь. Если речь идёт о выпуске MVP, то писать тесты — это одно из самых худших вложений ресурсов разработки, которые только можно придумать. «Окупаемость» тестов практически в 100% наступает после какой-то достаточно отдалённой стадии развития и усложнения проекта, и соответственно каждый написанный тест во время разработки MVP — это просто время, на которое вы отодвинули получение инвестиций в ваш проект. И очень хорошо, если вложенных в пресейл средств хватит на подобное баловство. А может и не хватить.
                                –3

                                Нельзя так просто взять, и сказать, что тесты для MVP - говно. Или - наоборот, серебряная пуля.

                                Я могу привести примеры проектов, где тесты только тормозили замену логики работы фич, и примеры проектов, где потраченный на автотест час экономил 8 человеко-часов команды на реопен бага и перетесты.

                                  +1
                                  и примеры проектов, где потраченный на автотест час экономил 8 человеко-часов команды на реопен бага и перетесты.

                                  Это был точно MVP? ;) И даже если вдруг так (хотя сильно сомневаюсь), это один частный тест. А сколько команда сэкономила бы, если бы тестов в MVP вообще не было, ни этого за 1 час, ни десятков других, каждый тоже по часу-два-три?
                                  –1

                                  Если речь идёт о выпуске MVP, то писать тесты — это одно из самых худших вложений ресурсов разработки

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

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

                                  Если тесты написаны грамотно, то они также будут полезны при написании уже production решения.

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

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

                                    Ну так для этого тесты ведь не нужны. Тесты нужны, чтобы оно выполняло бизнес-задачи качественно. А ещё они нужны, чтобы в крупном проекте внесение новых изменений не ломало существующий функционал. Т.е. всё то, чего от MVP не требуется в принципе.
                                      0

                                      Хм. Тогда мы просто разный смысл вкладываем в понятие MVP.

                                      Вот про PoC я бы с вами согласился.

                                        0
                                        MVP — это то, что можно продемонстрировать, заинтересовать и заключить контракт на разработку. PoC — это просто проверить/показать работоспособность идеи. Да, первое обычно сложнее второго. Но тем не менее, требования к MVP совершенно не те, что к продакшену, это по сути просто дорогая разновидность пресейла. И в порядке вещей MVP вообще полностью переписать, если проект получил «зелёный» свет.
                                    –1

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

                                    По моему опыту, 80% ошибок, находимых юнит тестами, находятся на этапе реализации модуля, когда он ещё не написан до конца/неправильно. Не знаю, как вы, а я правильный код с первого раза без проверки не могу написать

                                  +6

                                  Автор был инженером с узким кругозором, стал CTO и понял, что у него узкий кругозор/узколобость.

                                  Выглядит как мировоззрение джуна, которого внезапно произвели в CTO.

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

                                    +3
                                    Ну может не джуна, но как минимум он пропустил роль тимлида и менеджера и сразу стал CTO, что довольно странно.
                                      0
                                      Может он CTO в компании где 3-5 разработчиков. Как раз и получается тимлид средней команды.
                                    +6
                                    Статья похожа на стеб, в стиле «антипаттерны», став СТО автор осознал ошибки. которые ошибками не являются.

                                    Вот они 4 пункта:

                                    • Кто-то начинает проект с отсутствием бюджета, а потом «давай-давай» надо в срок. Потом всем опционы раздам.
                                    • Владелец продукта не может описать видение фичи — потом доделаем, прикроемся аджайлом и его итеративностью.
                                    • Менеджер забивает на тесты — и так работает, сэкономим, тем более вообще непонятно зачем они.
                                    • И да, вишенка на торте — давайте возьмем технологию X — шеф что-то слышал на конференции про нее крутое. Ничего что экспертизы ноль.
                                      –1
                                      Приводятся врачи как образец не тупого пользователя. Ну еще бы, у них образования в несколько раз (а то и на порядок) больше чем у программистов, иной раз больше, чем у всего отдела вместе взятого. Они решают сложные и важные задачи, они типа прослойка интеллигенции: ) Разумеется, врачи умнее и имеют более высокий IQ, чем, скажем, продавец или кассир или таксист. Так что вывод хоть и правильный, но основан на нестандартных данных. Далеко не все пользоватали и врачи. И многие из них, увы, интеллектом не блещут. Что, с другой стороны, не дает повода не считаться с ними.
                                        +1
                                        CTO стартапа из 3 человек… хоть бы уже не позорился лычкой и экспертным мнением. Хотя учитывая как он считал себя «синьёром»…
                                          +5
                                          Типичная история, как только человек переходит из разработки в менеджмент, то оказывается и архитектура продуманная не нужна, и юнит-тесты не нужны и документация бесполезна. И вообще надо было MVP фигакс-фигакс в продукшен.

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

                                          Уважаемый СТО, давайте каждый специалист будет заниматься своей зоной ответственности.
                                            +1

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

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

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

                                              Ну да, вот только делать они это будут, как правило, в своё рабочее время, в своём уютном рабочем кресле, и за хорошую рыночную зарплату.
                                              И знаете что? Если не выпустить MVP фигакс-фигакс в продукшен, не показать его как можно раньше заказчику и не пропихнуть проект, чаще всего уютные рабочие кресла и хорошую рыночную зарплату этим разработчикам придётся искать уже в каком-то другом стартапе. Вот такая вот зараза, этот рынок.
                                              Манагеры, они далеко не всегда такие вот тупые. Они просто код рассматривают не с позиции «насколько интересно его писать и ненапряжно сопровождать», а с позиции «принесёт он прибыль или нет».
                                                0
                                                в своё рабочее время, в своём уютном рабочем кресле, и за хорошую рыночную зарплату

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

                                                  Именно так
                                                  Менеджеры в любом случае будут топить за реализацию функциональных требований

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

                                              ИМХО пункты 2 и 3 про одно и то же, только с разным знаком.


                                              старый всем известный анекдот

                                              Решили проверить уровень интеллекта у человека и обезьяны. Подвесили вместо люстры банан и завели в комнату обезьяну, обезьяна увидела банан и начала прыгать безрезультатно пытаясь достать его тут раздается голос "думай!". Обезьяна остановилась, подумала, огляделась увидела в углу стол, придвинула стол, залезла на него и достала банан. Следом в ту же комнату завели мужика, а вместо банана подвесили бутылку водки. Мужик попрыгал, попрыгал бутылку достать не смог. Тут опять раздается голос "думай!". Мужик остановился, подумал, огляделся, почесал репу и молвил "Че тут думать? Тут прыгать надо, а не думать!"


                                              так вот, пункт 2 про «прыгать надо», пункт 3 — «думать надо».

                                                0
                                                Годы спустя я вынужден признать правду: наша команда совершила огромную ошибку. Мы думали о будущем и позабыли о настоящем. Мы совершенно игнорировали обстоятельства — ограниченный бюджет и необходимость создания MVP за короткое время.
                                                а без юнит тестов точно бы справились?
                                                  0
                                                  Без юнит тестов и прочих необязательных вещей они могли успеть запустить MVP, прежде чем кончился бюджет. Лучше запускаться без тестов, чем вообще не запускаться, не находите?
                                                    0
                                                    Может лучше владельцем бизнеса браться за те идеи, на которых у них хватит денег? И хватит с запасом, а не так, что «мы тут посчитали, получилось 10 миллионов, вот ровно столько у нас и есть»
                                                      0
                                                      У 100% стартапов которые я знаю как запускались(а знаю я не один десяток), до MVP ни один не выдержал предполагаемых сроков. Соответственно, и бюджет превысили. Битые стартаперы уже заранее это знают и закладывают 20-30-50% времени/денег плюсом, но есть масса нюансов, да и инвесторы — живые люди с эмоциями. Если кто-то заявляет точную сумму для запуска стартапа, например 10 лямов 100 рублей, то это либо проходимец, либо глупый человек.
                                                  0

                                                  Del

                                                    –1
                                                    Годы спустя я вынужден признать правду: наша команда совершила огромную ошибку. Мы думали о будущем и позабыли о настоящем. Мы совершенно игнорировали обстоятельства — ограниченный бюджет и необходимость создания MVP за короткое время.

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

                                                    Да сколько можно доказывать эту чушь…

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

                                                    Хватит на плечи программистов перекладывать ответственность за бизнес!

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

                                                    По этому любой опытный программист знает, что слова «нам по быстрому, качество на втором месте» — это развод программиста. Про качество обязательно вспомнят (если проект продолжит жить) и спросят.

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

                                                    И эти особенности должно в первую очередь понимать руководство. Иначе, с тем же успехом, оно может нанять 1С-программиста, посадить его делать web-фронт, а потом удивляться плохому результату.

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

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

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

                                                    Но ещё лучше успешно завершать проекты

                                                    Серьезно? Мне вот, как программисту, лучше получать большую зарплату. А для этого мне нужно уметь делать качественные, сложные, высоконагруженнные проекты, с высоким уровнем надежности.
                                                      0

                                                      какую ценность ты можешь принести компании

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

                                                        0
                                                        В статье рассказывается о превращении хорошего программиста в «эффективного менеджера» так, как будто это что-то хорошее.

                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                        Самое читаемое