Владислав Тимофеев

Владислав Тимофеев

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

  • 10+ е-ком проектов;
  • помог 4+ стартапам;
  • 3+ страховые компании в качестве разработчика;
  • обучил 50+ мидлов и синьор;
  • 10+ тимлидов и техлидов.
TIMOFEEV Tech Talk
67 участников
8 мая
ADR

Три частые проблемы, с которыми я сталкиваюсь с архитектурными решениями:

- приходят разработчики и говорят, что нужно менять технологию X на Y;

- спрашиваешь участников проекта, почему в проекте реализована фича именно так, получаешь ответ “не помню” / "не знаю" / "человек, который принимал решение давно уволился";

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


Когда эти проблемы стали душить меня, вот тогда я открыл для себя ADR.

ADR - Architecture Decision Record, документ, в котором зафиксировано важно решение по архитектуре.

К таким решениям могут относится следующие аспекты:

- добавление в проект новой технологии или замены существующей;

- изменение структуры проекта;

- как компоненты будут взаимодействовать, например, через REST, gRPC, асинхронно и т.п. ;

- решения, которые влияют на функциональные и нефункциональные характеристики;

- переписать с нуля;

- разработка выглядит дорого.


В ADR включается в себя заголовок с порядковым номером, статус и описание решения. Здесь можно найти различные шаблоны https://github.com/joelparkerhenderson/architecture-decision-record

Для меня важно в ADR увидеть:

- проблему которую решает предложение (мотивация);

- само решение;

- рассмотренные альтернативы;

- последствия решения, а именно, что станет проще и какие проблемы появятся;

- значимость, приоритет, и затраты (стоимость обслуживания, человека-часах, story points, и годовая стоимость, если подразумевается приобретение какой-то технологии).


Каждая записка формирует журнал архитектурных решений (ADL), которому можно обратиться и найти ответ на вопрос, почему мы делаем именно так, а не иначе. А так же оценить решение перед началом его внедрения, и осознано принять решение.
👍
5
🔥
3
👏
3
2
54
12:41
5 апреля
Белый лист

Страх белого листа - страх начать что-то делать.

Это интересная прокрастинация))

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

Художники использую термин "страх белого холста”

У нас, у разработчиков, наверное этот термин назывался бы “страх чистой IDE” 😄  

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

Я никогда не думал об этой проблеме и не знал , что она массовая, имеет термин “белый лист” и как её решать. А сегодня посмотрел новый выпуск Топлес о нейронках, и в нем были упомянуты “Диффузионные модели” , их используют Midjourney, DALL-E 2, Stable Diffusion, YandexArt для генерации картинок. Но чтобы нейронки сгенерировали, на вход нужно подать изображения состоящего из рандомных пикселей. Выглядит как шум на старых телеках, когда нет сигнала. Это помогает нейронкам решить проблему белого листа.

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

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

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

Если хватает насмотренности и/или есть устоявшаяся архитектура в проекте, то начинаю сразу со структуры.

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

Just Do It, ide всё стерпит (с) Json Stetmen
🔥
14
3
🤔
2
👍
1
🥰
1
143
10:05
29 марта
Я всегда был в окружении сильных бекендеров, и слабых фронтов, не то чтобы не встречал сильных, но их было единицы. Как все бэкендеры я прошел через фронтовые задачи, даже как-то раз сверстал огромный лендос для красного ретейлера, было и формошлепство, и делал сложные задачи, включающие оптимизацию рендеринга и т.д. Этого опыта мне достаточно, чтобы оценить компетентность фронтенд-специалиста.

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

Мировоззрение начало меняться когда я пошел в наставничество, но кардинально всё изменилось, когда я начал управлять продуктами.

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

Пользователю не важен ваш бекенд, но ему важен интерфейс и удобства. Оцените на себе, вам больше нравится Outlook или Gmail ? Telegram или Viber ? Yandex- , VK- или Beeline Music? Youtube или Rutube? Apple TV или Okko ?

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

Веб/десктоп приложение не сделаешь без крутых фронтов. У фронтов есть большие козыри, чтобы прорывать топ с их петпроектами, опенсорсами и стартапами, делая пиздатые приложения

Вот парочку проектов, которые меня вдохновляют:

1) Всеми любимый Notion - вроде как весь на ts + nodejs + react

2) Miro - отчасти на стеке nodejs + ts + react

3) https://github.com/outline/outline - opensource, крутая вики на ts + nodejs + react

4) https://github.com/twentyhq/twenty - opensource, crm на ts + nodejs + react

