Игорь Камышев — разработчик веб‑приложений и техлид. Люблю чистый код и работающие продукты. Программирую на TypeScript, иногда на Elixir или Dart.

Веду канал в Телеграме kamyshev.code об архитектуре ПО и софт‑скиллах. Курирую список маст‑ридов для программистов.

Проекты

Смены Самоката
2019‑2020

Внутреннее приложение «Смены» помогает сотрудникам Самоката планировать рабочее время. В нем курьеры отмечают, когда они готовы работать, а директора складов распределяют смены.

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

Стек: JS (React, Node.js, TypeScript)

Самокат
2019

Мобильное приложение «Самокат» — это замена магазину у дома с моментальной доставкой продуктов (15‑30 минут).

Сделал карту с зонами доставки, интегрировал Mapbox. Сверстал экран для отображения электронных чеков от АТОЛ Онлайн. Спроектировал и реализовал систему диплинков для приложения. Переписал функциональность сторис с Preact (внутри веб‑вью) на ReactNative.

Стек: JS (ReactNative, TypeScript).

Stomweb
2019

Образовательная платформа Stomweb для врачей‑стоматологов: статьи, видеолекции, вебинары. Мы перезапустили сайт с новым дизайном.

Написал сервис для конвертации видео в M3U и последующего стриминга через HLS. Перевёл легаси‑код админки на современную версию PHP, завернул её в Docker, добавил новые формы и исправил баги в старых. Верстал обновлённый фронтенд.

Стек: JS (React, Node.js, TypeScript), PHP.

Просто спросить
2018‑2019

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

Спроектировал приложение, руководил разработкой при несдвигаемом дедлайне. Сделал синхронизацию данных приложения с Trello‑досками. Написал Telegram-бота для экспертов сервиса.

Стек: JS (React, Node.js, TypeScript).

Faster
2018

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

Организовал рефакторинг легаси‑кода и ускорил поиск по лекарствам в 10 раз. Реализовал масштабируемую архитектуру. Автоматизировал поиск изображений для товаров. Перевёл фронтенд на TypeScript.

Стек: JS (React, TypeScript), PHP (Yii2).

CRM ФРМСП
2018

CRM Фонда развития малого и среднего предпринимательства позволяет работникам легко обрабатывать обращения, прослеживать их историю и отчитываться перед регулятором.

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

Стек: JS (Vue), PHP (Symfony).

QEEP‑Pro
2017‑2018

Платформа «QEEP‑Pro» объединяет в себе CRM, интернет‑магазин и мобильное приложение. Проект стартовал в 2011, к 2017 оброс значительным количеством легаси.

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

Стек: JS (React, ReactNative, Vue, TypeScript), PHP (Symfony).

Procraft
2017

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

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

Стек: JS (React, ReactNative, TypeScript, Relay), Scala (Play, Slick, Sangria), GraphQL.

Опыт

Авиасейлс
03.2020‑сейчас

Фронтенд разработчик

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

Самокат
08.2019‑03.2020

Фронтенд разработчик, техлид

Самокат — сервис моментальной доставки продуктов (10‑15 минут), без минимальной суммы заказа. Я занимался внутренними продуктами компании: приложения для складских работников, сотрудников отдела кадров, службы технической поддержки и отдела закупок.

Я декомпозировал проекты от состояния «должно быть классно» до конкретных задач разработчикам. Программировал фронтенды на React, бэкенды на Node.js, поддерживал легаси‑приложение на Angular. Контролировал качество кода, проектировал интеграции с другими внутренними сервисами, координировал релизы. Руководил командой из 3 разработчиков.

Нетология
04.2018‑01.2020

Методист и лектор

Работал над курсами, вебинарами и домашними заданиями в онлайн‑университете Нетология.

Разработал и год вёл несколько занятий для курса по React, проверял домашние задания. Читал лекции на первом запуске продвинутого курса по JavaScript. Курировал 7 потоков курса по базовому JS, вёл вебинары, корректировал содержание курса, помогал студентам и преподавателям.

Breadhead
06.2018‑08.2019

Фулстек разработчик, техлид

Breadhead делает веб‑сервисы, связанные с образованием, e‑commerce и автоматизацией процессов. Я строил архитектуру новых приложений и оптимизировал легаси-код, контролировал качество кода. Писал сложные фронтенды и надёжные бэкенды.

