Инженеры программного обеспечения - люди, которые берут на себя ответственность за выполненную работу. Этот канал о них. Руководствуясь лозунгом "It depends", они не спешат сразу отвечать на поставленный вопрос и предлагать решение проблемы. Ведь надо прикинуть то, как решение повлияет на:
- сроки реализации проекта,
- архитектуру,
- качественные метрики,
- процесс разработки,
- риски
Руководствуясь принципом "Все ошибаются", SE специалисты ещё раз уточнят требования, задатут вопросы "А зачем? А это точно надо? Вы уверены, что сайт *обязательно* должен открываться за 100 миллисекунд и это требование не высосано из пальца?".
SE специалисты - идеальные тим лиды, системные архитекторы и руководители проектов. Они знают почему их код работает и знают что сделать, чтоб заработал ваш
- сроки реализации проекта,
- архитектуру,
- качественные метрики,
- процесс разработки,
- риски
Руководствуясь принципом "Все ошибаются", SE специалисты ещё раз уточнят требования, задатут вопросы "А зачем? А это точно надо? Вы уверены, что сайт *обязательно* должен открываться за 100 миллисекунд и это требование не высосано из пальца?".
SE специалисты - идеальные тим лиды, системные архитекторы и руководители проектов. Они знают почему их код работает и знают что сделать, чтоб заработал ваш
🔥1
Сегодняшняя тема - часть Сonfiguration Management'а - code style.
Configuration management - это в первую очередь, чтобы среды разработки у разработчиков были схожие. Согласитесь, что если все разработчки программируют в одной IDE под одной операционной системой, с одинаковыми настройками среды - намного проще решать общие баги. Не надо думать, почему скрипт сборки работает у разработчика под ubuntu, а у разработчика на СentOS проект не собирается (докер вам в помощь).
Так вот, про code style.
В проектах командам рекомендуются использовать общие правила по написанию кода. Естесственно используются для этого автоматические тулзы. Обычно их называют линтерами (например, eslint). Общие правила для команды выбираются обычно следующим способом.
Кому-то назначается таска в джире на настройку общего конфига. Разработчик пишет правила, форматирует проект, завершает таску, правила и отформатированный проект попадают в репозиторий. Следующие ПРы других разработчиков вызывает маты , потому что столько конфликтов разработчики мёрджить не планировали. А когда начинаются проблемы с конфликтами, то начинаются придирки к правилам. И вот тут начинается холивар на несколько дней.
Вообще обсуждение правил - достаточно тяжёлая тема, при которой даже опытные разработчики не удерживаются от перехода на личности и взаимные оскорбления. "Да я 10 проектов делал, нигде мы *I* перед интерфейсом не писали, это прошлый век, так никто не пишет больше!". "Это очень удобно писать I перед интерфейсом, удобней пользоваться поиском, а то при поиске интерфейса Product мне ещё 10 Product'ов вылезает". И это может длиться вечно.
Что важно помнить:
1) ПР с форматированием проекта должен быть сделан в конце спринта, висеть минимальное количество времени, чтобы потенциальное количество конфликтов было минимальным
2) Правила не надо обсуждать, за них надо голосовать. Есть спорные мнения по правилу - пусть каждый выскажется в течение 1 минуты без перебиваний. После этого - голосование. Пофиг насколько _опытен_ тот или иной разработчик, каков его авторитет. Настоящий профессионал знает, что спорить можно бесконечно, главное - придти к консенсусу и следовать правилам. Зачастую разработчик хочет, чтобы приняли именно *его* предложение - вот истинная причина спора. "Я работаю 7 лет, как можно принять предложение не моё, а вот этого джуна?!" - вот обычно что скрывается за _аргументированным_ обоснованием того или иного правила.
3) Основные сложности при использовании общих правил написания кода - communication issues, то есть межличностные
Configuration management - это в первую очередь, чтобы среды разработки у разработчиков были схожие. Согласитесь, что если все разработчки программируют в одной IDE под одной операционной системой, с одинаковыми настройками среды - намного проще решать общие баги. Не надо думать, почему скрипт сборки работает у разработчика под ubuntu, а у разработчика на СentOS проект не собирается (докер вам в помощь).
Так вот, про code style.
В проектах командам рекомендуются использовать общие правила по написанию кода. Естесственно используются для этого автоматические тулзы. Обычно их называют линтерами (например, eslint). Общие правила для команды выбираются обычно следующим способом.
Кому-то назначается таска в джире на настройку общего конфига. Разработчик пишет правила, форматирует проект, завершает таску, правила и отформатированный проект попадают в репозиторий. Следующие ПРы других разработчиков вызывает маты , потому что столько конфликтов разработчики мёрджить не планировали. А когда начинаются проблемы с конфликтами, то начинаются придирки к правилам. И вот тут начинается холивар на несколько дней.
Вообще обсуждение правил - достаточно тяжёлая тема, при которой даже опытные разработчики не удерживаются от перехода на личности и взаимные оскорбления. "Да я 10 проектов делал, нигде мы *I* перед интерфейсом не писали, это прошлый век, так никто не пишет больше!". "Это очень удобно писать I перед интерфейсом, удобней пользоваться поиском, а то при поиске интерфейса Product мне ещё 10 Product'ов вылезает". И это может длиться вечно.
Что важно помнить:
1) ПР с форматированием проекта должен быть сделан в конце спринта, висеть минимальное количество времени, чтобы потенциальное количество конфликтов было минимальным
2) Правила не надо обсуждать, за них надо голосовать. Есть спорные мнения по правилу - пусть каждый выскажется в течение 1 минуты без перебиваний. После этого - голосование. Пофиг насколько _опытен_ тот или иной разработчик, каков его авторитет. Настоящий профессионал знает, что спорить можно бесконечно, главное - придти к консенсусу и следовать правилам. Зачастую разработчик хочет, чтобы приняли именно *его* предложение - вот истинная причина спора. "Я работаю 7 лет, как можно принять предложение не моё, а вот этого джуна?!" - вот обычно что скрывается за _аргументированным_ обоснованием того или иного правила.
3) Основные сложности при использовании общих правил написания кода - communication issues, то есть межличностные
😱1
Недавно вышло интересное исследование про удалённую работу. Основными респондентами стали жители США, Канады, Великобритании. Сфера деятельности - IT, маркетинг, консалтинг.
Краткий выводы исследования:
1) Специалисты этих сфер в подавляющем большинстве работают удалённо
2) Самое распросранённое место "Работы" - дом
3) Самым большим недостатком удалённой работы участники опроса назвали "невозможность перестать работать после работы". То есть они всегда на связи
Конечно данные опроса на данный момент не применимы к России, но скорее всего через несколько лет картина в нашей стране будет схожей
https://buffer.com/state-of-remote-work-2019
Краткий выводы исследования:
1) Специалисты этих сфер в подавляющем большинстве работают удалённо
2) Самое распросранённое место "Работы" - дом
3) Самым большим недостатком удалённой работы участники опроса назвали "невозможность перестать работать после работы". То есть они всегда на связи
Конечно данные опроса на данный момент не применимы к России, но скорее всего через несколько лет картина в нашей стране будет схожей
https://buffer.com/state-of-remote-work-2019
Buffer: All-you-need social media toolkit for small businesses
Buffer | State Of Remote Work 2019
Buffer | 2019 Remote Work Report
Тема дня связка бэка с фронтом.
Не секрет, что главные проблемы в ИТ не технические, а связанные с miss communication.
Типичная проблема - разногласия между командами бэкенда и фронтенда.
Рассмотрим ситуацию: бэкенд выставляет АПИ, фронтендщики им активно пользуются. И как обычно что-то в процессе разработки отваливается, ломается. Бэкендщики что-то задеплоили на дев в 2 ночи, с утра пришли фронтэндщики - и ничерта не работает.
Обычно команды митигируют этот риск следующем образом:
1) Команда фронтенда мокает бэкенд. С одной стороны это самый надёжный вариант: "Бэк" доступен с локальной машины или со специально отведённой на это машины. Но я этот вариант люблю меньше всего: его очень дорого поддерживать. Так как АПИ меняется, то много времени приходится тратить именно на доработку мока АПИшки. Также момент отлавливания ошибок на бэкенде откладывается до выката релиза на стэйджинг, ведь до этого момента фронтенд не взаимодействует с бэком, а по сути, именно фронтендщики являются тестировщиками бэка.
2) Разворачивать бэкенд локально на машинах фронтэндщиков. Более приемлемый на мой взгляд вариант, когда фронтендщик может локально развернуть бэкенд на своей машине. Сложности начинаются, когда бэкенд не представляет из себя монолит или требует очень много ресурсов. Это затрудняет работу разработчиков, но зато позволяет отлавливать ошибки бэкендщиков раньше. Ведь по умолчанию у разработчика будет развёрнут актуальный дев, и только в случае, если он некорректно работает, фронтендщик будет запускать устаревшую, но исправную версию.
3) Содержание стабильного стэйджинга для бэка, с которым по умолчанию работает фронт. Вариант очень хорош: фронтендщики по умолчанию работают с девом, но, если тот падает, переключаются на стэйджинг. С каким бэком работать - разработчики выбирают через переменные среды или заранее установленные константы. Минус - стоимость поддержки стэйджинга. Может быть высокой и нецелесообразной на начальных стадиях проекта.
Глупо было бы не использовать АПИ тестирование для избегания этих проблем. Причем стоимость этого решения значительно дешевле, чем вышеприведённые варианты.
Допустим, АПИ содержит 100 методов, из них фронтендщики активно используют 20-30. Достаточно написать 20-30 тестов с двумя assertions и прогонять их в рамках ci/cd процесса на бэке или хотя бы просто запускать их раз в 10 минут, чтобы знать состояние АПИ. Assertion'а достаточно два: на статус запроса и на проверку его контента. Обычно нам достаточно знать, что запрос возвращает 200 и ответ содержит какой-то id или какую-то стрингу. Дёшево и сердито, зато надёжно и является стартовой площадкой для последующего полноценного интеграционного и нагрузочного тестирования.
Конечно, можно было бы также сказать, что «Надо просто настроить нормальный мониторинг с нотификациями и алертами», и с этим сложно не согласиться. Но есть ситуации, когда подобные АПИ тесты будут более эффективны и востребованы.
Не секрет, что главные проблемы в ИТ не технические, а связанные с miss communication.
Типичная проблема - разногласия между командами бэкенда и фронтенда.
Рассмотрим ситуацию: бэкенд выставляет АПИ, фронтендщики им активно пользуются. И как обычно что-то в процессе разработки отваливается, ломается. Бэкендщики что-то задеплоили на дев в 2 ночи, с утра пришли фронтэндщики - и ничерта не работает.
Обычно команды митигируют этот риск следующем образом:
1) Команда фронтенда мокает бэкенд. С одной стороны это самый надёжный вариант: "Бэк" доступен с локальной машины или со специально отведённой на это машины. Но я этот вариант люблю меньше всего: его очень дорого поддерживать. Так как АПИ меняется, то много времени приходится тратить именно на доработку мока АПИшки. Также момент отлавливания ошибок на бэкенде откладывается до выката релиза на стэйджинг, ведь до этого момента фронтенд не взаимодействует с бэком, а по сути, именно фронтендщики являются тестировщиками бэка.
2) Разворачивать бэкенд локально на машинах фронтэндщиков. Более приемлемый на мой взгляд вариант, когда фронтендщик может локально развернуть бэкенд на своей машине. Сложности начинаются, когда бэкенд не представляет из себя монолит или требует очень много ресурсов. Это затрудняет работу разработчиков, но зато позволяет отлавливать ошибки бэкендщиков раньше. Ведь по умолчанию у разработчика будет развёрнут актуальный дев, и только в случае, если он некорректно работает, фронтендщик будет запускать устаревшую, но исправную версию.
3) Содержание стабильного стэйджинга для бэка, с которым по умолчанию работает фронт. Вариант очень хорош: фронтендщики по умолчанию работают с девом, но, если тот падает, переключаются на стэйджинг. С каким бэком работать - разработчики выбирают через переменные среды или заранее установленные константы. Минус - стоимость поддержки стэйджинга. Может быть высокой и нецелесообразной на начальных стадиях проекта.
Глупо было бы не использовать АПИ тестирование для избегания этих проблем. Причем стоимость этого решения значительно дешевле, чем вышеприведённые варианты.
Допустим, АПИ содержит 100 методов, из них фронтендщики активно используют 20-30. Достаточно написать 20-30 тестов с двумя assertions и прогонять их в рамках ci/cd процесса на бэке или хотя бы просто запускать их раз в 10 минут, чтобы знать состояние АПИ. Assertion'а достаточно два: на статус запроса и на проверку его контента. Обычно нам достаточно знать, что запрос возвращает 200 и ответ содержит какой-то id или какую-то стрингу. Дёшево и сердито, зато надёжно и является стартовой площадкой для последующего полноценного интеграционного и нагрузочного тестирования.
Конечно, можно было бы также сказать, что «Надо просто настроить нормальный мониторинг с нотификациями и алертами», и с этим сложно не согласиться. Но есть ситуации, когда подобные АПИ тесты будут более эффективны и востребованы.
Сегодняшняя тема - зрелые/незрелые специалисты.
Недавно со мной поделились случаем: Олегу дали сложное задание, связанное со сбором требований для подготовки среды для разворачивания системы. Проект содержал множество зависимостей, и под некоторыми версиями операционных систем некоторые используемые библиотеки работали некорректно.
Олег обратился за помощью к Кириллу, старшему разработчику за советом, главному герою нашего рассказа. Кирилл по доброй воле и в своё личное время начал разбираться с проблемой, провёл пару дней над сборками и вернулся к Олегу с ответом. Ответ был не тривиальным, поэтому на разъяснения и ликбез требовалось время. Начали.
Через несколько минут к коллегам подошёл Антон, товарищ по работе и начал с Олегом обсуждать последние новости. И Антон с Олегом разговорились, обсуждая крайне интересные пикантные подробности последней презентации Apple. Наконец, когда через 10 минут коллеги увлеклись смакованием выхода на сцену новоиспечённого Тима Эппла, Кирилл не выдержал и ушёл. Ибо нефиг.
Рассказывая эту историю, Кирилл спрашивал меня, правильно ли он сделал. Стоило ему сказать коллегам "а вы не охренели"? и вернуть внимание Олега к проблеме или забить болт и послать Олега в следующий раз, когда тот обратиться за помощью.
1) Очевидно, что Олег незрелый специалист. Может он крутой кодер, потрясающий девопс, великолепно печёт блинчики, но он незрелый специалист. Он не уважает время своего коллеги и видимо не умеет работать в команде.
2) А что насчёт Кирилла? Кто он в данном случае? С одной стороны, он помогает коллеге, решает сложную задачу, что и соответствует его статусу Старшего разработчика. С другой стороны, если смотреть по факту, то задача в итоге не решена, профита команда не получила, зато между коллегами назревает конфликт. Кирилл точно не остался в выйгрыше.
Если бы Кирилл смог разрулить ситуацию на корню, без конфликтов, донести проблематику до Олега, то тогда бы точно можно было сказать "Кирилл - красавец. Кирилл - однозначно зрелый специалист". Но этого не произошло. С другой стороны сказать, что Кирилл незрелый специалист - язык не поворачивается. Но если добавить в контекст, что Кирилл - кандидат на тим лида, то весы качнутся в сторону незрелого.
Если вы менеджер или тимлид - уволить косячащего сотрудника обычно несложно. Сложно - суметь перенаправить его энергию в правильное русло и сделать эффективным членом команды.
Недавно со мной поделились случаем: Олегу дали сложное задание, связанное со сбором требований для подготовки среды для разворачивания системы. Проект содержал множество зависимостей, и под некоторыми версиями операционных систем некоторые используемые библиотеки работали некорректно.
Олег обратился за помощью к Кириллу, старшему разработчику за советом, главному герою нашего рассказа. Кирилл по доброй воле и в своё личное время начал разбираться с проблемой, провёл пару дней над сборками и вернулся к Олегу с ответом. Ответ был не тривиальным, поэтому на разъяснения и ликбез требовалось время. Начали.
Через несколько минут к коллегам подошёл Антон, товарищ по работе и начал с Олегом обсуждать последние новости. И Антон с Олегом разговорились, обсуждая крайне интересные пикантные подробности последней презентации Apple. Наконец, когда через 10 минут коллеги увлеклись смакованием выхода на сцену новоиспечённого Тима Эппла, Кирилл не выдержал и ушёл. Ибо нефиг.
Рассказывая эту историю, Кирилл спрашивал меня, правильно ли он сделал. Стоило ему сказать коллегам "а вы не охренели"? и вернуть внимание Олега к проблеме или забить болт и послать Олега в следующий раз, когда тот обратиться за помощью.
1) Очевидно, что Олег незрелый специалист. Может он крутой кодер, потрясающий девопс, великолепно печёт блинчики, но он незрелый специалист. Он не уважает время своего коллеги и видимо не умеет работать в команде.
2) А что насчёт Кирилла? Кто он в данном случае? С одной стороны, он помогает коллеге, решает сложную задачу, что и соответствует его статусу Старшего разработчика. С другой стороны, если смотреть по факту, то задача в итоге не решена, профита команда не получила, зато между коллегами назревает конфликт. Кирилл точно не остался в выйгрыше.
Если бы Кирилл смог разрулить ситуацию на корню, без конфликтов, донести проблематику до Олега, то тогда бы точно можно было сказать "Кирилл - красавец. Кирилл - однозначно зрелый специалист". Но этого не произошло. С другой стороны сказать, что Кирилл незрелый специалист - язык не поворачивается. Но если добавить в контекст, что Кирилл - кандидат на тим лида, то весы качнутся в сторону незрелого.
Если вы менеджер или тимлид - уволить косячащего сотрудника обычно несложно. Сложно - суметь перенаправить его энергию в правильное русло и сделать эффективным членом команды.
Тема дня: сети как база для понимания архитектуры.
Самые модные и востребованные на данный момент архитектурные требования - это масштабируемость, производительность и надёжность. Когда мы говорим про high load - мы говорим именно про таких монстров. Так вот, именно сетевые инженеры построили системы, отвечающие этим качественным метрикам. Практически любому архитектурному подходу можно найти альтернативу из мира сетей.
Есть примеры решения стандартных задач по балансировке нагрузки, по обеспечению отказоустойчивости, по созданию peer-to-peer соединений. Как только вы спроектируете сеть на 40 пользователей, вы уже скорее всего познакомитесь с master-slave подходом. И он будет для вас нативным, понятным. Намного проще познакомиться с этими азами на примере сетей, нежели баз данных.
Для знакомства с сетями я рекомендую попробовать пройти сертификацию cisco CCNA. Есть огромное количество материалов, позволяющих это сделать. При подготовке, вы будете строить сети в cisco packet tracer'е. Работа через cli и знакомство с крутыми алгоритмами по оптимальной доставке пакетов вам обеспечена.
Я рекомендую вот этот https://www.youtube.com/playlist?list=PLcDkQ2Au8aVNYsqGsxRQxYyQijILa94T9
Самые модные и востребованные на данный момент архитектурные требования - это масштабируемость, производительность и надёжность. Когда мы говорим про high load - мы говорим именно про таких монстров. Так вот, именно сетевые инженеры построили системы, отвечающие этим качественным метрикам. Практически любому архитектурному подходу можно найти альтернативу из мира сетей.
Есть примеры решения стандартных задач по балансировке нагрузки, по обеспечению отказоустойчивости, по созданию peer-to-peer соединений. Как только вы спроектируете сеть на 40 пользователей, вы уже скорее всего познакомитесь с master-slave подходом. И он будет для вас нативным, понятным. Намного проще познакомиться с этими азами на примере сетей, нежели баз данных.
Для знакомства с сетями я рекомендую попробовать пройти сертификацию cisco CCNA. Есть огромное количество материалов, позволяющих это сделать. При подготовке, вы будете строить сети в cisco packet tracer'е. Работа через cli и знакомство с крутыми алгоритмами по оптимальной доставке пакетов вам обеспечена.
Я рекомендую вот этот https://www.youtube.com/playlist?list=PLcDkQ2Au8aVNYsqGsxRQxYyQijILa94T9
Код продакта | Александр Иосса pinned «Инженеры программного обеспечения - люди, которые берут на себя ответственность за выполненную работу. Этот канал о них. Руководствуясь лозунгом "It depends", они не спешат сразу отвечать на поставленный вопрос и предлагать решение проблемы. Ведь надо прикинуть…»
Тема дня: трэкинг. Трэкать время или нет.
Сразу скажу, что данный пост не относится к удалённое работе, когда сотрудник получает почасовую оплату. Сейчас мы говорим про работу в офисе.
Что даёт трэкинг мэнеджменту? Реально потраченное время на задачи, которые были занесены в джиру. Не больше.
Оно не даёт реальной стоимости выполнения задачи или эпика, времени работы над каким-то функционалом. Некоторые задачи проходят в обсуждениях, которые не трэкаются. Кто-то забывает трэкать время, потраченное на код ревью, тестирование. В итоге погрешность будет составлять около 20%. Нужна ли метрика с такой погрешностью?
Вы скажете, что нужна дисциплина трэканья времени и тогда метрики будут более точными, но так ли это? Ведь дисциплина выстраивается, когда есть мотивация, например, KPI. А ведь мы знаем, что как раз-таки затрэканное время нельзя использовать для расчёта KPI. Иначе цифры начнут врать сразу же, после первой зарплаты. Получается замкнутый круг с единственным вопросом: так зачем вообще трэкать?
Получается, что трэкать время мы можем только тогда, когда рассчитываемся с разработчиками за время. Но там и системы трэканья стоять сложные: следят за движением мышки, пытаются понять, когда пользователь out of keyboard. При этом даже в TopTal этого не делают. Лично я против такой тирании в офисе.
А что думаете вы?
Оставляйте свои комментарии
Сразу скажу, что данный пост не относится к удалённое работе, когда сотрудник получает почасовую оплату. Сейчас мы говорим про работу в офисе.
Что даёт трэкинг мэнеджменту? Реально потраченное время на задачи, которые были занесены в джиру. Не больше.
Оно не даёт реальной стоимости выполнения задачи или эпика, времени работы над каким-то функционалом. Некоторые задачи проходят в обсуждениях, которые не трэкаются. Кто-то забывает трэкать время, потраченное на код ревью, тестирование. В итоге погрешность будет составлять около 20%. Нужна ли метрика с такой погрешностью?
Вы скажете, что нужна дисциплина трэканья времени и тогда метрики будут более точными, но так ли это? Ведь дисциплина выстраивается, когда есть мотивация, например, KPI. А ведь мы знаем, что как раз-таки затрэканное время нельзя использовать для расчёта KPI. Иначе цифры начнут врать сразу же, после первой зарплаты. Получается замкнутый круг с единственным вопросом: так зачем вообще трэкать?
Получается, что трэкать время мы можем только тогда, когда рассчитываемся с разработчиками за время. Но там и системы трэканья стоять сложные: следят за движением мышки, пытаются понять, когда пользователь out of keyboard. При этом даже в TopTal этого не делают. Лично я против такой тирании в офисе.
А что думаете вы?
Оставляйте свои комментарии
Тема дня: рисуем архитектуру или давайте говорить на одном языке.
Многие разработчики говорят на совершенно разных языках об одном и том же и спорят до потери пульса, кто из них прав. Узнаёте ситуацию, когда вам приходилось объяснять коллегам свою точку зрения, её не понимали и не принимали, но через несколько часов жарких обсуждений оказывалось, что вы говорите об одном и том же?
Причина таких недопониманий - разный бэкграунд. ФПшник и ООПшник будут очень долго спорить об одном и том же, совершенно не понимая термины друг друга. Ну не учат нигде архитектуре - универсальному языку, на котором по-хорошему должны разговаривать разработчики. Потому что в ИТ мы попадаем в основном через небольшие проекты и халтурки, самообразование и курсы типа "Сделаем первое мобильное приложение".
Как бороться с этим?
Добавьте контекст. Оформите его схемами и выложите в Readme файл. Одной Dynamic view достаточно, чтобы разработчики начали понимать друг друга и мыслить одинаково.
У нас было около 4-5 бесполезных обсуждений архитектуры приложения до появления схемы. Как только она появилась - стороны конфликта примерились и наконец-то появился конструктив.
Сколько бы фронтенд разработчики не объясняли бэкендщикам, что их АПИ неудобно, пусть и правильно, бэкендщику очень сложно понять боль фронтендщика. У нас же "JSON API", это стандарт, признанный всеми, чего вам ещё не хватает?
Рисуешь Sequence diagram, на которой видно, что для загрузки главной страницы требуется 7 последовательных запросов, и бэкенд разработчик меняется в лице.
ИМХО: уважающий себя разработчик должен уметь рисовать схемы. Я уж не говорю про communication skills, это другая больная тема.
В данном посте и на 5% не раскрыта правильное проектирование и документирование архитектуры и не претендует на это. Это лишь первый шаг)
Многие разработчики говорят на совершенно разных языках об одном и том же и спорят до потери пульса, кто из них прав. Узнаёте ситуацию, когда вам приходилось объяснять коллегам свою точку зрения, её не понимали и не принимали, но через несколько часов жарких обсуждений оказывалось, что вы говорите об одном и том же?
Причина таких недопониманий - разный бэкграунд. ФПшник и ООПшник будут очень долго спорить об одном и том же, совершенно не понимая термины друг друга. Ну не учат нигде архитектуре - универсальному языку, на котором по-хорошему должны разговаривать разработчики. Потому что в ИТ мы попадаем в основном через небольшие проекты и халтурки, самообразование и курсы типа "Сделаем первое мобильное приложение".
Как бороться с этим?
Добавьте контекст. Оформите его схемами и выложите в Readme файл. Одной Dynamic view достаточно, чтобы разработчики начали понимать друг друга и мыслить одинаково.
У нас было около 4-5 бесполезных обсуждений архитектуры приложения до появления схемы. Как только она появилась - стороны конфликта примерились и наконец-то появился конструктив.
Сколько бы фронтенд разработчики не объясняли бэкендщикам, что их АПИ неудобно, пусть и правильно, бэкендщику очень сложно понять боль фронтендщика. У нас же "JSON API", это стандарт, признанный всеми, чего вам ещё не хватает?
Рисуешь Sequence diagram, на которой видно, что для загрузки главной страницы требуется 7 последовательных запросов, и бэкенд разработчик меняется в лице.
ИМХО: уважающий себя разработчик должен уметь рисовать схемы. Я уж не говорю про communication skills, это другая больная тема.
В данном посте и на 5% не раскрыта правильное проектирование и документирование архитектуры и не претендует на это. Это лишь первый шаг)
Тема дня: Полгода с typeScript. Стоимость внедрения и оверхэдов.
Для тех, кто торопится: всё огонь, в команде, в которой есть хотя бы один Senior, можно без проблем использовать ts.
О преимуществах и недостатках использования typescript'a было написано не раз, при этом недостаток обычно указывался только один - learning curve и отсутствие специалистов, его знающих. Статья не о преимуществах typescript, а как раз-таки о learning curve и молодых специалистах.
Когда мы начинали использовать ts, у нас по факту не было человека, который хорошо в нём разбирался. И да, мы наломали в своё время дров. Но через месяц использования мы примерно поняли что к чему и довольно быстро смогли отрефакторить наше мракобесие.
Typescript достаточно нов и, по моему субъективному мнению, только недавно созрел для полноценного использования в production. Процесс его эволюции хорошо описан в докладе Андрея Старовойтова.
Год назад я бы не рекомендовал использовать его в production, потому что большинство библиотек ещё не поддерживали типы, приходилось либо писать их самим, либо задавать тип "any". Также отсутствовали туториалы и best practices по использованию typescript'а. В духе javascript каждый разарботчик писал и использовал типы как хотел, не понимая где их объявлять, в каком случае нужно наследовать типы, в каком случае наследовать, в какой папочке хранить. Где объявлять типы, в редьюсерах или в соответствующих api методах?
А если вы хотели использовать не самую популярную технологию совместнос ts - начинались настоящие танцы с бубном. Подружить typesctip с бабелем, вебпаком или уже готовым бойлер плэйтом было достаточно дорого.
Сейчас же разработчик, который раньше не имел опыта с ts без большого труда вольётся в проект. Да, он не сможет, например, прикрутить ts к редаксу, но выполнять обычные задачи и расширять существующий функционал - без проблем. Это не React-native, где легко было выстрелить себе в ногу и потратить пару дней, а то и больше, на поиск ошибки.
Сейчас же база знаний на stack overflow и документация подматерела, велосипедов с костылями стало меньше. Подтвержу выводы многих статей о том, что typescript не так сильно сокращает количество ошибок, добирающихся до production. Я не измерял, но уровень в 10-20% звучит достаточно достоверным.
ИМХО кажется, что typescript - это надолго. И это хорошо)
Для тех, кто торопится: всё огонь, в команде, в которой есть хотя бы один Senior, можно без проблем использовать ts.
О преимуществах и недостатках использования typescript'a было написано не раз, при этом недостаток обычно указывался только один - learning curve и отсутствие специалистов, его знающих. Статья не о преимуществах typescript, а как раз-таки о learning curve и молодых специалистах.
Когда мы начинали использовать ts, у нас по факту не было человека, который хорошо в нём разбирался. И да, мы наломали в своё время дров. Но через месяц использования мы примерно поняли что к чему и довольно быстро смогли отрефакторить наше мракобесие.
Typescript достаточно нов и, по моему субъективному мнению, только недавно созрел для полноценного использования в production. Процесс его эволюции хорошо описан в докладе Андрея Старовойтова.
Год назад я бы не рекомендовал использовать его в production, потому что большинство библиотек ещё не поддерживали типы, приходилось либо писать их самим, либо задавать тип "any". Также отсутствовали туториалы и best practices по использованию typescript'а. В духе javascript каждый разарботчик писал и использовал типы как хотел, не понимая где их объявлять, в каком случае нужно наследовать типы, в каком случае наследовать, в какой папочке хранить. Где объявлять типы, в редьюсерах или в соответствующих api методах?
А если вы хотели использовать не самую популярную технологию совместнос ts - начинались настоящие танцы с бубном. Подружить typesctip с бабелем, вебпаком или уже готовым бойлер плэйтом было достаточно дорого.
Сейчас же разработчик, который раньше не имел опыта с ts без большого труда вольётся в проект. Да, он не сможет, например, прикрутить ts к редаксу, но выполнять обычные задачи и расширять существующий функционал - без проблем. Это не React-native, где легко было выстрелить себе в ногу и потратить пару дней, а то и больше, на поиск ошибки.
Сейчас же база знаний на stack overflow и документация подматерела, велосипедов с костылями стало меньше. Подтвержу выводы многих статей о том, что typescript не так сильно сокращает количество ошибок, добирающихся до production. Я не измерял, но уровень в 10-20% звучит достаточно достоверным.
ИМХО кажется, что typescript - это надолго. И это хорошо)
HolyJS Conference for JavaScript developers
Evolution of TypeScript: curiouser and curiouser
19 - 20 мая в Санкт-Петербурге состоится JavaScript-конференция HolyJS 2018 Piter. Не просто фронтенд-конференция, коих много. HolyJS – единственная в своем роде конференция, посвященная только JavaScript.
Тема дня: Quality gates
Qaulity gate - это проверка на соответствие качественным метрикам вашего проекта в контрольных точках CI/CD процесса. Например, прохождение 100% тестов при создании ПРа - это одна из метрик quality gate.
Какие ещё точки в CI/CD процессе есть? Например, pre-commit, pre-push (фактически любые другие git-hooks). Можно настроить и более сложные, такие как pre-production check. Когда мы перед запуском скрипта на деплой проекта в production выполняем финальные проверки.
Если git hooks фактически стандартизированная вещь, то другие контрольные точки в CI/CD процессе сильно отличаются из-за особенностей конкретного CI/CD процесса.
Какими бывают качественные метрики?
Перечислим базовые:
1. Проверка на соответствие coding standarts. То есть чтобы линтер не ругался.
2. Автоматические тесты проходят.
3. Ручные тесты проходят.
И на этом в большинстве проектов качественные метрики заканчиваются. Ну нет у нашего брата регрессионного performance testing'а. Не меряют они размер бандлов, время загрузки веб-приложения. Может у кого-то и есть, но не систематизировано это всё.
Как можно улучшить?
Давайте введём качественные метрики.
Если у вас web приложение, давайте замерим First meaningful Paint time для главной страницы. Время, через которое по умолчанию отрисуется главная страница. и пользователь сможет наконец что-то делать.
Зная, что в релизе 1.1 эта метрика была равна 2,5 секунды, увидев в релизе 1.2 значение 5,5 секунды, вы остановитесь и призадумаетесь о причине увеличения времени загрузки сайта.
Давайте замерим размер бандла и в целом загруженного контента. В релизе 1.1 размер бандла составил 340 килобайт. В релизе 1.2 160 килобайт. Всё верно, ведь как раз была закрыта задача по оптимизации зависимостей в проекте. А размер сайта наоборот увеличился. Почему?
Это вершина айсберга. Улучшать дальше можно долго.
Время загрузки сайта разобьётся на:
- First Contentful Paint
- Time to first beet
- Time to Interactive
- First Meaningful Paint
- и прочее
Размер сайта разобьётся на:
- Размер js бандла,
- Размер css бандла,
- Объём картинок,
- И так далее
Подумайте, что именно важно для вашего проекта, какие именно quality attributes и начните их регрессионно измерять. Практически все измерения можно делать автоматически, в том же самом jenkins'е.
В следующем посте поговорим с вами о систематизации Quality attributes и тулзах для их измерения. Именно на них выстраиваются Quality gates.
Qaulity gate - это проверка на соответствие качественным метрикам вашего проекта в контрольных точках CI/CD процесса. Например, прохождение 100% тестов при создании ПРа - это одна из метрик quality gate.
Какие ещё точки в CI/CD процессе есть? Например, pre-commit, pre-push (фактически любые другие git-hooks). Можно настроить и более сложные, такие как pre-production check. Когда мы перед запуском скрипта на деплой проекта в production выполняем финальные проверки.
Если git hooks фактически стандартизированная вещь, то другие контрольные точки в CI/CD процессе сильно отличаются из-за особенностей конкретного CI/CD процесса.
Какими бывают качественные метрики?
Перечислим базовые:
1. Проверка на соответствие coding standarts. То есть чтобы линтер не ругался.
2. Автоматические тесты проходят.
3. Ручные тесты проходят.
И на этом в большинстве проектов качественные метрики заканчиваются. Ну нет у нашего брата регрессионного performance testing'а. Не меряют они размер бандлов, время загрузки веб-приложения. Может у кого-то и есть, но не систематизировано это всё.
Как можно улучшить?
Давайте введём качественные метрики.
Если у вас web приложение, давайте замерим First meaningful Paint time для главной страницы. Время, через которое по умолчанию отрисуется главная страница. и пользователь сможет наконец что-то делать.
Зная, что в релизе 1.1 эта метрика была равна 2,5 секунды, увидев в релизе 1.2 значение 5,5 секунды, вы остановитесь и призадумаетесь о причине увеличения времени загрузки сайта.
Давайте замерим размер бандла и в целом загруженного контента. В релизе 1.1 размер бандла составил 340 килобайт. В релизе 1.2 160 килобайт. Всё верно, ведь как раз была закрыта задача по оптимизации зависимостей в проекте. А размер сайта наоборот увеличился. Почему?
Это вершина айсберга. Улучшать дальше можно долго.
Время загрузки сайта разобьётся на:
- First Contentful Paint
- Time to first beet
- Time to Interactive
- First Meaningful Paint
- и прочее
Размер сайта разобьётся на:
- Размер js бандла,
- Размер css бандла,
- Объём картинок,
- И так далее
Подумайте, что именно важно для вашего проекта, какие именно quality attributes и начните их регрессионно измерять. Практически все измерения можно делать автоматически, в том же самом jenkins'е.
В следующем посте поговорим с вами о систематизации Quality attributes и тулзах для их измерения. Именно на них выстраиваются Quality gates.
Тема дня: Quality attributes и инструменты
Любое требование к системе можно отнести к одной из следующих качественных метрик:
- Functional suitability/ Функциональная пригодность
Ex: В 95% случаев, нейронная сеть корректно определяет, пойдёт ли дождь
- Performance Efficiency/ Уровень производительности
Ex: Время полной загрузки сайта менее 5 секунда
- Compatibility/ Совместимость
Ex: Наш сайт должен работать в IE 11 версии
- Usability/ Удобство использования
Ex: Сайт должен быть адаптирован для людей с ограниченными возможностями
- Reliability/ Надёжность
Ex: Сайт должен работать без интернета
- Security/ Безопасность
Ex: Не храним plain пароли!
- Maintainability/ Сопровождаемость
Ex: Технический должен быть менее 2 дней
- Portability/ Переносимость
Ex: Работает и под windows, и под ubuntu
Эти верхнеуровневые QA выбраны из ISO 25010. Когда-то в стандарте был указан и QA Scalability.
Теперь про инструменты.
Для определения QA фронтэнд приложений на начальном этапе подойдёт lighthouse
Ознакомиться с его функционалом и предоставляемыми метриками (их более сотни) можете прямо сейчас, он встроен в отладчик хрома.
Вот так, например, выглядит отчёт для rb.ru с учётом throttling'а
Для статического анализа вашего кода помимо стандартного линтера подойдут инструменты типа Sonar Qube который покажет и ваш приблизительный уровень технического долга, и некоторые security issues, и откровенные баги. Прикрепляю пример отчёта с официального сайта.
Любое требование к системе можно отнести к одной из следующих качественных метрик:
- Functional suitability/ Функциональная пригодность
Ex: В 95% случаев, нейронная сеть корректно определяет, пойдёт ли дождь
- Performance Efficiency/ Уровень производительности
Ex: Время полной загрузки сайта менее 5 секунда
- Compatibility/ Совместимость
Ex: Наш сайт должен работать в IE 11 версии
- Usability/ Удобство использования
Ex: Сайт должен быть адаптирован для людей с ограниченными возможностями
- Reliability/ Надёжность
Ex: Сайт должен работать без интернета
- Security/ Безопасность
Ex: Не храним plain пароли!
- Maintainability/ Сопровождаемость
Ex: Технический должен быть менее 2 дней
- Portability/ Переносимость
Ex: Работает и под windows, и под ubuntu
Эти верхнеуровневые QA выбраны из ISO 25010. Когда-то в стандарте был указан и QA Scalability.
Теперь про инструменты.
Для определения QA фронтэнд приложений на начальном этапе подойдёт lighthouse
Ознакомиться с его функционалом и предоставляемыми метриками (их более сотни) можете прямо сейчас, он встроен в отладчик хрома.
Вот так, например, выглядит отчёт для rb.ru с учётом throttling'а
Applied Fast 3G, 4x CPU Slowdown.Для статического анализа вашего кода помимо стандартного линтера подойдут инструменты типа Sonar Qube который покажет и ваш приблизительный уровень технического долга, и некоторые security issues, и откровенные баги. Прикрепляю пример отчёта с официального сайта.
Тема дня: ода к devOps специалистам
На разных проектах приходилось сталкиваться с devOps специалистами, которые видят
свои функциональные обязанности совершенно по-разному. Поэтому решил поделиться моим видением того, что должен выполнять devOps или devOps команда в зависимости от размера компании, количества проектов и т д.
devOps должен брать на себя ответственность за всё, что связано с инфраструктурой. Для меня devOps - это аналог IAAS (infrastructure as a service). Я бы его даже называл IAAS man'ом. Как супермен, но про инфраструктуру. Я не хочу, чтобы разработчики задумывались о том, где хостятся и как хостятся их приложения. Пусть им в этом поможет IAAS man!
Итак, IAAS man, по моему скромному мнению, должен:
- выстраивать CI/CD pipeline. Тулзы и метрики остаются за разработчиками
- поддерживать стабильность CI/CD pipeline. Если ваши ПРы не проходят какие-то Quality Gates, то у разработчика не должно быть сомнений в том, что причина в коде. Возможно многие узнают ситуацию, когда при фэйле каких-то проверок приходится в первую очередь проверять, проблема в ci или же в коде, а уже потом лезть в код или перезапускать проверки руками. И у некоторых devOps действительно с этим проблемы
- выстраивать инфраструктуру.
- поддерживать инфраструктуру. Сталкивался с тем, что хостер отключал сервера из-за отрицательного баланса на счету. Или devOps перенастраивает NGINX ночью, и вновь забывает про CORS запросы. Команда фронтенд разработки обоснованно ругается, а devOps отсыпается с утра.
- настройка бэкапов и сиcтемы резервного копирования.
- мониторинг. А точнее проактивный мониторинг. Информацию о том, что у нас что-то сломалось и отвалилось, должна приходить от devOps'ов. И это касается не только production среды. Если о падении какой-то ноды сообщают пользователи, служба поддержки или разработчики - мониторинг не работает. Ошибки приложений остаются за разработчиками.
- поддержка QA специалистов. Распараллеливание тестов, запуск на нескольких нодах, настройка тестовых сред обычно не по плечу QA специалистам. Тут им могут помочь либо разработчики, либо devOps. Единственное, QA среды очень нестабильны, поэтому для devOps они могут стать настоящей головной болью.
Не буду дальше копать в глубь и говорить, что есть devOps, специализирующиеся на каких-то более узких вещах, например, масштабируемости и надёжности. Это out of scope и тут одними devOps'ами не обойдёшься
На разных проектах приходилось сталкиваться с devOps специалистами, которые видят
свои функциональные обязанности совершенно по-разному. Поэтому решил поделиться моим видением того, что должен выполнять devOps или devOps команда в зависимости от размера компании, количества проектов и т д.
devOps должен брать на себя ответственность за всё, что связано с инфраструктурой. Для меня devOps - это аналог IAAS (infrastructure as a service). Я бы его даже называл IAAS man'ом. Как супермен, но про инфраструктуру. Я не хочу, чтобы разработчики задумывались о том, где хостятся и как хостятся их приложения. Пусть им в этом поможет IAAS man!
Итак, IAAS man, по моему скромному мнению, должен:
- выстраивать CI/CD pipeline. Тулзы и метрики остаются за разработчиками
- поддерживать стабильность CI/CD pipeline. Если ваши ПРы не проходят какие-то Quality Gates, то у разработчика не должно быть сомнений в том, что причина в коде. Возможно многие узнают ситуацию, когда при фэйле каких-то проверок приходится в первую очередь проверять, проблема в ci или же в коде, а уже потом лезть в код или перезапускать проверки руками. И у некоторых devOps действительно с этим проблемы
- выстраивать инфраструктуру.
- поддерживать инфраструктуру. Сталкивался с тем, что хостер отключал сервера из-за отрицательного баланса на счету. Или devOps перенастраивает NGINX ночью, и вновь забывает про CORS запросы. Команда фронтенд разработки обоснованно ругается, а devOps отсыпается с утра.
- настройка бэкапов и сиcтемы резервного копирования.
- мониторинг. А точнее проактивный мониторинг. Информацию о том, что у нас что-то сломалось и отвалилось, должна приходить от devOps'ов. И это касается не только production среды. Если о падении какой-то ноды сообщают пользователи, служба поддержки или разработчики - мониторинг не работает. Ошибки приложений остаются за разработчиками.
- поддержка QA специалистов. Распараллеливание тестов, запуск на нескольких нодах, настройка тестовых сред обычно не по плечу QA специалистам. Тут им могут помочь либо разработчики, либо devOps. Единственное, QA среды очень нестабильны, поэтому для devOps они могут стать настоящей головной болью.
Не буду дальше копать в глубь и говорить, что есть devOps, специализирующиеся на каких-то более узких вещах, например, масштабируемости и надёжности. Это out of scope и тут одними devOps'ами не обойдёшься
Тема дня: немного о процессах.
На днях разговаривал с молодой командой ребят, занимающихся своим стартапом.
Спрашивали меня, что нужно для стартапа? Какой процесс выбрать, как работу организовать. Почему-то очень удивились, когда я им сказал, что процессы и стартап это вещи друг с другом очень слабо связанные. То есть конечно круто, если вы сразу же можете организовать правильно свою работу, но для стартапа это последнее, на что стоит обращать внимание.
Из 100 потенциальных инвесторов 1 спросит хотя бы о языке, на котором вы делаете проект, не то что о процессе. Конечно, это касается в первую очередь России. В общем посоветовал им в бизнес инкубатор податься, куда ж ещё.
С другой стороны разговаривал с американскими коллегами, обсуждали стройность процессов, их зрелость и так далее. Разговор зашёл о CMMI. Спросил, у кого-то в организации есть корочка? Ответ был простым "Мы не индусы и гос заказы не выполняем, нафига нам это?" Полная аналогия с другими сертификатами. Нужны в основном для тендеров и резюме, практической пользы мало.
На днях разговаривал с молодой командой ребят, занимающихся своим стартапом.
Спрашивали меня, что нужно для стартапа? Какой процесс выбрать, как работу организовать. Почему-то очень удивились, когда я им сказал, что процессы и стартап это вещи друг с другом очень слабо связанные. То есть конечно круто, если вы сразу же можете организовать правильно свою работу, но для стартапа это последнее, на что стоит обращать внимание.
Из 100 потенциальных инвесторов 1 спросит хотя бы о языке, на котором вы делаете проект, не то что о процессе. Конечно, это касается в первую очередь России. В общем посоветовал им в бизнес инкубатор податься, куда ж ещё.
С другой стороны разговаривал с американскими коллегами, обсуждали стройность процессов, их зрелость и так далее. Разговор зашёл о CMMI. Спросил, у кого-то в организации есть корочка? Ответ был простым "Мы не индусы и гос заказы не выполняем, нафига нам это?" Полная аналогия с другими сертификатами. Нужны в основном для тендеров и резюме, практической пользы мало.
Тема дня: DUMP 2019
На этих выходных мы с командой ездили на DUMP 2019 в Екатеринбург, совершенно замечательную конференцию разработчиков. Было аж 7 потоков:
- Frontend,
- Backend,
- Design,
- QA,
- Science,
- Management,
- Мастер-классы
Я безумно благодарен организаторам за то, что секция backend не была разбита на подсекции по языкам и базам данным. Это заставляет докладчиков абстрагироваться от конкретной реализации поднимаемой им проблемы и рассуждать о ней на архитектурном уровне.
Также очень здорово, что организаторы запрещают открытый хантинг сотрудников. Хочешь хантить - ставь стенд, делай квизы и конкурсы. Напрямую - нельзя. Иначе работодатели не то что не оплачивали бы сотрудникам такие поездки, а напрямую запрещали бы их. Не очень круто заплатить 20 тысяч на дорогу, жильё и участие для того, чтобы вашего сотрудника схантили конкуренты.
Вообще организация была на должном уровне. Каждый был сыт, получил кучу мерча, доклады отбирал профильный программный комитет. Для спикеров отдельно организовали экскурсию по Екатеринбургу на следующий день. Хотя даже обычные участники в итоге смогли на неё попасть.
Было очень интересно побеседовать с представителями Miro, которые раньше назывались Realtimeboard. Их продукт - онлайн доски общего пользования со временем отклика настолько маленькими, что мы можем видеить премещение сотен курсоров других участников, работающих с нами на одной доске. Можем рисовать, клеить стикеры, писать юзер стори, даже линковать задачи из джиры. И майнд мапы туда включены. В общем для меня это сейчас основной инструмент для Work breakdown structure схем.
И ребята подготовили классный доклад о том, как они делали performance тестирование своего продукта.
На этих выходных мы с командой ездили на DUMP 2019 в Екатеринбург, совершенно замечательную конференцию разработчиков. Было аж 7 потоков:
- Frontend,
- Backend,
- Design,
- QA,
- Science,
- Management,
- Мастер-классы
Я безумно благодарен организаторам за то, что секция backend не была разбита на подсекции по языкам и базам данным. Это заставляет докладчиков абстрагироваться от конкретной реализации поднимаемой им проблемы и рассуждать о ней на архитектурном уровне.
Также очень здорово, что организаторы запрещают открытый хантинг сотрудников. Хочешь хантить - ставь стенд, делай квизы и конкурсы. Напрямую - нельзя. Иначе работодатели не то что не оплачивали бы сотрудникам такие поездки, а напрямую запрещали бы их. Не очень круто заплатить 20 тысяч на дорогу, жильё и участие для того, чтобы вашего сотрудника схантили конкуренты.
Вообще организация была на должном уровне. Каждый был сыт, получил кучу мерча, доклады отбирал профильный программный комитет. Для спикеров отдельно организовали экскурсию по Екатеринбургу на следующий день. Хотя даже обычные участники в итоге смогли на неё попасть.
Было очень интересно побеседовать с представителями Miro, которые раньше назывались Realtimeboard. Их продукт - онлайн доски общего пользования со временем отклика настолько маленькими, что мы можем видеить премещение сотен курсоров других участников, работающих с нами на одной доске. Можем рисовать, клеить стикеры, писать юзер стори, даже линковать задачи из джиры. И майнд мапы туда включены. В общем для меня это сейчас основной инструмент для Work breakdown structure схем.
И ребята подготовили классный доклад о том, как они делали performance тестирование своего продукта.
dump-ekb.ru
DUMP 2026 — самая крупная ИТ-конференция на Урале
Конференция DUMP для разработчиков, менеджеров разработки, дизайнеров и тестировщиков.
Тема дня: научите разработчиков писать плохой код
Один из интересных докладов на DUMP 2019 был от продуктолога Skyeng, которая рассказывала, что они тестируют в месяц более 100 гипотез, однако 99 из них убивают, не доводят до реализации.
При этом мелкие фичи типа "Поменять цвет у кнопки" не включают в этот список гипотез. А вот предложить новый тариф для определённой ЦА - это прямо гипотеза, которая может увеличить прибыль компании, а может нет. При этом из 10 разработанных фич в итоге выстреливает одна, поэтому у них в компании строго борются с кодерами-перфекционистами. Успешную фичу можно отрефакторить потом. А реализация фичи по всем правилам разработки может занимать по времени как 5 быстро запилинных фич.
И тут возникают сложности. Не каждый опытный разработчик согласится писать говнокод, пусть и локально, в какой-то определённой его части. Он большую часть сознательной проф деятельности учился писать чистый код, а тут ему PM говорит "Забудь". Чтобы сгладить этот конфликт надо привить понимание бизнеса программисту, а это не всегда легко.
Получается, что старшие разработчики и тимлиды это не просто люди, которые должны писать чистый код, но и понимающие, когда не надо этого делать.
Один из интересных докладов на DUMP 2019 был от продуктолога Skyeng, которая рассказывала, что они тестируют в месяц более 100 гипотез, однако 99 из них убивают, не доводят до реализации.
При этом мелкие фичи типа "Поменять цвет у кнопки" не включают в этот список гипотез. А вот предложить новый тариф для определённой ЦА - это прямо гипотеза, которая может увеличить прибыль компании, а может нет. При этом из 10 разработанных фич в итоге выстреливает одна, поэтому у них в компании строго борются с кодерами-перфекционистами. Успешную фичу можно отрефакторить потом. А реализация фичи по всем правилам разработки может занимать по времени как 5 быстро запилинных фич.
И тут возникают сложности. Не каждый опытный разработчик согласится писать говнокод, пусть и локально, в какой-то определённой его части. Он большую часть сознательной проф деятельности учился писать чистый код, а тут ему PM говорит "Забудь". Чтобы сгладить этот конфликт надо привить понимание бизнеса программисту, а это не всегда легко.
Получается, что старшие разработчики и тимлиды это не просто люди, которые должны писать чистый код, но и понимающие, когда не надо этого делать.
Тема дня: Стоит ли отправлять сотрудников на конференции?
С одной стороны, практически каждый сотрудник после конференции скажет, что практически ничего нового не узнал. Ему понравилась поездка, он бы с удовольствием на неё поехал ещё раз, но что касается реальной пользы.. её мало.
И для большинства компаний этого ответа вполне достаточно для того, чтобы закрыть вопрос. Тем более там ещё хантеры от других конкурентов приезжают, что приносит дополнительные риски. В чем тогда смысл? По статистике дампа на конференцию в ЕКБ стоимостью 7 000 рублей 70% билетов было оплачено компаниями. На конференцию в Казани, стоимостью 3 000 рублей лишь 30%.
Но может что-то есть положительное всё-таки в этих конференциях из-за чего работодатели отправляют туда своих бойцов?
- гордость за компанию. Сотрудник рад и признателен компании за то, что его отправили на конференцию. И это даёт ему +100500 к защите от хантеров. И делает его более лояльным к компании. Ведь большинство компаний всё-таки не отправляют своих сотрудников на такие мероприятия. При этом парадокс: сотрудник больше ценит, если оплачивается часть поездки, не все 100%.
- тимбилдинг. Конференцию можно рассматривать как своего рода тимбилдинг, кто члены команды вместе выбираются и делятся своим мнением об услышанным и увиденным
- систематизирование знаний. Иногда важно ещё раз услышать то, что у тебя было в голове в не совсем упорядоченном виде на докладе, чтобы разложить всё по полочкам. Или ещё раз прислушаться к идеям коллеги, которые ты сначала в серьёз не воспринимал, но из других уст они звучат убедительнее.
- нетворкинг. Если ехать на конференцию с определёнными болями, которые есть в компании, то можно найти людей, которые помогут их решить.
С одной стороны, практически каждый сотрудник после конференции скажет, что практически ничего нового не узнал. Ему понравилась поездка, он бы с удовольствием на неё поехал ещё раз, но что касается реальной пользы.. её мало.
И для большинства компаний этого ответа вполне достаточно для того, чтобы закрыть вопрос. Тем более там ещё хантеры от других конкурентов приезжают, что приносит дополнительные риски. В чем тогда смысл? По статистике дампа на конференцию в ЕКБ стоимостью 7 000 рублей 70% билетов было оплачено компаниями. На конференцию в Казани, стоимостью 3 000 рублей лишь 30%.
Но может что-то есть положительное всё-таки в этих конференциях из-за чего работодатели отправляют туда своих бойцов?
- гордость за компанию. Сотрудник рад и признателен компании за то, что его отправили на конференцию. И это даёт ему +100500 к защите от хантеров. И делает его более лояльным к компании. Ведь большинство компаний всё-таки не отправляют своих сотрудников на такие мероприятия. При этом парадокс: сотрудник больше ценит, если оплачивается часть поездки, не все 100%.
- тимбилдинг. Конференцию можно рассматривать как своего рода тимбилдинг, кто члены команды вместе выбираются и делятся своим мнением об услышанным и увиденным
- систематизирование знаний. Иногда важно ещё раз услышать то, что у тебя было в голове в не совсем упорядоченном виде на докладе, чтобы разложить всё по полочкам. Или ещё раз прислушаться к идеям коллеги, которые ты сначала в серьёз не воспринимал, но из других уст они звучат убедительнее.
- нетворкинг. Если ехать на конференцию с определёнными болями, которые есть в компании, то можно найти людей, которые помогут их решить.
Тема дня: артефакты для процессов
Часто возникают ситуации, когда вы хотите формализовать какую-то часть процесса разработки, например, тестирование, но не знаете как. С чего начать и как подступиться к этой задаче, чтобы вы могли хотя бы для себя поставить галочку "Я провожу тестирование перед каждым релизом"?
Помочь в этом могут шаблоны. Всё ведь просто: берёте какой-то вордовский документ - шаблон, который используется для тестирования и заполняете его. Потом сможете шаблон адаптировать под свои нужды, но для начала сойдёт и дефолтный.
Вы можете час разговаривать с лидом QA и расспрашивать как он оформляет скрипты тестирования, а можете просто попросить скинуть его образец.
Сегодня образцом скрипта для тестирования поделюсь я. Причём не своим, NDA, вы же понимаете. А шаблоном процесса OpenUP. Вот он
А вот шаблон для тест кейсов. Оба шаблона мы модифицировали под свои нужды, но основной концепт и посыл остался.
В следующий раз поговорим про процесс openUP и почему он крут, а также покажу где брать другие полезные шаблоны.
Часто возникают ситуации, когда вы хотите формализовать какую-то часть процесса разработки, например, тестирование, но не знаете как. С чего начать и как подступиться к этой задаче, чтобы вы могли хотя бы для себя поставить галочку "Я провожу тестирование перед каждым релизом"?
Помочь в этом могут шаблоны. Всё ведь просто: берёте какой-то вордовский документ - шаблон, который используется для тестирования и заполняете его. Потом сможете шаблон адаптировать под свои нужды, но для начала сойдёт и дефолтный.
Вы можете час разговаривать с лидом QA и расспрашивать как он оформляет скрипты тестирования, а можете просто попросить скинуть его образец.
Сегодня образцом скрипта для тестирования поделюсь я. Причём не своим, NDA, вы же понимаете. А шаблоном процесса OpenUP. Вот он
А вот шаблон для тест кейсов. Оба шаблона мы модифицировали под свои нужды, но основной концепт и посыл остался.
В следующий раз поговорим про процесс openUP и почему он крут, а также покажу где брать другие полезные шаблоны.
Тема дня "Open source проекты"
Не мог обойти тему, о которой на js митапе в прошедший четверг выступл Андрей Ситник @sitnik, создатель нескольких популярных и полезных open source проектов, таких как PostCss, browser list, NanoId, autoprefexier, size-limit и некоторых других.
Андрей поднял вопрос "Ради чего стоит идти в open source".
Если в кратце - то только ради того, чтобы что-то изменить. И при этом это очень сложный процесс, требующий огромной самоотдачи.
Если ваша цель стать известнее, популярнее, получить крутую строчку в резюме - пишите статьи, выступайте на митапах и конференциях. В конце концов, пишите телеграм канал. Добиться этого с помощью open source проектов в сто раз сложнее.
Огромную роль в успехе проекта играет его продвижение, а не качество написанного кода. Вы должны быть готовы раскручивать своё детище, как любой CMMщик. Получается, что для успешного продвижения вашего open source проекта, вы тоже должны быть достаточно популярны. И в итоге ваша популярность будет продвигать проект, а сам проект будет продвигать вас.
Теперь немного от себя. Вообще open source проекты очень схожи с обычными продуктами. Вы можете сделать 10 проектов и только один из них выстрелит. Точно также и с open source. По словам Андрея, из 52 его проектов, 5 стали популярны, остальные не выстрелили. И к сожалению, как и у обычных проектов, почти никого не волнует качество кода.
Точно также важно продвижение и подача проекта. У продуктов это как минимум визитка, у open source проекта - Read.me файл (без хорошей документации у open source проекта почти нет шанса).
Не мог обойти тему, о которой на js митапе в прошедший четверг выступл Андрей Ситник @sitnik, создатель нескольких популярных и полезных open source проектов, таких как PostCss, browser list, NanoId, autoprefexier, size-limit и некоторых других.
Андрей поднял вопрос "Ради чего стоит идти в open source".
Если в кратце - то только ради того, чтобы что-то изменить. И при этом это очень сложный процесс, требующий огромной самоотдачи.
Если ваша цель стать известнее, популярнее, получить крутую строчку в резюме - пишите статьи, выступайте на митапах и конференциях. В конце концов, пишите телеграм канал. Добиться этого с помощью open source проектов в сто раз сложнее.
Огромную роль в успехе проекта играет его продвижение, а не качество написанного кода. Вы должны быть готовы раскручивать своё детище, как любой CMMщик. Получается, что для успешного продвижения вашего open source проекта, вы тоже должны быть достаточно популярны. И в итоге ваша популярность будет продвигать проект, а сам проект будет продвигать вас.
Теперь немного от себя. Вообще open source проекты очень схожи с обычными продуктами. Вы можете сделать 10 проектов и только один из них выстрелит. Точно также и с open source. По словам Андрея, из 52 его проектов, 5 стали популярны, остальные не выстрелили. И к сожалению, как и у обычных проектов, почти никого не волнует качество кода.
Точно также важно продвижение и подача проекта. У продуктов это как минимум визитка, у open source проекта - Read.me файл (без хорошей документации у open source проекта почти нет шанса).
YouTube
Андрей Ситник — Продвижение опенсорс-проектов
Андрей Ситник на митапе Tver.io Open-Source Meetup 10 мая 2019 в Твери.
Cоздатель популярных Автопрефиксера, PostCSS, Браузерлиста и Nano ID рассказал про свой опыт продвижения опенсорс-проектов.
Доклад будет полезен опытным разработчикам, которые хотят…
Cоздатель популярных Автопрефиксера, PostCSS, Браузерлиста и Nano ID рассказал про свой опыт продвижения опенсорс-проектов.
Доклад будет полезен опытным разработчикам, которые хотят…