5) https://github.com/ever-co/ever-gauzy - opensource, erp, crm , hrm система, также ts + nodejs + react

Оцените, в них есть стиль.

Opensource проекты на PHP, они классные и функциональные , но не захватывают своей красотой и дружелюбностью )

Короче, не забывайте про UI/UX
🔥
10
👍
2
2
158
18:47
18 марта
Забирайте шпаркалку по Low Coupling & High Cohesion
🔥
10
👍
4
1
❤‍🔥
1
170
18:02
4 марта
Три базовые вещи, которые нужно знать, чтобы быстро погружаться в любой фреймворк

Shortpost

1. Жизненный цикл запроса
2. DI / Service Locator
3. Данные: ORM, Query Builder, DBAL

Longpost

1 Жизненный цикл (ЖЦ) запроса

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

Также стоит знать PSR-7

Популярные библиотеки

- symfony/routing
- Slim
- bramus/router
- nikic/FastRoute

2 DI / Service Locator

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

Нужно знать как работают контейнеры, как конфигурируются, что такое autowire, декораторы, фабрики, основные способы инъекции зависимостей.

Изучить PSR-11

Популярные библиотеки

- symfony/dependency-injection
- PHP-DI/PHP-DI
- Illuminate/Container
- laminas/laminas-servicemanager

3 Данные

Данные в большинстве случаев хранятся в реляционных БД. Фреймворки предоставляют интеграцию библиотек для работы с БД по типу ORM, Query Builder, DBAL .

ORM - паттерн, который связывает данные из БД с вашими объектами-сущностями в коде. Про ORM нужно знать, что существует два типа ActiveRecord (AR) и DataMapper.

QueryBuilder - инструмент, предоставляет удобный способ для составления запросов к БД.

DBAL - создает абстракцию над БД, позволяет писать запросы независимо от конкретной БД, как правило удобная обертка на PDO.

ORM, Query Builder, DBAL не являются взаимозаменяемыми, а некоторые из них основаны на базе других, например, ORM может использовать Query Builder и DBAL , как от собственных вендеров так и сторонних.

Популярные библиотеки

- doctrine/orm
- doctrine/dbal
- cycle/orm
- illuminate/database
- gabordemooij/redbean


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



Понимание этих трех вещей легко даст вам переключаться между Laravel, Symfony, Yii, Spiral, CackePHP. Да, у них разные реализации, свои методы и т.д. , но принципы одни. Так же это и справедливо для других ЯП, например, Java, Go, NodeJs.

Также вы можете собрать свой “фреймворк” выбрав по одной либе в каждой секции, например:

1) slim + php-di + doctrine

2) bramus/router + Illuminate/Container + cycle/orm

3) nikic/FastRoute + laminas/laminas-servicemanager + illuminate/database

4) и т.д. , всё что пожелает ваша душа
🔥
13
4
2
212
09:34
8 февраля
Зацените прикол, словили ошибку при установке composer на pipeline, всё дело в том, что команда composer задеплоили код с ошибкой. Вот это мы везунчики. Решил просто поделиться 😁

p.s. По истории запусков джобы, вы можете заметить, что мы очень настойчивые 😁 главное верить

p.p.s composer , я всё видел 😑😅
😱
4
😁
2
🏆
1
203
16:31
21 января
На одном из проектов, который находится у меня на консалтинге, я хотел внедрить grumphp. Основная задача, которую мы преследовали - это качество кодовой базы, код-стайл, стат анализ и т.д. и т.п.

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

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

НО КАКОЙ ЦЕНОЙ

Это самый злоебучий способ для разрабов, ещё один триггер для нервного срыва.

Проблемы использования GrumPHP:


- разные среды окружения, в которых работают разработчики, это может быть unix, windows, macos, которые имеют свои нюансы, а если ваше приложение запускается под докером, то нужно учитывать, что все проверки нужно запускать внутри контейнера, и опять же вызов команд внутри контейнеров будут отличаться или не будут совместимы, особенно это происходит, когда докер работает на винде. Кто работает/работал с виндой, тот знает какие бываю капризы. Большие риски того, что вам постоянно придется возвращаться к донастройке хуков;

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

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

- нельзя запушить без успешно пройденных проверок

на самом деле можно, использовав git commit с флагом пропуска хуков, кто прям сходу готов вспомнить, что это за аргумент? -f? -d? -n? -s? Да, -n или --no-verify . А если пожар, как же инструция

1. git add .
2. git commit “WIP: 🔥🔥🔥”
3. git push

--no-verify — помнит только тот , кто уже настрадался от хуков

