Метка: рост

  • Почему не нужно нанимать джунов

    Почему не нужно нанимать джунов

    Почему не нужно нанимать джунов.

    Кажется, чтобы сэкономить на разработчиках нужно брать в команду джунов. Кажется — но нет.

    – Качество работы не дотягивает.
    – Скорость работы не прогнозируемая — джун застревает в любом месте.
    – Требуют квалифицированного наставника. А его время дорого, ведь наставник — хороший разработчик.
    – За ними приходится исправлять код старшим разработчикам.
    – Хотят “айтишную” ЗП и немедленно. Ведь на продаже курса обещали сотни тысяч!
    – Воспринимают нашу компанию как ступеньку и быстро уходят.

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

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

    Зачем и когда можно брать джуна в команду, расскажу в следующем посте.

  • QWERTY — чтобы ты медленно печатал

    QWERTY — чтобы ты медленно печатал

    QWERTY — чтобы ты медленно печатал.

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

    Что смещает SHIFT? Он приподнимал литеру — металлическую лапку с буквой — и она била по бумаге заглавной версией символа.
    Что блокируют клавиши Lock? Caps Lock на печатной машинке фиксировал механизм в режиме заглавных букв — лапки всегда били верхней частью.
    Enter — символ из стрелки вниз, а затем влево — обозначает перевод бумаги на новую строку. Отсюда и странная форма этой кнопки на большинстве клавиатур. Такой кнопки не было — был рычаг возврата каретки: движение вниз и влево, чтобы перевести бумагу на новую строку.
    Backspace — возвращал каретку на символ назад. Delete придумали позже — на печатной машинке ничего не удалить. Поэтому её отправили в дополнительный блок клавиш.

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

    Как можно догадаться, “пробег” пальцев при наборе текста был искусственно увеличен. Позже придумали альтернативные раскладки, где всё было логично и удобно. Самая популярная из них — раскладка Дворака. В любой операционной системе можно переключить клавиатуру на Dvorak, но купленная серийная клавиатура всё равно будет с qwerty-гравировкой.
    За десятилетия все привыкли к QWERTY — и смена раскладки для производителей оказалась слишком рискованной. А мы потеряли скорость набора и обучаем следующие поколения на “плохой” раскладке.

    А как быстро и точно вы набираете текст? Проверить можно на сайте https://monkeytype.com/
    Присылайте ваши результаты в комментарии!

  • Пройти Тест Джоэля

    Пройти Тест Джоэля

    В 2000 году Джоэль Сполски — сооснователь StackOverflow и Trello, написал список из 12 вопросов, известные как Тест Джоэля. Часто ссылаюсь на этот тест, поэтому прокомментирую эти вопросы.

    1. Используете систему контроля версий?
    Кажется, что git — уже обязательная вещь. Но до сих пор встречаются проекты без системы контроля версий.
    Для тех, кто уже использует, вопрос всё ещё актуален, но теперь звучит так: Вы действительно используете систему контроля версий? У вас есть стратегия ветвления, процедура слияния веток, понятные правила для работы с репозиторием?

    2. Сборка проекта происходит в один шаг?
    Проект должен собираться в 1 команду и она должна быть написана в readme. Если для запуска проекта требуется поставить несколько сервисов, иметь нужную версию компилятора и запущенную базу данных — стоит прописать все эти зависимости в docker-compose и запускать одной командой. После прихода виртуализации оправданий для многошаговой сборки и зависимости от среды больше нет.

    3. У вас настроен CI/CD?
    В оригинале Джоэль говорит про daily build — оперативная сборка софта каждый день. Сейчас в большинстве команд нет нужды синхронизировать код раз в день, можно делать это автоматически каждый раз, когда код попадает в репозиторий.
    Настройте автоматическую сборку и выкатку приложения на тестовый сервер.

    4. У вас же есть база багов? Правда?
    Громоздкая Джира не единственный вариант. Эксель тоже подойдёт! Если у вас есть общий зафиксированный список проблем, вы можете с ними работать и планировать их устранение.

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

    6. У вас есть план работ со сроками?
    План, который знают все и который связан с реальностью. Roadmap, этапы или просто дата, в которую надо запуститься.
    Работа ведёт себя как газ — занимает всё выделенное время. Ставьте сроки.

    7. У вас есть спецификация?
    Банально, но без ТЗ результат ХЗ. Сейчас не нужно писать исчерпывающее финальное тех задание — требования поменяются по ходу разработки. Достаточно написать концепцию, сделать прототипы, записать user story и опубликовать. Задачи тоже нужно записать и поставить в трекер.

    8. У разработчиков есть тихие рабочие места?
    Ваш разработчик всё ещё сидит в опенспейсе? Зря-зря. Скорее всего, он уже обзавёлся наушниками и пытается от вас отвернуться. Помогите ему создать изолированную среду.

    9. У разработчиков лучшая техника и инструменты?
    Быстрый комп, 2ой монитор, современный софт, быстрые серверы — стоят копейки относительно времени программиста. Планка памяти стоит как час работы разработчика. Ускоряйте их всеми доступными способами, это очень дёшево.

    10. У вас есть тестировщики?
    Если баги ищут только разработчики — значит, баги находят пользователи.
    Менеджеры и программисты проверяют, что код работает. Тестировщики проверяют, ищут где он не работает. У вас должен быть хотя бы 1 тестировщик в команде на нескольких разработчиков.

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

    12. Вы делаете usability тесты на добровольцах?
    Соберите группу для тестирования. Первые 5 случайных пользователей укажут вам на 95% проблем. Находите этих пользователей и проводите тестирование до большого релиза. Это дёшево и просто. В оригинале предлагается поймать добровольца в коридоре компании, но сейчас эра удалёнки — найдите их онлайн.

    Если вы фаундер или руководитель и у вас есть ответы “Нет” — их точно стоит обсудить с командой.

  • Internet Relay Chat

    Internet Relay Chat

    В эпоху web 1.0 не было социальных сетей. Сайты смотрели и читали, а основным местом для коммуникации были онлайн-чаты.

    Чаты в IRC очень напоминали сегодняшние чаты в Телеграме.
    Справа список пользователей. Текстовые сообщения от разных пользователей бегут на экране.

    Любители ходили в чаты через сайты, а профессионалы сидели через IRC-клиенты — специальные программы. Зная адрес сервера, можно было подключиться и попасть в любой канал по интересам. Чаты были источником всего. И были “закрытые” серверы и чаты по приглашениям. Специальные боты хранили любые файлы, запросить которые можно было в переписке. Пишешь боту в личку !list — он присылал список файлов, а !get — начинал закачку.

    В нулевых из чатов я качал всё то, чего было не достать в обычном вебе. Софт, музыка, видео.
    Чтобы скачать альбом в mp3, нужно было провести на телефонной линии на скорости 33.6 kbps целую ночь. Что не помешало мне послушать первый альбом Linkin Park или новый альбом Metallica за месяц до его выхода в магазины.

    Шли годы, основным каналом общения стал ICQ и форумы, а про чаты большинство людей позабыло. Одно время чат был синонимом дурного вкуса — завсегдатаи чатов были сродни любителям общаться по смс в телеэфире.

    Но вот прошли годы и в 2025 году Телеграм удивительным образом напоминает тот самый IRC из 2000 года. Мы пишем в чаты и задаём цветовые предпочтения в клиенте. Добавились только стикеры — как в MSN, и эмодзи — как в ICQ.
    Мы снова вернулись к основам?

  • Если у вас агентство, то

    Если у вас агентство, то

    Если у вас агентство, то на сессии у психотерапевта стоит обратить внимание на один из двух факторов.

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

    2. Холодный родитель. Если один из родителей был холодным, вы могли привыкнуть добиваться любви через успехи и работу на износ. Расшибаетесь в лепёшку, чтобы вас заметили и похвалили? Но любовь за успехи не выдают.

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

    Но если это ваш случай — с вас пять тыщ.

  • Печеньки в браузере — зачем они и почему нас о них предупреждают?

    Печеньки в браузере — зачем они и почему нас о них предупреждают?

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

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

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

    Сайты не спрашивали пользователя, нужна ли ему печенька. Конечно нужна, зачем спрашивать? Без неё сохранить логин на сайте или корзину было невозможно.

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

    Законотворцы узнали про это безобразие и начали выпускать законы 🤦‍♂️. Теперь мы смотрим на предупреждения, которые обязаны вешать владельцы сайтов, что они используют куки. Даже свои собственные — белые и пушистые — для запоминания вашей корзины. Но даже если предупреждения нет — куки вы, скорее всего, всё равно получите 👿.

    Проблема должна решаться технологически на стороне браузера.
    Safari, Firefox, Brave и Edge уже частично блокируют куки сторонних сайтов. Chrome блокирует их пока только в режиме инкогнито, ведь больше всего от этой технологии зарабатывает разработчик Chrome — Google 🙈.

    Когда браузеры договорятся — предупреждения о кукисах уйдут в историю. А пока — терпим.

  • Горшочек с мёдом

    Горшочек с мёдом

    Honeypot — в переводе с английского “горшочек с мёдом”. Красивое и безобидное название, которое в веб-разработке обозначает хитрую ловушку. Ловим роботов! Ловим в естественной среде обитания — на нашем сайте, на самую обычную форму регистрации, комментария или обратной связи.
    Обычный пользователь видит свою обычную форму:
    Имя: ____________
    Email: ___________
    Ваш комментарий: ____________________

    Робот не смотрит глазами на монитор — он читает исходный код. И видит робот ещё одно поле.
    Фамилия: __________
    Ничего подозрительного, просто ещё одно поле. Нужно заполнить! А это и есть наш горшочек с мёдом.
    Настоящий пользователь это поле не увидел — мы его скрыли с помощью CSS. Он отправил форму с пустой фамилией. А старательный робот фамилию заполнил.

    Попался!
    Мы его игнорируем: заполненная форма уничтожается, письма не отсылаются, аккаунт не регистрируется. Спам не прошёл!

  • Почему Fix Price — это ловушка

    Почему Fix Price — это ловушка

    По данным PMI, средний большой IT-проект превышает бюджет на 45%, сроки на 7%, а выхлоп даёт на 56% меньше ожидаемого.
    В исследовании Harvard Business Review, каждый шестой IT-проект обошёлся более чем на 200% дороже и вышел за сроки более чем на 70%.
    Люди плохо оценивают трудозатраты. Не учтены все внешние факторы, слишком оптимистично оценивается время и ресурсы. В процессе работы с проектом приходит более глубокое понимание предметной области и деталей.
    Мы интуитивно ожидаем нормальное гауcсово распределение по срокам, но в реальности у нас распределение с тяжёлым хвостом. Это значит, что редкие, но очень долгие проекты — не исключение, а закономерность.

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

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

    Проекты по модели Fix Price можно брать, но если есть ряд условий:
    – Вы уверены, что в проекте нет рисков.
    – В проекте очень мало неопределенности. Например, у вас уже почти всё готово, осталось прилепить логотип заказчика сверху стандартной заготовки.
    – У вас наценка от 500% на качественно просчитанную себестомость.

    Точная оценка нового проекта — иллюзия. Большой проект с неопределённостью нельзя брать по фиксированной цене. Каждый раз, когда вы берёте большой проект по Fix Price в надежде, что получится заработать, вы играете в рулетку.

  • Как измерять работу программистов

    Как измерять работу программистов

    Как измерять работу программистов.

    CEO и CFO приходят к CTO с вопросом: можно ли оптимизировать затраты на разработку? Как понять, кого уволить, а кто хорошо работает? Кому сколько платить?

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

    Очевидные метрики, которые придумает HR:
    – Присутствие на рабочем месте.
    – Количество выполненных задач.
    – Количество часов, затраченных на выполнение этих задач.
    – Уложился ли в план.

    Неочевидные метрики, которые добавит CTO:
    – “Бизнес ценность” — баллы, которыми стейкхолдеры оценивают задачи по их значимости или приоритету для бизнеса.
    – “Стори пойнты” — баллы трудоёмкости. Разработчики собираются на “Покер Планирования” и оценивают задачи между собой. Используют футболки (XS, S, M, L, XL) или степени числа 2 (1, 2, 4, 8, 16, 32).
    – Количество багов в коде, написанном разработчиком.
    – Скорость — любые баллы делим на время.
    – % отклонения от собственной или командной оценки.

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

    Рассмотрим роль тимлида в качестве примера: индивидуальная отгрузка ниже среднего, но каждый разработчик под его влиянием работает быстрее и качественнее. Увольнять его на основании общих метрик просто преступно.

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

    Что с этим делать?
    – Если хочется кого-то уволить или повысить — спросите менеджера отдела. Он всё знает без метрик. Для уверенности проведите 360-градусную оценку.
    – Всё равно измерять все возможные/удобные показатели, но не принимать решения только на них.

  • Прибыльное агентство: Отказ от уникальных услуг

    Прибыльное агентство: Отказ от уникальных услуг

    Прибыльное агентство: Отказ от уникальных услуг.

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

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

    Как превратить услугу во внутренний продукт:
    – Берём одну типовую услугу, которую мы точно умеем оказывать и на которую есть спрос.
    – Документируем весь процесс оказания.
    – Выделяем шаги, которые требуют высокой квалификации.
    – В этих шагах заменяем квалифицированного специалиста на полуфабрикаты — заготовки, готовые рецепты, чеклисты, шаблоны. Теперь он делает заготовки, а не уникальные решения.
    – Добавляем границы кастомизации. За границы не выходим — это уже другой процесс.
    – Обучаем менее квалифицированных сотрудников проходить по шагам весь процесс.
    – Добавляем контроль качества — чтобы стандарт не падал при росте объёмов.
    – Повторяем с правками и улучшениями до тех пор, пока процесс не будет работать без вмешательства специалиста и руководителя.

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

    Очевидные плюсы:
    – Увеличенная маржа — высокооплачиваемый специалист привлекается только к созданию конвейера.
    – Услугу могут оказывать легко заменяемые сотрудники или начинающие специалисты.
    – Просчитываемая экономика с точками масштабирования.
    – Ниже риски, так как услуга проще.
    – Можно построить бизнес, а не самозанятость.

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

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

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

    Я считаю, что лучшее решение — гибрид.
    – Работает конвейер: основатель-специалист преодолел себя и построил скучную, но маржинальную услугу.
    – Цены не потоковые, а чуть выше рынка.
    – В отделе продаж происходит сортировка клиентов. Уникальные и сложные случаи переводятся в проектный отдел — с другими процессами, командой и бюджетом.