Руководил командой из 4 разработчиков. Валидировал запросы бизнеса, превращал их в задачи и распределял между разработчиками. Привёл все приложения к единому стеку технологий. Ввёл практику написания тестов и код‑ревью. Автоматизировал интеграцию и доставку, настроил CI/CD.

QEEP‑Pro
11.2016‑06.2018

Фулстек разработчик

QEEP‑Pro специализируется на создании CRM и ERP систем. Я писал внутренние продукты и работал над заказными проектами для Procraft, Фонда развития малого и среднего предпринимательства и локальных служб доставки. Привил практику непрерывной интеграции приложений, настроил CI. Руководил командой из 3 разработчиков.

Фриланс
01.2014‑11.2016

Веб‑разработчик

Верстал сайты, писал jQuery‑плагины, поднимал и дорабатывал CMS. Сделал свою систему управления контентом, запустил на ней 5 сайтов.

Статьи

Неудачный проект: Checkmoney

Каждый разработчик должен написать свою CMS и трекер расходов. В 2019 году я сделал приложение для менеджмента личных финансов и словил несколько инсайтов.

Лучшая часть Эффектора

Эффектор — это компактный и производительный менеджер состояний. Он независим от UI‑фреймворков, предсказуем и удобен. Почти месяц назад мы в Авиасейлс начали мигрировать часть кода с RxJS на Effector. В процессе я обнаружил совершенно неожиданную фичу, которая изменила моё отношение к библиотеке.

Солидные фронтенды: мониторинг

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

Солидные фронтенды: конфигурация

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

Preact — идея на 5, реализация на 3

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

Конспект книги «Создание микросервисов»

В процессе чтения книги Сэма Ньюмена «Создание микросервисов» писал себе заметки. Для удобства собрал их в единый конспект. О плюсах и минусах микросервисной архитектуры, подходах и способах строить такие системы .

Angulareact

У меня есть проблема. Приложение написано на Angular, а библиотека компонентов на React. Делать клон библиотеки слишком дорого. Значит, нужно использовать React‑компоненты в Angular-приложении с минимальными затратами. Разбираемся как это делать.

Инструкция: хостим сайты

Короткая практическая инструкция по хостингу любых сервисов. Единственное требование — завернуть приложение в Docker‑контейнер, взамен получаем автоматическую генерацию nginx-конфигов, HTTPS из коробки, надёжность и простоту.

Инструкция: бэкап GitHub

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

Кейс: воркер‑треды

Node.js работает в одном потоке. Чаще всего это не создаёт проблем, потому что почти все операции в наших приложениях неблокирующие. Недавно я делал обработку натурального языка на JS и упёрся в однопоточность. Решение — воркер‑треды.

Как мы делаем CI/CD

Год назад в Breadhead мы начали делать непрерывную интеграцию и доставку приложений. Рассказываю, зачем мы это делаем, какие технологии используем, сколько денег тратим, как повторить, что планируем улучшить.

Самый важный навык, который может освоить программист

Работа программиста — решать проблемы бизнеса, а код — это инструмент решения этих проблем. Но код стоит дорого. Его дорого писать, но её дороже поддерживать. Каждая новая строка потенциально ведёт к багам, требует рефакторинга в будущем. Перевод статьи о важности умения писать меньше кода.

Конфигурация NodeJS приложений

В манифесте Приложений двенадцати факторов говорится, что конфигурация должна быть отделена от кода. Конфигурация приложения – это все, что может меняться между развёртываниями (среда разработки, промежуточное и рабочее развёртывание).

Лёгкий фронтенд

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

Сайты должны быстро грузиться при любом интернете и хорошо работать на любом устройстве. Если сайт маленький, то добиться этого легко отказавшись от фреймворков и используя только HTML/CSS/JS. Довольно просто построить статический сайт быстро, не потерять в поддерживаемости и качестве кода.

Как работать с денежными значениями в JavaScript

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

Процесс подготовки npm‑пакета

Я часто делаю npm‑пакеты. Это не моя основная работа, потому хочется тратить минимум времени и сил. После публикации пакет нужно поддерживать, хочется минимизировать и эти затраты. Статья о процессе и используемых инструментах.

Чистая архитектура

В процессе чтения книги Дядюшки Боба «Чистая архитектура» писал себе заметки. Для удобства собрал их в единый конспект. О ценностях программы, парадигмах в программировании, принципах SOLID и важности тестирования.

Не решайте воображаемые проблемы

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

Маст‑риды