А когда код будет запущен, скорее всего придется снова проверить всё на CI/CD, раз у разработчика есть флаг --no-verify , и собственно вопрос, зачем нужно было заебывать разраба на этапе коммита? 🙂 

В итоге, я оставил все проверки на CI/CD

На данный момент, единственный вариант использования GrumPHP вижу только в автоформатировании кода при коммите, но только с ограничением на затронутые файлы в рамках бренча, а не всей кодовой базы.
🔥
8
👍
2
2
💯
1
238
11:57
15 января
Вы смотрели второй сезон Локи ? Если да, то заметили ли вы, что он ведет себя как типичный менджер проекта ? 😂
😁
7
🤣
1
198
11:03
Кейсы
Каталог ИМ электротоваров nda

Интернет-магазин в стандартной связке Bitrix — 1C, управление каталогом происходит в 1С, ежедневный обмен между сайтом и 1С, проблема: во время импорта ИМ начинает тормозить, 1С тяжело работать с товарной базой, 1С долго загружает каталог, из-за чего менеджер тратит 15-20 минут на составления одного документа (накладная, акт и т.д.).
Моя задача была провести аналитику, разработать архитектуру, собрать и организовать команду разработки.
Мы внедрили и доработали под нужды клиента PIM, за основу взяли один из продуктов Ensi, адаптировали схемы кафки под проект. Разработали микросервис «Витрина» с использованием elasticsearach, для отображения, полнотекстового и фасетного поиска товаров на стороне интернет магазина. Реализовали отдельный микросервис для импорта товаров из 1С и RAEC.
Результат: загрузка страницы каталога меньше секунды с товарной базой в 1,5 млн товара. Удобный интерфейс управления товаром. Автоматическое масштабирование сервисов при больших объемах обмена товарами между системами. Техническое задание для 1С разработчиков для интеграции с системой PIM.
Роль: Teamlead, Архитектор
Технологии: PHP 8.1, Symfony, PostgreSQL, Kafka, Redis, Grafana, Elasticsearch, Docker, Filebeat, S3, Roadrunner, DDD

Отдел разработки веб-приложений аутсорс-компании

Руководил отделом разработки аутсорс компании с оборотом 50+ млн в год.

HR и рекрутинг

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

Обучил HR-менеджера стеку компании и взаимозаменяемым технологиям.

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

Проработали ограничивающую мотивацию, она включала в себя кодекс поведения, например, где разрешено курить, а где нет и чем это карается, рекомендации по коммуникациям (например, тл, не любят, когда их отвлекают оффлайн, они могли готовиться к собеседованиям или созвону с клиентам, им комфортнее, когда им предварительно пишут в личку), соблюдение порядка на кухне и т.д. Это позволило быстрее адаптироваться новым сотрудникам, а старые сотрудники меньше испытывали дискомфорт от пополнения команды. После этого, мы разработали Playbook, куда вошла ограничивающая мотивация, а также информация о компании, кейсы компании, раздел who is who, вопросы ЗП, больничных и отпусков, FAQ. Что способствовало ещё скорой адаптации новых сотрудников и знакомству с компанией.

Внедрил на постоянную основу анализ рынка, какие ЗП и бенефиты предлагают другие компании.

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

Программа обучения для стажеров

Курировал программу обучения стажеров направление Bitrix:

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

Разработал программу обучения Laravel.

Курировал разработку программы обучения фронтенд-разработчиков React , и запустил 3 потока стажеров.

People management
  • занимался организацией внутренних митапов, выступал сам;
  • разработал систему грейдов и организовал аттестацию сотрудников по защите грейдов;
  • составлял ИПР;
  • проводил one-to-one встречи;
  • отвечал за ЗП и премии;
  • отвечал за мотивацию сотрудников и климат в командах;
  • менторил тимлидов;
  • внедрил roadmap для тимлидов и менторов.
Инженерная культура

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

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

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

Проектное управление
  • занимался построением цикла разработки (прием задач/оценка/сроки/сдача/раскатка/приёмка), внедрял в команды готовые решения Kanban/Scrum, упрощенные и смешанные типы на их базе;
  • занимается генерацией бэклога и его приотизацией;
  • интегрировал клиентов в процесс разработки, чтобы сделать процесс прозрачнее, помогал с продуктовой стратегией как технический специалист, участвовал в составлении роадмапа продукта;
  • управлял рисками проектов;
  • занимался подбором команды под проект.
Продажи
  • участвовал в пресейлах, составлении сметы, изучение требований и рисков;
  • составлял роадмап проекта;
  • занимался подготовкой коммерческого предложения и проводил его защиту;
  • внедрил систему критериев оценки лидов;
  • развивал аутстаф канал, общение и знакомство с партнерами, подбор разработчиков.
Экосистема аутсорс-компании

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

Корпоративный портал

Корп. портал предоставлял функционал для управления списками сотрудников, создание учетных записей сотрудников при найме, и блокировки при увольнении; интеграция с Yandex360 для создания корпоративной почты. На базе Btirix 24 оцифровал бизнес-процесс для стажировки разработчиков в компании, включал в себя автоматическое создание задач, трек времени, контрольные точки и сбор метрики для повышения качества стажировки, интеграция с gitlab для автоматического создания шаблонного репозитория стажера. Основной функционал реализован на базе Bitrix 24. Мы с командой придумали как внедрить React-компоненты в стандартные шаблоны битрикса, это позволило нам получать обновления битрикса без проблем. Проектом занималась команда из 4 человек: Тимлид, два Backend и один Frontend разработчики. Ну и я пятый, в качестве Product owner.

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

Технологии: Bitrix24, ReactJs

Outstaff направление
  • я спроектировал микросервис для оформления резюме сотрудников, команда реализовала сервис с помощью laravel + react, в команда было 3 человека: TL, Backend и Frontend разработчики;
  • мы разработали телеграмм-бота, который собирал запросы поиска разработчиков из телеграмм каналов и добавлял задачи в jira. Это помогло аккаунт-менеджеру и сейлеру не пропускать актуальные заявки из большого числа чатов.
Планирование и учет прибыли

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

С командой разработчиком создали MVP планирование на базе Bitrix24.

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

Внедрил SSO на базе Keycloak для всех сервисов компании.

Кол-во сервисов росло, и становилось всё тяжелее управлять пользователями, потому что при устройстве новых сотрудников или увольнении текущий вносить изменения почти в десяток сервисов, Keycloak позволил организовать единое место для управления учетными записями сотрудников.

Внедрил Outline для ведения документации компании.

Outline/Outline - крутой инструмент для документации, использовали его как для проектной документации, так и для внутренних регламентов.

Внедрил Jira для отдела разработки и сейлеров
YouTravel.me - площадка для организации путешествий

С этим проектом я познакомился в начале своей карьеры, занимался разработкой и сопровождением площадки, работал над локализацией проекта, автоматическим переводом контента через deepl, выполнил интеграцию телефонии Vox Implement, принимал участие в разработке функционала платежей и мини crm для турооператоров. Разработал интеграцию с MailChimp.
Сегодня я консультирую разработку бекенд части одного из сервисов YouTravel.me. Мы решаем вопросы распила монолита на битрикса, способы коммуникации между сервисами, работаем над качеством проекта. Помогаю подобрать сотрудников и построить крутой skillmap для развития компетенций разработчиков в штате.
Роль: Консалтинг
Технологии: Vue, Laravel, RabbitMQ, Bitrix, MySql, VoxImplant, Stripe, Deepl

Калькулятор расчета пошлин nda

Клиент обратился за помощью запустить MVP для показа инвесторам. Я занимался сбором требований, функциональный и нефункциональных требований, мы с командой разработали прототипы, реализовали базовый функционал и уложились в 2 недели.
Роль: Teamlead
Технологии: PHP 8.1, Laravel, Docker, ReactJs, PostgreSQL

CRM для торговых сетей по продаже бытовой техники и электроники nda

У заказчика две торговых сети и два интернет-магазина. Задача нашей команды была разработать модуль интеграции с интернет-магазинами для обмена данными по B2B сегменту: контакты, заказы, сделки. Все сущности проходили этапы валидации, а компании проверяли в реестре ЕГРЮЛ. Я выступал в качестве техлида, занимался архитектурой модуля, интеграцией с репликой и кафкой. В моменте мы выгрузили около 180к действующих компаний и 800к контактов.
Роль: Techlead
Технологии: PHP, Битрикс 24, Kafkа, MySql

Интернет-магазин электроники, цифровой и бытовой техники федерального уровня nda

Я принимал участие в проекте в качестве бекенд-разработчика, занимался развитием жизненного цикла заказа, системой лояльности покупателей, поддержкой механики скидок, интеграции с CRM и системой управления заказами. Принял участие в разработке API для мобильного приложения. Одна из интересных задач - необходимо было перевести проект с PHP 7.4 на 8.0.
Роль: Developer
Технологии: PHP 8, 1С-Битрикс, RabbitMQ, Kafkа, REST, SOAP, Rector

😎