├── README.md ├── about.md ├── contacts.md ├── corporate_culture.md ├── engineering_culture.md ├── grades ├── README.md ├── android │ ├── junior.md │ ├── middle.md │ ├── senior.md │ └── techlead.md ├── backend │ ├── junior.md │ ├── middle.md │ └── senior.md ├── devops │ ├── junior.md │ ├── middle.md │ └── senior.md ├── ios │ ├── junior.md │ ├── middle.md │ └── senior.md ├── junior.md ├── managers │ ├── directionlead.md │ ├── domainlead.md │ └── teamlead.md ├── middle.md ├── minimum.md ├── roles │ ├── guildlead.md │ ├── mentor.md │ ├── techlead.md │ └── vurtialclusterlead.md ├── senior.md └── web │ ├── junior.md │ ├── middle.md │ └── senior.md ├── guild.md ├── history.md ├── imgs └── team_topologies.png ├── publication.md ├── teams ├── README.md ├── ab.md ├── app_tech.md ├── attraction.md ├── catalog.md ├── choice.md ├── collect.md ├── cuscom.md ├── delivery.md ├── devops_analytics.md ├── devops_core.md ├── devops_ecom.md ├── devops_gastronom copy.md ├── devops_platform.md ├── extra_value_promo_games.md ├── extra_value_promo_mobile.md ├── integration.md ├── last_mile.md ├── lms.md ├── magnit_id.md ├── main_screen.md ├── mobile-swat.md ├── multiformat.md ├── oms.md ├── online_journal.md ├── optimization.md ├── payment.md ├── pharmacy.md ├── picking.md ├── promo.md ├── purchaise.md ├── retention.md ├── rte.md ├── search.md ├── stocks_and_prices.md ├── swat.md ├── ugc.md ├── user_reviews.md ├── user_support.md ├── virtual_card.md └── web.md └── tech ├── .DS_Store ├── README.md ├── devops.md ├── golang.md ├── kotlin.md ├── php.md ├── python.md ├── radar ├── devops │ └── index.html ├── golang │ └── index.html ├── index.html ├── php │ └── index.html ├── python │ └── index.html └── web │ └── index.html ├── swift.md └── web.md /README.md: -------------------------------------------------------------------------------- 1 | # Magnit Online 2 | 3 | Департамент онлайн-разработки компании «Магнит» — быстрый и гибкий стартап на базе крупнейшего российского ритейлера. 4 | 5 | Сегодня департамент — самодостаточная единица, которая отвечает за работу мобильных приложений и сайтов Магнит в сегменте b2c. Наша миссия — создать онлайн-направление «Магнита» и сделать наши онлайн-сервисы доступными десяткам миллионам покупателей. 6 | 7 | ## Наши продукты 8 | 9 | ### Приложения 10 | 11 | #### android Android 12 | * Google Play - [Магнит: акции и доставка](https://play.google.com/store/apps/details?id=ru.tander.magnit&hl=ru&gl=US) 13 | * RuStore - [Магнит: акции и доставка](https://apps.rustore.ru/app/ru.tander.magnit) 14 | * AppGallery (Huawei) - [Магнит: акции и доставка](https://appgallery.huawei.com/app/C101305395) 15 | * Xiaomi GetApps - [Магнит: акции и доставка](https://global.app.mi.com/details?lo=RU&la=ru&id=ru.tander.magnit) 16 | 17 | #### ios iOS 18 | * [Магнит: акции и доставка](https://apps.apple.com/ru/app/магнит-акции-и-доставка/id881463973) 19 | 20 | ### apple Сайты 21 | * [magnit.ru](https://magnit.ru/) 22 | * [my.magnit.ru](https://my.magnit.ru/) 23 | * [apteka.magnit.ru](https://apteka.magnit.ru/) 24 | * [dostavka.magnit.ru](https://dostavka.magnit.ru/) 25 | * [cosmetic.magnit.ru/](https://cosmetic.magnit.ru/) 26 | 27 | ## Немного цифр 28 | 29 | Данные | Цифры 30 | ------------- | ------------- 31 | Сотрудников ИТ | 300+ чел., 30+ команд 32 | RPS к бэкенду | 10000+ 33 | Локация сотрудников | 25+ городов 34 | Релизы мобильного приложения | 50+ за год 35 | Релизы backend сервисов | постоянно и непрерывно 36 | Средний возраст сотрудника | 31 год 37 | DAU | 3+ млн человек 38 | MAU | 15+ млн человек 39 | 40 | В Магнит Онлайн работают [руководители](contacts.md) с опытом в компаниях: yandex, vk, delivery club, lamoda, tinkoff, ostrovok, vprok.tech, x5.tech, ... 41 | 42 | ## Что читать дальше? 43 | 44 | * [История](history.md) 45 | * [Корпоративная культура](corporate_culture.md) 46 | * [Инженерная культура](engineering_culture.md) 47 | * [Как мы работаем](about.md) 48 | * [Технологии и инструменты](tech/README.md) 49 | * [Команды](teams/README.md) 50 | * [Профили инженеров](grades/README.md) 51 | * [Гильдии](guild.md) 52 | * [Публикации и выступления](publication.md) 53 | 54 | ## Полезные ссылки 55 | 56 | * [Технологический радар](https://magnit-tech.github.io/magnit-online/tech/radar/index.html) 57 | * [Habr](https://habr.com/ru/company/magnit/blog/) 58 | * [Корпоративный сайт](https://magnit.tech/) 59 | * [Вакансии](https://magnit.tech/vacancies/) 60 | * [Контакты](contacts.md) 61 | -------------------------------------------------------------------------------- /about.md: -------------------------------------------------------------------------------- 1 | # Как мы работаем 2 | 3 | Работаем территориально распределённой командой, ты можешь присоединиться к нам из любой точки России или в одном из офисов: 4 | 5 | - офис в Москве в [БЦ Большевик](http://bc-bolshevik.ru/); 6 | - коворкинг в [офисе в Краснодаре](https://yandex.ru/maps/-/CDqTNNYk); 7 | - офис в [innopolis](https://innopolis.com/). 8 | 9 | ## Оборудование и техника 10 | 11 | Выдаём ноутбуки компании Applе или HP. При необходимости можем выдать дополнительно монитор, мышь, трекпад и клавиатуру. 12 | 13 | ## ДМС 14 | 15 | После прохождения испытательного срока оформляем ДМС. 16 | -------------------------------------------------------------------------------- /contacts.md: -------------------------------------------------------------------------------- 1 | 2 | # Контакты руководителей 3 | 4 | * [CIO Magnit.Tech](https://www.linkedin.com/in/ymisnik/) 5 | * [CTO Magnit Online](https://www.linkedin.com/in/antsa4/) 6 | * [Head of Core Product](https://github.com/drfisher) 7 | * [Head of Ecom Product](https://github.com/mipxtx) 8 | * [Head of Online Platform](https://github.com/arxell) 9 | * [Head of OpsTech](https://www.linkedin.com/in/nadir-nigmatullin/) 10 | * [Head of DevOps](https://github.com/dbaskakov) 11 | -------------------------------------------------------------------------------- /corporate_culture.md: -------------------------------------------------------------------------------- 1 | # Миссия и цели, культура и ценности 2 | 3 | ## Миссия 4 | 5 | Наша миссия — создать онлайн-направление «Магнита» и сделать онлайн-сервис покупок доступным десяткам миллионам покупателей. 6 | 7 | ### Цели 8 | 9 | #### Счастье пользователей 10 | 11 | Счастье пользователей играет ключевую роль в нашем успешном существовании как технологической компании. Сначала мы приносим пользователям дополнительную ценность, затем — монетизируем её. Ожидания пользователей всегда растут, и нам важно их предвосхищать и постоянно улучшать сервисы. 12 | 13 | #### Лояльность пользователей 14 | 15 | У наших потенциальных пользователей есть множество альтернатив кроме «Магнита», наша цель — сделать пользователей лояльными к нашему сервису, чтобы при любых обстоятельствах они возвращались к нам. 16 | 17 | ## Культура 18 | 19 | Для достижения миссии и целей наша культура должна отражать современные тенденции на рынке IT, т.е. идти в ногу со временем и отбрасывать рудименты. 20 | 21 | Культура в департаменте онлайн сервисов «Магнита» — это набор ценностей, которых мы придерживаемся при найме новых сотрудников, решении рабочих вопросов и во взаимодействии с командой и стейкхолдерами. Эти ценности транслируются на любом уровне организационной структуры и помогают принимать важные решения как самостоятельно, так и в команде. 22 | 23 | ### Ценности 24 | 25 | * Сопричастность и сплочённость 26 | * Самостоятельность и ответственность 27 | * Доверие и уважение 28 | * Масштабность и смелость 29 | * Простота и прозрачность 30 | 31 | #### Сопричастность и сплочённость 32 | 33 | Мы хотим работать в слаженной и дружной команде, но все мы разные и иногда это бывает непросто. В любой команде есть свои правила, они помогают комфортно взаимодействовать и достигать общие цели. Мы рассчитываем, что новые члены команды готовы принять эти правила и улучшать их ещё более эффективной работы. 34 | 35 | Мы ценим взаимопощь и сопричастность. Каждый должен иметь возможность и желание помогать членам своей команды, если это необходимо. Он готов давать конструктивную обратную связь и предлагать улучшения, чтобы команда двигалась быстрее и выше, становилась сильнее. 36 | 37 | #### Самостоятельность и ответственность 38 | 39 | Сотрудник — это командный игрок, но в то же время и самостоятельная боевая единица. Сотрудник должен иметь возможность и желание решать свои задачи без обращения за помощью к другим членами команды. При возникновении ошибки сотрудник готов оперативно решить её. 40 | 41 | Мы верим, что эффективность работы напрямую связана с комфортными условиями труда, поэтому компания обеспечивает сотрудника всем необходимым для его работы. 42 | 43 | #### Доверие и уважение 44 | 45 | Мы все разные, и мы это понимаем: кто-то вяжет крестиком, кто-то прыгает с парашютом. Но каждый из нас должен иметь возможность и желание выслушать своего коллегу, после чего постараться понять его и найти компромисс при решении задач или при возникновении конфликта. Сотрудник открыт для обратной связи, она помогает ему расти по hard и soft навыкам. Любая информация доводится до каждого сотрудника открыто и без цензуры. 46 | 47 | #### Масштабность и смелость 48 | 49 | Чтобы реализовать свой потенциал, важно научиться ставить перед собой масштабные цели и достигать их. Лучше поставить масштабные цели и не достичь их с первой попытки, чем перевыполнить скромные цели. Ошибаться — это нормально: совершая ошибки, сотрудник растёт, а вместе с ним растёт и его команда. 50 | 51 | #### Простота и прозрачность 52 | 53 | Мы стремимся к тому, чтобы все наши процессы и действия были явными и прозрачными ("explicit is better than implicit"). Мы стараемся избегать ненужной сложности, а где сложность неизбежна — прячем её под капот, не вынуждая работать с ней наших пользователей и коллег. 54 | 55 | ### Тезисы 56 | 57 | #### Проактивность 58 | 59 | * Ищем, как сделать работу лучше, собираем обратную связь и работаем на её основе. 60 | * Не принимаем интуитивные решения — челленджим и переспрашиваем, вне зависимости от должности и ранга. Верим не мнениям, а фактам и аргументам. 61 | * Требуем от себя и других высокого уровня сервиса в вопросах, касающихся производительности труда. 62 | * Уделяем время на передачу друг другу знаний — учим и развиваем друг друга. 63 | * Хотим становиться лучше, поэтому даём и получаем обратную связь. 64 | * Ценим проактивность сотрудников, стараемся помогать и способствовать во всех начинаниях. 65 | 66 | #### Ответственность 67 | 68 | * Важно не то, со скольки до скольки человек работает, а насколько вовлечён в работу команды и какой результат приносит. 69 | * Свободно отпускаем сотрудника в рабочее время решать личные дела, т. к. доверяем и ожидаем, что сотрудник потом наверстает упущенное. 70 | * Считаем, что совершать ошибки — это нормально, главное — извлекать из них уроки. 71 | * Уважаем отдых членов команды и создаем условия для полноценного восстановления друг друга. 72 | * Ценим и оберегаем время, выделенное на отдых, но в крайних случаях выходим за рамки графиков для достижения нашей миссии и целей. В этом случае компенсируем командам дополнительно затраченное время. 73 | 74 | #### Доверие 75 | 76 | * Даём честную вежливую обратную связь, не критикуем без конструктивных предложений, но требуем выполнения работы от себя и других. 77 | * На общих online встречах свободно включаем камеры. 78 | * Не контролируем сотрудников путём трекинга часов работы, но следим за производительностью и уровнем автоматизации команд. 79 | * Не опираемся на иерархию организационной структуры при принятии решений — все равны, у всех есть право голоса. 80 | * Обеспечиваем сотрудников доступами для эффективной работы, но ограничиваем доступ к чувствительной информации. Информационная безопасность — один из приоритетов, потому что от неё зависит безопасность данных наших пользователей. 81 | -------------------------------------------------------------------------------- /engineering_culture.md: -------------------------------------------------------------------------------- 1 | # Инженерная культура 2 | 3 | ## Принципы 4 | 5 | - Здоровье сервиса — нулевой приоритет 6 | - Инцидент - это незапланированные инвестиции в стабильность сервиса 7 | - Platform by design 8 | - Принцип «Горящего дома» 9 | - Tech follows Business 10 | - We build it - We run it 11 | - Explicit is Better Than Implicit 12 | - Принцип «Швейцарского ножа» 13 | 14 | ### Здоровье сервиса — нулевой приоритет 15 | 16 | Неважно, насколько хороши фичи твоего продукта, если пользователь не может ими воспользоваться или пользование ими доставляет боль и вызывает раздражение. Первостепенная задача всех команд — обеспечить бесперебойную работу своих сервисов, ожидаемый пользователями уровень производительности и максимальный уровень защищенности. 17 | 18 | #### Практики 19 | 20 | - команды конвертируют термин «здоровье» в конкретный набор метрик, графиков, дашбордов и мониторингов 21 | - мы можем срезать объём задачи, чтобы уложиться в сроки, но не жертвуем базовыми аспектами доступности, производительности и безопасности 22 | - если ситуация требует, фокус команды перемещается на здоровье сервиса, даже если это не было запланировано 23 | - требования к здоровью фичи/продукта прорабатываются на этапе проектирования, а не после релиза 24 | - в критических ситуациях к решению инцидента могут быть привлечены все необходимые специалисты, в том числе за пределами команды, отвечающей за сервис, и за границами рабочего графика 25 | - во всех командах действует zero-critical-bug policy - в любой момент времени критические ошибки либо полностью отсутствуют, либо их устранение в процессе в приоритетном порядке 26 | - одна из ключевых метрик - скорость восстановления. Поэтому мы ищем самый быстрый способ починки, который не всегда может быть идеальным. Полноценное решение идёт следом. 27 | 28 | #### Чем вдохновляться 29 | 30 | - Customer is the boss 31 | - [atlassian incidentmanagement](https://www.atlassian.com/incident-management) 32 | - [google sre books](https://sre.google/books/) 33 | 34 | ### Инцидент - это незапланированные инвестиции в стабильность сервиса 35 | 36 | Инциденты - неизбежный спутник активно развивающихся сервисов. С одной стороны мы яростно боремся с этой неизбежностью. С другой - гарантируем максимально быстрый и эффективный возврат инвестиций, который бизнес «вложил» в рамках инцидента, в виде полноценных выводов, технологических и процессных изменений для повышения стабильности сервиса. 37 | 38 | #### Практики 39 | 40 | - мы терпимы к ошибкам, но нетерпимы к отсутствию полноценных выводов из них, основанных на глубоком анализе первопричин 41 | - информация об инциденте и его последующем разборе должна быть донесена всей команде 42 | - технические лидеры доменов принимают личное участие в работе над postmortem вместе с командой 43 | - мы считаем объём незапланированных инвестиций и гарантируем, что он не противоречит целям бизнеса 44 | 45 | #### Чем вдохновляться 46 | 47 | - Postmortem Culture (SRE Book) 48 | - Error budgets (SRE Book) 49 | 50 | ### Platform by design 51 | 52 | Каждая команда при создании нового микросервиса или компонента мобильного приложения должна быть готова, что это решение станет «платформенным», используемым всеми, расширяемым. API - способ взаимодействия как сервисов, так и команд друг с другом. Отсутствие лишних зависимостей, простота подключения новых потребителей и всегда актуальная документация - критически важные требования к любому сервису, без которых эффективное взаимодействие команд невозможно. 53 | 54 | #### Практики 55 | 56 | - Приступая к работе, держать в голове мысли: «может ли это ещё где-то пригодиться, в другой команде, в другом приложении?», «как этот функционал будет/может дальше развиваться?». Подумав над вопросами выше, заранее заложить возможность переиспользования и расширения техрешения. 57 | - при этом появление новых зависимостей между сервисам проходит через аудит и отражается на архитектурной схеме 58 | - каждый сервис должен иметь актуальную спецификацию API, как синхронного, так и асинхронного 59 | - минимальный overhead на запуск нового сервиса, чтобы позволить командам реализовать необходимый уровень декомпозиции сервисов 60 | 61 | #### Чем вдохновляться 62 | 63 | - The Bezos API Mandate 64 | - [Understanding the API-First Approach to Building Products](https://swagger.io/resources/articles/adopting-an-api-first-approach/) 65 | - [teamtopologies](https://teamtopologies.com/key-concepts) 66 | 67 | ### Принцип «Горящего дома» 68 | 69 | Критические ситуации случаются - это часть нашей работы. Сорванные дедлайны, лежащий прод, социальные катаклизмы, - всё это приводит людей в состояние стресса. Мы фокусируемся на решении проблемы и конструктивных действиях, поэтому в ответ на призыв «Дом горит!» мы НЕ реагируем следующим образом: 70 | 71 | #### Практики 72 | 73 | - «Передо мной такой же, и он не горит!» — не отрицаем проблему, не разобравшись 74 | - «Ничего, рядом строится новый, давайте строить его быстрее и сразу переселимся» — сначала чиним суровое настоящее, потом строим светлое будущее 75 | - «Дом горит, и его поджёг Джон (расплескал бензин и бросил спичку)«, «Ничего, рано или поздно какой-нибудь Джон всё равно бы его поджёг. Так что Джон невиноват, виноват процесс» - blameless postmortem culture заканчивается там, где начинается намеренный саботаж, вредительство и бездействие 76 | - «Конечно, горит. У него же нет огнетушителей, плана эвакуации и ответственного за противопожарное состояние. Давайте проведем ретро.» - сначала тушим, потом разбираемся в причинах и исторической справедливости. 77 | - «У тебя тоже горит, сначала свой потуши» - фокусируемся на тушении, не ищем оправданий, особенно на стороне. 78 | 79 | ### Tech follows Business 80 | 81 | Вся цель наших усилий — создать ценность для бизнеса. Любые технические решения должны явно или косвенно поддерживать бизнес. Бизнес иногда требует быстрых изменений, и мы должны поддерживать это: давать быстрые оценки, предлагать альтернативные идеи, быть как бизнес. Мы сфокусированы на создании работающего конечного продукта, а не IT систем. 82 | 83 | #### Практики 84 | 85 | - Команда способна ознакомиться с очень сырой и непроработанной идеей от бизнеса и быстро дать оценку, насколько эта идея «дорого» всем обойдётся. При этом команда не коммитится на сроки, а просто оценивает объём\сложность работ, чтобы на самом раннем этапе бизнес мог определить свою готовность инвестировать в идею дальше. 86 | - При этом мы не составляем looooong лист замечаний и проблем с резолюцией «проработайте ещеё», а оцениваем понятные части и указываем список просьб, которые помогут дать лучшую оценку 87 | - Мы хорошо знаем наши сервисы и как они устроены внутри. Если сервис имеет большой технический долг, и он сильно влияет на скорость разработки продукта, то мы об этом говорим и исправляем, получая поддержку бизнеса. 88 | 89 | #### Чем вдохновляться 90 | 91 | - «Нюх — на бизнес, уклон — на технологии» 92 | 93 | ### We build it - We run it 94 | 95 | Мы верим, что команда полностью несёт ответственность за поддержку, мониторинг, данные и аспекты качества всего, что она сделала. Мы это разработали, мы этим полностью управляем! Ответственность и права должны быть открытыми и прозрачными. Мы стремимся к кросс-функциональным автономным командам, которые могут самостоятельно выполнить свою задачу, но которые будут синхронны с другими командами и общепринятыми концепциями. 96 | 97 | #### Практики 98 | 99 | - Наше вовлечение в работу не заканчивается на кнопке Release - мы знаем и следим, как результаты наших трудов работают в бою 100 | - Мы знаем и пытаемся разобраться, как используются наши данные. Если мы берём какие-то данные от пользователя, то мы знаем куда они передаются дальше и как используются 101 | - У любого кусочка архитектуры, даже если им пользуется несколько команд, есть свой ответственный 102 | - Ответственность прозрачна и публична, мы всегда можем подсказать кто отвечает «вот за это», или подсветить, что есть что-то бесхозное 103 | 104 | #### Чем вдохновляться 105 | 106 | - [products-over-projects](https://martinfowler.com/articles/products-over-projects.html) 107 | 108 | ### Explicit is Better Than Implicit 109 | 110 | Принцип "явное лучше неявного" является одним из основных принципов и дизайна языков программирования. Этот принцип гласит, что код должен быть написан таким образом, чтобы его намерения и результаты были очевидными и понятными для читателя, а не скрытыми или неявными. Мы постоянно придерживаемся этого принципа в своей работе, когда решаем любые инженерные задачи. 111 | 112 | - Явное выражение мыслей и намерений помогает избежать недоразумений и неоднозначностей. Когда мы говорим или пишем явно, мы передаем информацию точно и без возможности неправильного толкования. 113 | - Явное выражение позволяет установить ясные границы и ожидания. Когда мы явно говорим о том, чего мы хотим или не хотим, другие люди могут лучше понять наши предпочтения и действовать соответственно. 114 | - Явное выражение способствует эффективной коммуникации. Когда мы явно выражаем свои мысли и чувства, мы помогаем другим людям лучше понять нас и наши потребности. Это особенно важно в профессиональной сфере, где ясное и точное выражение идей может улучшить сотрудничество и результаты работы. 115 | - Явное выражение помогает избежать конфликтов. Когда мы четко и ясно выражаем свои ожидания и границы, мы предотвращаем возможные недоразумения и разногласия, которые могут привести к конфликтам. 116 | - Явное выражение способствует лучшему самовыражению и самоутверждению. Когда мы явно выражаем свои мысли и чувства, мы укрепляем свою уверенность в себе и свою способность выражать себя. Это может помочь нам стать более автономными и уверенными в себе людьми. 117 | - Явное выражение способствует развитию отношений. Когда мы явно выражаем свои чувства и потребности, мы создаем основу для более глубокого понимания и поддержки со стороны других людей. Это может помочь нам укрепить наши отношения и создать более здоровую и эмоционально благоприятную среду. 118 | 119 | #### Практики 120 | 121 | - Визуализируйте свои мысли и идеи с помощью сервисов Miro, Draw.io, Excalidraw и т.д., чтобы информация была легче воспринимаема. 122 | - Включайте камеру на онлайн встречах, чтобы передать свою позицию невербально. 123 | - Не надейтесь на то, что вас окружает команда экстрасенсов, способная читать ваши мысли. Если у вас есть что сказать - скажите. 124 | - Конвертируйте свою позицию в текст и понятные тезисы. Таким образом мы создаем более устойчивую форму передачи информации, которая не подвержена искажениям восприятия. Текст также доступен в любой момент времени и для любого члена команды, что облегчает обмен идеями и обсуждение важных вопросов. 125 | - Избегайте использования инструментов, работу которых нельзя объяснить. 126 | - Описывайте процесс, если его нет. 127 | - Оставляйте артефакты своей работы в Confluence, GitLab и т.д., а не в своей голове. 128 | - Уточняйте и описывайте требования к поставленным задачам. 129 | - Оформляйте тезисы, полученные в результате обсуждения, в структурированный документ или протокол. 130 | 131 | #### Чем вдохновляться 132 | 133 | - [The Zen of Python](https://peps.python.org/pep-0020/) 134 | - [The Anatomy of an Amazon 6-pager](https://writingcooperative.com/the-anatomy-of-an-amazon-6-pager-fc79f31a41c9) 135 | 136 | ### Принцип «Швейцарского ножа» 137 | 138 | Принцип "Швейцарского ножа" говорит о том, что каждый инженер-программист (software engineer) должен стремиться к тому, чтобы быть универсальным игроком в моменты, когда это необходимо для команды. Базово его задачи не ограничиваются только написанием кода, он также участвует в проектировании архитектуры, проведении системного анализа, написании документации, написании тестов, тестировании своего кода и мониторинге работы своих сервисов (продукта). При этом он остается экспертом в своей изначальной области, но это не должно становиться преградой для развития и применения других навыков. Отсутствие в команде выделенного специалиста узкой направленности, например архитектора, системного аналитика или специалиста по контролю качества (QA), не должно мешать или, тем более, блокировать работу команды. 139 | 140 | Естественно, есть исключения, которые можно понять на основе здравого смысла, например, все, что связано с дизайном. Дизайн является специализированной областью, в которой часто применяются решения и процессы, отличные от тех, которыми занимаются разработчики. Тем не менее, даже в таких случаях важно, чтобы разработчики имели базовое понимание дизайнерских принципов и умели взаимодействовать с дизайнерами, чтобы обеспечить гармоничное взаимодействие в команде. 141 | 142 | В итоге принцип "Швейцарского ножа" означает, что каждый инженер-программист должен стремиться обладать не только глубокой специализацией в своей основной области, но и широким набором навыков и знаний для гибкого и эффективного решения разных задач. 143 | 144 | #### Практики 145 | 146 | - Инженер-программист стремится не только к глубокой специализации в своей основной области, но и к развитию разносторонних навыков. 147 | - Инженер-программист должен иметь общее представление о работе всей системы, в которой реализуется проект. Это помогает ему принимать правильные решения при разработке и понимать, как его код взаимодействует со всем проектом. 148 | - Инженер-программист должен стремиться к улучшению своих навыков. Он должен быть готов к изучению новых технологий и инструментов, чтобы быть в курсе последних тенденций в области разработки. 149 | 150 | #### Чем вдохновляться 151 | 152 | - [Кто такие T-shaped специалисты и почему с ними команда становится лучше](https://rasa.pro/about/blog/1186/) 153 | - [The five expertise levels of a software developer; the road to zen master](https://dev.to/jmitchell38488/the-five-expertise-levels-of-a-software-developer-the-road-to-zen-master-36d7) 154 | - [What employee type or shape are you?](https://www.axelos.com/resource-hub/blog/what-employee-type-or-shape-are-you) 155 | -------------------------------------------------------------------------------- /grades/README.md: -------------------------------------------------------------------------------- 1 | # Профили инженеров 2 | 3 | - [Инженерная культура](../engineering_culture.md) 4 | - [Гигиенический минимум](minimum.md) 5 | 6 | ## Профили технических специалистов 7 | 8 | | Base | iOS | Backend | DevOps | Web | Android | 9 | |------|-----|---------|--------|-----|---------| 10 | |[junior](junior.md)|[junior](ios/junior.md)|[junior](backend/junior.md)|[junior](devops/junior.md)|[junior](web/junior.md)|[junior](android/junior.md)| 11 | |[middle](middle.md)|[middle](ios/middle.md)|[middle](backend/middle.md)|[middle](devops/middle.md)|[middle](web/middle.md)|[middle](android/middle.md)| 12 | |[senior](senior.md)|[senior](web/senior.md)|[senior](backend/senior.md)|[senior](devops/senior.md)|[senior](web/senior.md)|[senior](android/senior.md)| 13 | 14 | Критерии оценки: 15 | 16 | - Разработка; 17 | - Архитектура; 18 | - Инженерная культура; 19 | - Коммуникация; 20 | - Самообучение и наставничество; 21 | - Планирование; 22 | - Команда; 23 | - Смертные грехи; 24 | - Навыки стека разработки. 25 | 26 | ## Профили технических менеджеров 27 | 28 | - [TeamLead](managers/teamlead.md) 29 | - [DirectionLead](managers/directionlead.md) 30 | - [DomainLead](managers/domainlead.md) 31 | 32 | Критерии оценки: 33 | 34 | - Лидерство; 35 | - Управление людьми; 36 | - Управление командами; 37 | - Целеполагание, планирование и реализация; 38 | - Управление процессами; 39 | - Техническая экспертиза; 40 | - Бизнес экспертиза. 41 | 42 | ## Дополнительные роли 43 | 44 | Данные роли не являются отражением орг.структуры. 45 | 46 | - [Mentor](roles/mentor.md) 47 | - [TechLead](roles/techlead.md) 48 | - [GuildLead](roles/guildlead.md) 49 | - [VurtialClusterLead](roles/vurtialclusterlead.md) 50 | -------------------------------------------------------------------------------- /grades/android/junior.md: -------------------------------------------------------------------------------- 1 | # Junior 2 | 3 | Наследует все права и обязанности [junior](../junior.md). 4 | -------------------------------------------------------------------------------- /grades/android/middle.md: -------------------------------------------------------------------------------- 1 | # Middle 2 | 3 | Наследует все права и обязанности [Android junior](junior.md) и [Middle](../middle.md). 4 | 5 | ## Навыки Android разработчика 6 | 7 | - Основательное понимание стека проекта и основных технологий. 8 | - Умение добавлять и изменять базовые конфигурации проекта, подключать фиче-модули и настраивать зависимости. 9 | - Способность самостоятельно решать проблемы, связанные с линтером, тестами, а также быстро исправлять критические ошибки. 10 | -------------------------------------------------------------------------------- /grades/android/senior.md: -------------------------------------------------------------------------------- 1 | # Senior 2 | 3 | Наследует все права и обязанности [Android middle](middle.md) и [Senior](../senior.md). 4 | 5 | ## Навыки Android разработчика 6 | 7 | - Может изучить новый Framework или сложную библиотеку, сделать MVP имплементацию, протестировать основные кейсы и интегрировать в проект с подробным описанием и примерами использования. 8 | - Может самостоятельно настроить CI/CD проекта, 9 | - Умеет профилировать приложение и анализировать производительность отдельных частей приложения. 10 | - Может декомпилировать приложение, понимает, как работает обфускация кода и как правильно настроить Proguard. 11 | - Интересуется или разрабатывает приложения для других платформ, например iOS или backend. Или использует в pet проектах такие Framework/SDK, как Flutter или Kotlin Multiplatform, расширяя свой кругозор. 12 | -------------------------------------------------------------------------------- /grades/android/techlead.md: -------------------------------------------------------------------------------- 1 | # TechLead 2 | 3 | Позиция TechLead Android наследует все требования и обязанности: 4 | 5 | * [TechLead](techlead.md) 6 | * [Senior Android](senior.md) 7 | 8 | ## Лидерство и наставничество 9 | 10 | * Является экспертом по сложным техническим вопросам Android. 11 | * Оценивает уровень технических способностей членов своей команды и помогает в их развитии. 12 | * Обеспечивает первичное техническое обучение новых Android разработчиков. 13 | * Регулярно проводит встречи со своей командой, обсуждает проблемы и пути их решения. 14 | * Совместно с другими TechLead'ами/TeamLead'ами разрабатывает набор компетенций для Android разработчиков (Junior/Middle/Senior). 15 | 16 | ## Найм 17 | 18 | * Организует процесс найма Android кандидатов, обновляет список технических вопросов для интервью и составляет список задач. 19 | * Проводит технические интервью для 99% кандидатов на Android и предоставляет развернутую обратную связь по итогам интервью. 20 | 21 | ## Документация 22 | 23 | * Устанавливает стандарты оформления кода. 24 | * Создает и поддерживает техническую документацию по Android. 25 | * Обеспечивает высокое качество кода Android приложения. 26 | * Определяет процессы ревью кода. 27 | * Предоставляет развернутую обратную связь по код-ревью. 28 | 29 | ## Техническая экспертиза 30 | 31 | * Обладает визионерством. Следит за глобальными технологическими тенденциями в области Android и способен делать прогнозы с некоторой точностью. 32 | * Разбирается в своих сильных и слабых сторонах и знает, как развиваться в области Android. 33 | * Может самостоятельно решать любые технические задачи, связанные с Android. 34 | * Определяет техническое развитие архитектуры проекта. 35 | -------------------------------------------------------------------------------- /grades/backend/junior.md: -------------------------------------------------------------------------------- 1 | # Junior 2 | 3 | Наследует все права и обязанности [junior](../junior.md). 4 | -------------------------------------------------------------------------------- /grades/backend/middle.md: -------------------------------------------------------------------------------- 1 | # Middle 2 | 3 | Наследует все права и обязанности [Backend junior](junior.md) и [middle](../middle.md). 4 | 5 | ## Ops 6 | 7 | - Ответственен за работоспособность и круглосуточную доступность сервиса на уровне его эксплуатации и бизнес-логики. 8 | -------------------------------------------------------------------------------- /grades/backend/senior.md: -------------------------------------------------------------------------------- 1 | # Senior 2 | 3 | Наследует все права и обязанности [Backend middle](middle.md) и [Senior](../senior.md). 4 | 5 | ## Ops 6 | 7 | - Отвечает за запуск новых сервисов на эксплуатационном уровне. 8 | - Отвечает за обеспечение работоспособности и круглосуточной доступности сервиса на всех уровнях, в том числе организационном и стратегическом. 9 | - Отвечает за стабильность при росте и развитии сервисов. 10 | - Полностью отвечает за обеспечение работоспособности и круглосуточной доступности сервисов подразделения. 11 | - Проактивно находит узкие места в сервисе, предлагает системные решения. 12 | -------------------------------------------------------------------------------- /grades/devops/junior.md: -------------------------------------------------------------------------------- 1 | # Junior 2 | 3 | Наследует все права и обязанности [junior](../junior.md). 4 | -------------------------------------------------------------------------------- /grades/devops/middle.md: -------------------------------------------------------------------------------- 1 | # Middle 2 | 3 | Наследует все права и обязанности [Devops junior](junior.md) и [middle](../middle.md). 4 | -------------------------------------------------------------------------------- /grades/devops/senior.md: -------------------------------------------------------------------------------- 1 | # Senior 2 | 3 | Наследует все права и обязанности [Devops middle](middle.md) и [Senior](../senior.md). 4 | 5 | -------------------------------------------------------------------------------- /grades/ios/junior.md: -------------------------------------------------------------------------------- 1 | # Junior 2 | 3 | Наследует все права и обязанности [junior](../junior.md). 4 | -------------------------------------------------------------------------------- /grades/ios/middle.md: -------------------------------------------------------------------------------- 1 | # Middle 2 | 3 | Наследует все права и обязанности [iOS junior](junior.md) и [middle](../middle.md). 4 | -------------------------------------------------------------------------------- /grades/ios/senior.md: -------------------------------------------------------------------------------- 1 | # Senior 2 | 3 | Наследует все права и обязанности [iOS middle](middle.md) и [Senior](../senior.md). 4 | -------------------------------------------------------------------------------- /grades/junior.md: -------------------------------------------------------------------------------- 1 | # Junior 2 | 3 | > Этот маленький юркий зверек может поломать все твои планы. А может и нет… 4 | 5 | Требования к junior инженеру без привязки к стеку разработки. Наследует все права и обязанности [minimum](minimum.md). 6 | 7 | ## Разработка 8 | 9 | - Решает задачи из бэклога, по согласованию с командой и руководителем. 10 | - Старается максимально точно оценить сроки на решение задач, оценивая риски. 11 | - При необходимости привлекает наставников. 12 | - Проводит анализ сделанной работы, стремится улучшить результат. 13 | 14 | ## Архитектура 15 | 16 | Требований нет. 17 | 18 | ## Инженерная культура 19 | 20 | - Следует style guides проекта, придерживается общепринятых принципов написания кода в команде. 21 | - Улучшает свой код после замечаний на code review. Не повторяет аналогичных ошибок. 22 | - Покрывает свой код тестами. 23 | 24 | ## Коммуникация 25 | 26 | - Поддерживает уважительные и позитивное отношения м/у коллегами в команде. 27 | - Прислушивается к мнению коллег, принимает во внимание аргументацию. 28 | - Задает уточняющие вопросы по задачам и их реализации, если таковые возникают. Не замалчивает трудности. 29 | 30 | ## Самообучение и наставничество 31 | 32 | - Адекватно относится к конструктивной критике. Делает выводы для себя на основе обратной связи. 33 | - Быстро обучается. Активно коммуницирует с коллегами, задает вопросы. 34 | - Уделяет большое количество времени дополнительному самообучению (книги, видео ролики, статьи, подкасты и т.д.) 35 | - Берет в работу задачи, повышая уровень сложности, чтобы быстрее прокачать свои навыки. 36 | 37 | ## Планирование 38 | 39 | Требований нет. 40 | 41 | ## Команда 42 | 43 | Требований нет. 44 | 45 | ## Смертные грехи 46 | 47 | Требований нет. 48 | -------------------------------------------------------------------------------- /grades/managers/directionlead.md: -------------------------------------------------------------------------------- 1 | Вдохновлено [этим](https://github.com/avito-tech/playbook/blob/master/techlead-profile.md). 2 | 3 | # DirectionLead 4 | 5 | **DirectionLead** - это руководитель отдела разработки, которое состоит из n команд разработки. 6 | 7 | ## Лидерство 8 | 9 | Наследует «лидерство» из [TeamLead](teamlead.md), а также: 10 | 11 | - Системно улучшает процессы в своем отделе. 12 | - Лидер и инициатор трансформационных проектов на уровне отдела. 13 | - Участник и инициатор трансформационных проектов на уровне компании. 14 | 15 | ## Управление людьми 16 | 17 | Наследует «управление людьми» из [TeamLead](teamlead.md). 18 | 19 | - Оценивает работу менеджеров своих команд. 20 | - Системно развивает менеджеров своих команд или выступает как наставник для менеджеров уровнем ниже. 21 | 22 | ## Управление командами 23 | 24 | Наследует «управление командами» из [TeamLead](teamlead.md). 25 | 26 | - Прямой руководитель руководителей команд разработки. Достигает результата за счёт слаженной работы своих команд разработки. 27 | - Планирует орг.структуру своего отдела. Создаёт команды для новых бизнес направлений. 28 | - Управляет приоритетами найма внутри своего отдела. 29 | 30 | ## Целеполагание, планирование и реализация 31 | 32 | Наследует «целеполагание, планирование и реализация» из [TeamLead](teamlead.md). 33 | 34 | - Горизонт планирования — до года. 35 | - Формирует технические видение и стратегию своего отдела. Согласует их с видением и стратегией компании. Объясняет её своим командам и отвечает за реализацию. 36 | - Участвует в формировании технического портфеля компании. Следит за тем чтобы в нем были учтены задач и интересы отдела. 37 | - Способствует тому, чтобы отдельные люди и организация в целом действовали, не забывая о стратегических целях отдела. 38 | - При крупных изменениях в своём отделе понимает их влияние и согласовывает их с другими подразделениями. 39 | 40 | ### Управление процессами 41 | 42 | Наследует «управление процессами» из [TeamLead](teamlead.md). 43 | 44 | - Успешно создаёт и применяет разные подходы к организации процессов в зависимости от команды и потребностей бизнеса. Например ITSM, ITIL, LeSS. 45 | - Распространяет внутри своего отдела и за его пределами успешные подходы. 46 | 47 | ### Техническая экспертиза 48 | 49 | - Визионерство. Следит за глобальными технологическими трендами и может сделать прогноз с определённой долей вероятности. 50 | - Ведёт сложные технические проекты. При необходимости привлекает внутренних и внешних экспертов. 51 | 52 | ### Бизнес экспертиза 53 | 54 | - Понимает как работает бизнес. Учитывает финансовые и бизнес метрики при планировании работы своего отдела. Например, убеждается что его инициативы положительно влияют на Equity Value и Enterprise Value компании. 55 | - Участвует в операционных ревью бизнес показателей компании или её частей. 56 | - Используя рыночные тренды, формирует новые бизнес или технологические возможности. 57 | - Эффективно использует ресурсы своего отдела, знает из чего складывается его P&L. 58 | -------------------------------------------------------------------------------- /grades/managers/domainlead.md: -------------------------------------------------------------------------------- 1 | Вдохновлено [этим](https://github.com/avito-tech/playbook/blob/master/techlead-profile.md). 2 | 3 | # DomainLead 4 | 5 | **Domain Lead** - это руководитель домена разработки, который состоит из направлений и команд разработки. 6 | 7 | Наследует все права и обязанности из [DirectionLead](directionlead.md). 8 | 9 | ## Целеполагание, планирование и реализация 10 | 11 | - Горизонт планирования — от года. 12 | - Успешно реализует приоритетные проекты в рамках бизнес-стратегии компании с большой степенью неопределенности. Делает сложные стратегические выборы. 13 | - Участвует в формировании стратегии технической дирекции. 14 | - Участвует в формировании технического портфеля компании. 15 | 16 | ## Управление процессами 17 | 18 | - Выходит за рамки существующих в компании процессов. Берёт лучшие практики из индустрии и на их основе иницирует создание подходящих для компании решений. 19 | 20 | ### Техническая экспертиза 21 | 22 | Наследует «техническая экспертиза» из [DirectionLead](teamlead.md), а также: 23 | 24 | - Объясняет бизнес-языком технологические темы и проекты для топ-менеджеров. 25 | 26 | ### Бизнес экспертиза 27 | 28 | - Понимает как работает бизнес. Учитывает финансовые и бизнес метрики при планировании работы своего отдела. Например, убеждается что его инициативы положительно влияют на Equity Value и Enterprise Value компании. 29 | - Участвует в операционных ревью бизнес показателей компании или её частей. 30 | - Используя рыночные тренды, формирует новые бизнес или технологические возможности. 31 | - Эффективно использует ресурсы своего отдела, знает из чего складывается его P&L. 32 | -------------------------------------------------------------------------------- /grades/managers/teamlead.md: -------------------------------------------------------------------------------- 1 | Вдохновлено [этим](https://github.com/avito-tech/playbook/blob/master/techlead-profile.md). 2 | 3 | # TeamLead 4 | 5 | **TeamLead** - это руководитель команды разработки. 6 | 7 | ## Лидерство 8 | 9 | - Прямой руководитель команды разработки. Достигает результата за счёт слаженной работы команды. 10 | - Делает так, чтобы команда разработки выполняла большую часть задач самостоятельно, без его непосредственного участия. Делегирует ответственность за принятие решений. 11 | - Мотивирует людей на постоянное улучшение себя и процессов. 12 | - Помогает команде устранять возникающие в ходе работы препятствия. 13 | - При поиске и решении проблем выходит за рамки команды, ищет системные проблемы на уровне выше. 14 | - Создаёт атмосферу доверия в команде, чтобы все могли открыто высказываться. 15 | - Транслирует ценности. Формирует систему ценностей. 16 | 17 | ## Управление людьми 18 | 19 | - Регулярно доносит качественную обратную связь на личных встречах со своими сотрудниками. Применяет активное слушание. 20 | - Оценивает работу своих сотрудников. 21 | - Знает что мотивирует его сотрудников. Использует подходящие инструменты мотивации для её повышения/поддержания на высоком уровне. 22 | - Определяет сильные стороны и области развития членов команды. Помогает сотруднику определить возможные точки карьерного роста. 23 | - Ищет возможность помочь людям достичь следующей желаемой роли. 24 | - Инициирует промо. Соблюдает принятый в компании процесс. 25 | - Эффективно управляет конфликтами: выслушивает обе стороны и помогает разобраться. 26 | 27 | ## Управление командами 28 | 29 | - Формирует дизайн команды (состав, компетенции, квалификация) на основе целей её создания и целей департамента. 30 | - Инициирует найм и участвует в нём. Соблюдает существующий процесс. 31 | - Составляет профиль кандидата (описание для рекрутера). 32 | - Проводит технические интервью в той области, где он эксперт, и менеджерское интервью, на котором проверяет soft skills кандидата. 33 | - Организует процесс онбординга для новичков. Ставит им цели на испытательный срок. 34 | - Инициирует процесс увольнения разработчика. Соблюдает принятый в компании процесс. 35 | - Своевременно каскадирует информацию, важную для команды. Например: рассказывает об основных изменениях в компании или изменениях в смежных юнитах/кластерах. 36 | - Делится собственным опытом и управляет обменом знаниями в рамках команды. 37 | 38 | ## Целеполагание, планирование и реализация 39 | 40 | - Горизонт планирования — квартал. 41 | - Формирует цель существования своей команды. Доносит эту цель до всех. 42 | - Обеспечивает прозрачность целей и задач внутри своей команды. 43 | - Формирует и приоритизирует технический бэклог команды. На его основе составляет дорожную карту (roadmap). 44 | - Формирует с командой краткосрочные цели (например, цель спринта). Связывает их с квартальными целями (OKR). Отвечает за их выполнение. 45 | - Формирует с командой квартальные цели (например, OKR). Связывает их с целями департамента, компании. Отвечает за их выполнение. 46 | - Следит за использованием бюджета и ресурсов своей команды. Вносит коррективы в планы и приоритеты для решения проблем с ресурсами/бюджетом. 47 | - Работает со стейкхолдерами. Своевременно транслирует важную для них информацию. Управляет их ожиданиями. 48 | - Выступает ответственным за достижение квартальных целей команды (OKR). 49 | - Выступает ответственным за постановку технических квартальных целей команды (OKR). 50 | - Для достижения целей меняет приоритеты при необходимости, предотвращает риски, корректирует действия команды для предотвращения нежелательных последствий. 51 | 52 | ## Управление процессами 53 | 54 | - Отвечает за поддержание всех общих для компании процессов (найм, доставка, оценка производительности, инженерные процессы) в рамках своей команды. 55 | - Отвечает за предсказуемость и скорость процесса разработки и автоматизирует его. 56 | - Устанавливает метрики эффективности процессов и следит за ними. 57 | - Работает в рамках существующих в компании инженерных процессов. Поддерживает их сам или делегирует команде процессы: 58 | - Управление инцидентами. 59 | - Управление ошибками (багами). 60 | - Управление техническим бэклогом. 61 | - Управление документацией и знаниями. 62 | - Постоянно улучшает инженерные практики в своей команде: рецензирование кода, архитектурные сессии, парное программирование, совместное программирование, разработка через тестирование (TDD). 63 | - Организует процесс тестирования. 64 | 65 | ## Техническая экспертиза 66 | 67 | - Техническая экспертиза на уровне senior разработчика. 68 | - Отвечает за техническое качество продуктов и сервисов, которые разрабатывает его команда. 69 | - Ведёт технический бэклог и дорожную карту (roadmap) команды или проекта. 70 | - Анализирует технические решения, предлагаемые командой. Даёт конструктивную обратную связь по ним и принимает финальное решение. 71 | - Актуализирует свои технические знания и навыки в соответствии со стеком технологий, которыми владеет его команда. При необходимости может самостоятельно решать задачи из бэклога команды. 72 | - Отвечает за стабильную работу своей системы. 73 | - Контролирует, что система достаточно покрыта мониторингом и алертами. 74 | - Отвечает за то, что в команде есть дежурные, которые оперативно реагируют на инциденты. 75 | 76 | ## Бизнес экспертиза 77 | 78 | - Руководствуется знаниями сценариев использования своего продукта при принятии решений. 79 | - Вместе с Product Owner формирует бэклог продукта и дорожную карту (roadmap). 80 | - При проработке задач предлагает альтернативные способы проверки гипотез и технических решений, позволяющих получить данные быстрее или с меньшими затратами. 81 | - Делает базовые выводы по результатам проведенного исследования, например, делает базовые выводы по A/B тестам: определение статистически значимого результата или нет, понимание того, что тест показывает плохие результаты на метриках и его нужно остановить. "Подсвечивает" найденные проблемы или успехи. 82 | - Исследует проблемы пользователей и помогает заказчику найти бизнес-решение, например, участвует в дискавери спринтах в роли продукт-менеджера. 83 | - Вместе с Product Owner формирует и отслеживает метрики здоровья продукта. 84 | -------------------------------------------------------------------------------- /grades/middle.md: -------------------------------------------------------------------------------- 1 | # Middle 2 | 3 | > Парень, да у тебя большое будущее, стальная голова, сильные ноги и длинный хвост! 4 | 5 | Требования к middle инженеру без привязки к стеку разработки. Наследует все права и обязанности [junior](junior.md). 6 | 7 | ## Разработка 8 | 9 | - Самостоятельно решает задачи в рамках своей зоны ответственности, средней компоненты или нескольких небольших задач. 10 | - Самостоятельно оценивает риски в знакомом функционале и довольно точно может оценить сроки на реализацию. 11 | - Умеет работать с возникшими трудностями в решении задач, например, привлекает для этого аналитиков, дизайнеров, тестировщиков и других коллег, если требуются уточнения или дополнения по задаче. 12 | - Анализирует возникающие проблемы и старается докопаться до сути, чтобы решить корневую проблему. Предлагает и продвигает превентивные решения для предотвращения рецидивов. 13 | - Обязательно участвует в code review, отвечает за качество и надежность своего кода, при необходимости оставляет комментарии автору с описанием своей точки зрения с анализом, включающим плюсы, минусы и оценку. 14 | - Осуществляет ревью кода и отвечает за качество и надежность своего кода, включая покрытие тестами, минимизацию багов и успешность релизов. 15 | - На всех этапах следит за задачей и помогает ее продвижению. Не использует оправдание "На моей машине работает и ОК". 16 | - Ориентирован на бизнес, интересуется фидбэком пользователей и периодически самостоятельно проверяет метрики. 17 | - Декомпозиция и решение задач редко требуют корректировки. 18 | - Умеет находить компромиссное решение, учитывая производительность, скорость и сложность разработки. 19 | - Способен самостоятельно разобраться в работе сервиса/модуля со стороны пользователя и умеет самостоятельно дебажить любые проблемы сервиса/модуля. 20 | - Старается максимально покрыть свой код тестами. 21 | 22 | ## Архитектура 23 | 24 | - Хорошо разбирается в архитектуре своего сервиса/модуля. 25 | - Понимает весь набор компонентов, затрагиваемых задачей. 26 | - Имеет представление об архитектуре смежных сервисов/модулей. 27 | - Может построить архитектуру работы сервиса/модуля с помощью диаграммы и объяснить, как она работает. 28 | - Способен самостоятельно разработать небольшие архитектурные изменения. 29 | 30 | ## Инженерная культура 31 | 32 | - Активно продвигает принятую инженерную культуру в компании. 33 | - Следует стайл-гайдам и также способствует соблюдению данных правил на code review. 34 | - При реализации или внедрении новых технических решений, библиотек и подходов согласовывает и обсуждает их с ответственными. 35 | - Находит оптимальный баланс между скоростью решения задач и качеством, понимая, что в приоритете всегда должно быть второе. 36 | - Пишет качественный, легко читаемый код, с хорошей производительностью. 37 | - Старается максимально контролировать и избегать утечек памяти, оверинжиниринга, устаревших подходов. 38 | - Устраняет/избегает распространенных уязвимостей безопасности приложения при решении своих задач. 39 | 40 | ### Коммуникация 41 | 42 | - Избегает деструктивных конфликтов и старается поддерживать благоприятную и дружественную культуру общения в коллективе. 43 | - Предоставляет конструктивную и развивающую обратную связь, опираясь на факты. 44 | 45 | ### Самообучение и наставничество 46 | 47 | - Планирует свое личное и профессиональное развитие, учитывая потребности проекта и команды. 48 | - Следит за последними трендами и технологиями, постоянно изучает новые практики. 49 | - Осуществляет ориентацию новых сотрудников и помогает им в адаптации к команде и проекту. 50 | - Делится своей экспертизой с другими членами команды, активно участвует в обсуждениях связанных с разработкой, новых подходах и практиках. 51 | - По мере роста опыта берет на себя роль наставника для новых членов команды, помогая им адаптироваться и развиваться. 52 | - Обращает внимание на работу вне своей зоны ответственности, чтобы убедиться, что решение работает. 53 | 54 | ## Планирование 55 | 56 | - Умеет устанавливать приоритеты для своих задач. 57 | - Учитывает сроки и заранее сообщает о возможных проблемах. 58 | - Самостоятельно разбивает сложные задачи на подзадачи и оценивает их сроки выполнения. 59 | - При необходимости проводит исследование альтернативных решений. 60 | - Сознает необходимость контроля и делегирования. 61 | 62 | ## Команда 63 | 64 | - В случае необходимости самостоятельно работает с коллегами из других команд. 65 | - Ищет конструктивные решения в конфликтных ситуациях. 66 | 67 | ## Смертные грехи 68 | 69 | - Неспособность работать самостоятельно. 70 | - Неумение довести задачу до конца. 71 | -------------------------------------------------------------------------------- /grades/minimum.md: -------------------------------------------------------------------------------- 1 | # Гигиенический минимум 2 | 3 | **Гигиенический минимум** – набор привычек и умений, необходимый для работы в команде. Выполнение этого списка необходимо для комфортного взаимодействия с разработчиком. 4 | 5 | ## Быть вовремя на встречах 6 | 7 | - В момент формального начала встречи (по календарю) находиться на месте проведения встречи. 8 | - Избегать задержек и в случае опоздания стараться сообщить участникам о времени задержки заранее. 9 | 10 | Это поможет избежать простоя и необоснованного расхода времени других. 11 | 12 | ## Писать код, который удовлетворяет стандартам команды 13 | 14 | - Соблюдать стайлгайд и другие договорённости в команде разработки, касающиеся написания кода. 15 | - Писать тесты и не ломать сборку на долгое время. 16 | - Исправлять ошибки, выявленные при ревью, вовремя. 17 | 18 | Это необходимо для ускорения разработки в долгосрочной перспективе, предотвращения накопления технического долга, а также поддержания кодовой базы в чистоте. 19 | 20 | ## Общаться без оскорблений 21 | 22 | - Избегать оскорбления людей намеренно. 23 | - Не оскорблять людей даже в шутку, если им это не по смаку. 24 | 25 | Это необходимо для создания комфортной рабочей атмосферы и эффективного взаимодействия в команде. 26 | 27 | ## Соблюдать договорённости в команде 28 | 29 | - Выполнять принятые договорённости в команде. 30 | - Сообщать о нарушении договорённостей, если оно произошло. 31 | 32 | Это важно для обеспечения предсказуемости и слаженности работы команды. 33 | 34 | ## Соблюдать приоритеты 35 | 36 | - Знать приоритеты своих задач и не нарушать их. 37 | - Сначала выполнять важные задачи, а затем менее важные. 38 | 39 | Это помогает оптимально использовать время и ресурсы. 40 | 41 | ## Воспринимать обратную связь как подарок 42 | 43 | - Спокойно слушать негативную обратную связь, не оправдываться или оскорбляться в ответ. 44 | - Рассматривать негативный фидбек как возможность для роста и улучшения. 45 | 46 | Это помогает понимать, в чем другие видят проблемы и в чем можно совершенствоваться. 47 | -------------------------------------------------------------------------------- /grades/roles/guildlead.md: -------------------------------------------------------------------------------- 1 | # GuildLead 2 | 3 | > Under construction 4 | 5 | Наследует все права и обязанности из [TechLead](techlead.md), а также: 6 | 7 | * Следит за тех.радаром и непосредственно влияет на его улучшение. 8 | * Организует регулярные встречи гильдии. 9 | * Собирает обратную связь от членов гильдии. 10 | * Синхронизирует задачи гильдии с другими командами и/или гильдиями. 11 | * Оптимизирует процесс найма новых сотрудников в стек разработки гильдии. 12 | -------------------------------------------------------------------------------- /grades/roles/mentor.md: -------------------------------------------------------------------------------- 1 | # Mentor 2 | 3 | > Может навставлять не вставляемое и впихнуть не впихуемое… И все это во благо, а не потехи для. 4 | 5 | Наставник (mentor) - это роль, которую выполняет разработчик с большим опытом работы на проекте и назначенный для помощи новому члену команды. Миссия наставника состоит в проведении процесса онбординга и оказании поддержки новому разработчику в освоении проекта. Он помогает разобраться в технических вопросах, в которых у нового разработчика может не хватать опыта, а также в вопросах, связанных с архитектурой, бизнес-логикой и коммуникацией. 6 | 7 | Наставником может стать опытный разработчик в команде или любой другой разработчик, который обладает достаточным уровнем знаний и опыта для оказания помощи и поддержки новым членам команды. 8 | 9 | -------------------------------------------------------------------------------- /grades/roles/techlead.md: -------------------------------------------------------------------------------- 1 | # TechLead 2 | 3 | > Under construction 4 | 5 | Наследует все права и обязанности из [Senior](../senior.md). 6 | 7 | ## Экспертность 8 | 9 | - Обладает технической экспертизой на уровне, превосходящем специалиста уровня Senior. 10 | - Проявляет экспертное владение навыками в конкретной области. 11 | - Проектирует технические продукты, которыми пользуются другие инженеры. 12 | - Создает продукты, удовлетворяющие текущим потребностям своей команды и команд из других доменных зон. 13 | - Отвечает за техническое качество продукта в определенной области. 14 | - Создает и внедряет принципиально новые технологии. 15 | 16 | ## Лидерство 17 | 18 | - Обладает способностью убедительно выражать свою экспертную точку зрения перед другими специалистами в этой области. 19 | - Анализирует технические решения, предоставляет конструктивную обратную связь и принимает финальные решения. 20 | - Помогает другим членам своего профессионального сообщества в решении сложных архитектурных задач. 21 | - Выходит за рамки своей команды при поиске и решении проблем. 22 | - Создает доверительную атмосферу в коллективе. 23 | - Выступает на конференциях. 24 | - Систематически работает над развитием технического уровня всех членов команды в своем функциональном направлении. 25 | - Создает сообщества, где все заинтересованные лица могут обмениваться знаниями и разрабатывать решения, или активно участвует в них. 26 | -------------------------------------------------------------------------------- /grades/roles/vurtialclusterlead.md: -------------------------------------------------------------------------------- 1 | # VurtialClusterLead 2 | 3 | > Under construction 4 | -------------------------------------------------------------------------------- /grades/senior.md: -------------------------------------------------------------------------------- 1 | # Senior 2 | 3 | > Senior - это как ниндзя. Ты можешь сколько угодно кричать: "Эй, чувак, твой код гуано..." А он уже на спину тебе плюнул. 4 | 5 | Требования к senior инженеру без привязки к стеку разработки. Наследует все права и обязанности [middle](middle.md). 6 | 7 | ## Разработка 8 | 9 | - Внедряет инструменты, технологии, практики разработки на уровне всей команды. 10 | - Предлагает новые инструменты и технологии разработки. 11 | - Детально разбирается в сервисе/модуле. 12 | - Может ответить (или найти ответы) на любой вопрос, связанный с работой сервиса/модуля. 13 | - Несет ответственность за стабильность сервиса. 14 | - Разбирает user story и превращает хотелку продакта/пользователя в техническую задачу. 15 | - Разрабатывает сервис/модуль под ключ. 16 | - Следит за отсутствием "узких мест" в сервисе/модуле. 17 | - Способен найти решение в спорных ситуациях без участия руководителя. 18 | - Стремится расширять зону своей ответственности. 19 | - Имеет широкий технический кругозор, который позволяет принимать надежные и оптимальные архитектурные решения. 20 | - Быстро осуществляет исследование технологий и технических вопросов и решает возникающие проблемы. 21 | - Всегда уделяет большое внимание качеству конечного продукта, производительности и стабильности, берет на себя ответственность за разработку возложенной на него функциональности. Он несет ответственность не только за свою работу, но и за работу своих коллег, в рамках своей задачи или проекта. 22 | - Уделяет должное внимание документации проекта, актуализирует ее, участвует в разработке стандартов качества кода, описывает сложные и/или малоочевидные детали запуска, настройки и конфигурации проекта. 23 | - Регулярно проводит и принимает участие в технических собеседованиях и дает развернутую обратную связь по кандидатам. 24 | - В рамках ревью кода и выполнения собственных задач выявляет небезопасные подходы, уязвимости и неоптимальные решения. Дает подробное описание проблемы. 25 | 26 | ## Архитектура 27 | 28 | - Продумывает архитектуру сервиса и умеет обосновывать принятые решения. 29 | - Самостоятельно подготавливает архитектуру разрабатываемых компонент к защите перед командой. 30 | - Отвечает за архитектуру нескольких сервисов/модулей. 31 | - Принимает во внимание дальнейшее развитие всего сервиса/модуля. 32 | - Проектирует сложные системы, затрагивающие многие компоненты или сервисы/модули. 33 | 34 | ## Инженерная культура 35 | 36 | - Категорически не приемлет ситуации, когда нарушаются принципы принятой инженерной культуры. 37 | - Думает как улучшить инженерную культуру. 38 | 39 | ## Коммуникация 40 | 41 | - Должен быть максимально объективным с точки зрения принимаемых решений, не ориентироваться только на свою точку зрения, а сравнивать все доводы, плюсы и минусы. 42 | - Во время обсуждений стимулирует высказывание различных точек зрения и использует их при формировании окончательного решения. 43 | - Дает конструктивный фидбэк коллегам. 44 | 45 | ## Самообучение и наставничество 46 | 47 | - [Наставничество](roles/mentor.md) Junior и Middle разработчиков. 48 | - Онбордит новичков. 49 | - Старается системно улучшить процессы в команде, взаимодействие и быструю обучаемость новичков. 50 | - Выступает на внешних конференциях, пишет статьи в профильные блоги, публикует open source проекты, преподает в различных образовательных учреждениях или ведет курс по разработке приложений. 51 | 52 | ## Планирование 53 | 54 | - Способен вести несколько фичей одновременно. 55 | - Может составить роадмап проекта с контрольными точками (при поддержке аналитика/менеджера). 56 | - Работает с долгосрочными целями команды/отдела. 57 | - Занимается стратегией и тактикой развития сервиса/модуля. 58 | 59 | ## Команда 60 | 61 | - Участвует в найме в команду. 62 | - Может вести адаптацию нового сотрудника в проект и команду. 63 | - Может вести стажера и самостоятельно определять скоуп его работы. 64 | - Может решить или деэскалировать конфликтную ситуацию. 65 | 66 | ## Смертные грехи 67 | 68 | - Непонимание целей и задач продукта. 69 | - Несамостоятельность. 70 | - Неумение взаимодействовать с людьми. 71 | - Неумение делегировать. 72 | - Неумение добиваться результата. 73 | - Низкое качество кода и архитектуры. 74 | -------------------------------------------------------------------------------- /grades/web/junior.md: -------------------------------------------------------------------------------- 1 | # Junior 2 | 3 | Наследует все права и обязанности [junior](../junior.md). 4 | -------------------------------------------------------------------------------- /grades/web/middle.md: -------------------------------------------------------------------------------- 1 | # Middle 2 | 3 | Наследует все права и обязанности [Web junior](junior.md) и [middle](../middle.md). 4 | -------------------------------------------------------------------------------- /grades/web/senior.md: -------------------------------------------------------------------------------- 1 | # Senior 2 | 3 | Наследует все права и обязанности [Web middle](middle.md) и [Senior](../senior.md). 4 | 5 | -------------------------------------------------------------------------------- /guild.md: -------------------------------------------------------------------------------- 1 | # Гильдии 2 | 3 | ## Миссия 4 | 5 | Создать и развивать лучшую на рынке экосистему разработки для всех команд, за счет повышения предсказуемости разработки, понижения порога входа для взаимодействия команд друг с другом и использования лучших технологий в области производительности, отказоустойчивости и эксплуатации сервисов. 6 | 7 | ## Зачем 8 | 9 | - Обмен знаниями и опытом. Гильдии позволяют сотрудникам обмениваться знаниями и опытом в своей области. Это помогает повысить квалификацию и эффективность работы каждого участника гильдии. 10 | - Развитие профессиональных навыков. Гильдии могут организовывать тренинги, семинары и мастер-классы, которые помогут участникам развивать свои профессиональные навыки и узнавать о новых технологиях. 11 | - Улучшение коммуникации. Гильдии помогают улучшить коммуникацию между сотрудниками, что может привести к более эффективной работе внутри департамента. 12 | - Создание культуры знаний. Развитие гильдий помогает создать культуру знаний внутри департамента, где каждый сотрудник может делиться своими знаниями и опытом с другими. 13 | - Улучшение качества продукта. Развитие гильдий может привести к улучшению качества продукта, так как сотрудники будут лучше знать свою область и смогут предложить новые идеи и решения. 14 | 15 | ## Принципы 16 | 17 | - Принцип меритократии идей - принятие решений на основе профессионализма и компетентности; 18 | - Принцип конкурентности - мы выбираем лучшие решения не в рамках своей команды, а в рамках всего рынка; 19 | - Принцип эффективности - любые инвестиции в рамках инициированных гильдией изменений должна быть возвращены в виде улучшения производственных показателей команд (time2market, cost reduction, performance, uptime, ...); 20 | - Принцип адаптивности - ничто не стоит и на месте и даже самые лучшие решения должны регулярно проходить проверку на соответствие нашей миссии. Поэтому мы обеспечиваем регулярный цикл обратной связи от команд и проактивно исследуем изменения на рынке технологий. 21 | 22 | ## Процесс принятия решений 23 | 24 | - формирование экспертной группы; 25 | - открытый сбор обратной связи среди всех участников гильдии; 26 | - оценка вариантов решений экспертной группой; 27 | - принятие решения лидом гильдии в случае отсутствия кворума. 28 | 29 | ## Задачи лида гильдии 30 | 31 | Описано в роли [GuildLead](grades/roles/guildlead.md) профилях инженеров. 32 | -------------------------------------------------------------------------------- /history.md: -------------------------------------------------------------------------------- 1 | # История 2 | 3 | * [«Магнит» запустил собственный сервис доставки продуктов](https://www.magnit.com/ru/media/press-releases/magnit-zapustil-sobstvennyy-servis-dostavki-produktov-/) 4 | * [«Магнит» и Delivery Club запустили экспресс-доставку продуктов за 30 минут](https://new-retail.ru/novosti/retail/magnit_i_delivery_club_zapustili_ekspress_dostavku_produktov_za_30_minut8995/#:~:text=%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%87%D0%BD%D0%B0%D1%8F%20%D1%81%D0%B5%D1%82%D1%8C%20%C2%AB%D0%9C%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%C2%BB%20%D0%BE%D0%B1%D1%8A%D1%8F%D0%B2%D0%B8%D0%BB%D0%B0%20%D0%BE,%2C%20%D0%9E%D0%BC%D1%81%D0%BA%D0%B0%2C%20%D0%91%D1%80%D1%8F%D0%BD%D1%81%D0%BA%D0%B0%20%D0%B8%20%D0%A2%D0%B0%D0%BC%D0%B1%D0%BE%D0%B2%D0%B0) 5 | * [«Магнит» переманил из Lamoda команду ИТ-топ-менеджеров во главе с основателем компании](https://www.cnews.ru/news/top/2020-05-12_magnit_peremanil_iz_lamoda) 6 | * [«Магнит» ускоряет цифровую трансформацию](https://www.retail.ru/rbc/pressreleases/magnit-uskoryaet-tsifrovuyu-transformatsiyu/) 7 | * [В «Магнит» пришла команда бывших руководителей Lamoda](https://www.vedomosti.ru/business/articles/2020/05/12/829992-v-magnit-prishla-komanda) 8 | * [К 2025 году «Магнит» рассчитывает довести долю онлайн-продаж до 5%](https://www.retail.ru/news/k-2025-godu-magnit-rasschityvaet-dovesti-dolyu-onlayn-prodazh-do-5-18-fevralya-2021-202078/) 9 | * [Команда бывших топ-менеджеров Lamoda перешла в «Магнит»](https://www.forbes.ru/newsroom/biznes/400293-komanda-byvshih-top-menedzherov-lamoda-pereshla-v-magnit) 10 | 11 | ## 2020 12 | 13 | * Январь - на уровне Правления принято решение о необходимости развития eCommerce для одного из направлений - Магнит-Аптека 14 | * Февраль - начало формирования команды eCommerce на основе команды, запускавшей сервис [Перекресток-онлайн](https://www.perekrestok.ru/). В ИТ eCommerce всего 1 сотрудник. 15 | * Март - разработаны функциональные требования к eCommerce-платформе 16 | * Апрель - проведен тендер по выбору подрядчика для разработки eCommerce-платформе. 17 | * Май - начало разработки силами подрядчика 18 | * Июнь - на уровне Правления принято решение о необходимости создания сервисов доставки продуктов 19 | * Июль - технический запуск сайта [Магнит Аптека](https://apteka.magnit.ru/), начало тестирования сервиса силами сотрудников Магнит в Москве. 20 | * Август - Найден подрядчик для реализации проекта по разработке сервисов доставки продуктов 21 | * Сентябрь - публичный запуск сайта [Магнит Аптека](https://apteka.magnit.ru/) для широкой аудитории пользователей. Разработаны функциональные требования для сервисов Экспресс-доставка продуктов и регулярная доставка продуктов. Проработка вариантов возможной реализации в проекта в экстремально короткие сроки - 3 мес. Выбран вариант партнерства с Яндекс по схеме WhiteLabel. 22 | * Октябрь 23 | * запуск сервиса Экспресс-доставки продуктов из магазинов у дома в Москве. Принято решение о необходимости формирования собственного штата разработчиков eCommerce направления. 24 | * запуск мобильного приложения "Магнит: акции и скидки". Принято решение о необходимости формирования собственного штата разработчиков core направления. 25 | * Ноябрь - запуск сервиса регулярной доставка из гипермаркетов в Краснодаре 26 | * Декабрь - развитие и масштабирование сервисов. Формирование службы поддержки eCommerce. 27 | 28 | ## 2021 29 | 30 | * Январь - поиск сотрудников в отдел разработки. 31 | * Март - начало формирования команд разработки из собственных сотрудников. 32 | * Сентябрь - завершена разработка и начато пилотирование первой полнофункционально версии собственного приложения Магнит Доставка. Приложение гибридное - в зависимости от местоположения клиента определяется логистический оператор, который будет обрабатывать заказ и, соответственно, работает либо нативный фунукционал приложения, либо Webview Яндекса. 33 | * Ноябрь - подключение к сервису магазинов Магнит Косметик. 34 | * Декабрь 2021 - количество заказов через приложение Магнит Доставка превысило 100 тыс. в сутки. Месячная аудитория приложения Магнит: акции и скидки превысила 7 млн. человек. Количество сотрудников в штате ИТ: 35 | * eCommerce >= 70 человек 36 | * core >= 50 человек 37 | 38 | ## 2022 39 | 40 | * 2022 год начался с формирования единого департамента Магнит Онлайн со своей структурой, культурой и ценностями. 41 | * C января по июнь - продолжение масштабирования eCommerce и полный переход от схемы WhiteLabel на собственное приложение Магнит Доставка. 42 | * В Q2 43 | * реструктуризация Core направления; 44 | * сформирован новый отдел разработки онлайн платформы (Platform); 45 | * В Q3 46 | * eCommerce направление разделилось на отдел разработки пользовательских продуктов и отдел разработки операционных продуктов; 47 | * Принято решение о разработке собственной системы поиска по товарам в торговых точках для всех онлайн витрин Магнит; 48 | -------------------------------------------------------------------------------- /imgs/team_topologies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magnit-tech/magnit-online/c8c8c1a9ad0dacffa64acc62eb8fcadba06a6168/imgs/team_topologies.png -------------------------------------------------------------------------------- /publication.md: -------------------------------------------------------------------------------- 1 | # Публикации и выступления 2 | 3 | * [Do IT like a Russian: чем крупный ритейл может удивить технического директора](https://habr.com/ru/company/magnit/blog/570992/) 4 | * [Как мы боролись с проблемой разлогинов в приложении «Магнита» и возвращали пользователей обратно](https://habr.com/ru/company/magnit/blog/586022/) 5 | * [Moscow Python Podcast. Про генерацию кода (level: all)](https://youtu.be/l8_30z34AQk) 6 | * [Как построить Observability для инфраструктурной платформы / Владимир Дроздецкий (Магнит)](https://youtu.be/1YY2Aa12NT0) 7 | * [Становление команд: вредные советы / Антон Егорушков (Магнит)](https://youtu.be/RpT6BUFDK6s) 8 | * [Магнитное поле №12 – Как оптимизировать опыт разработки с помощью собственной PaaS](https://www.youtube.com/watch?v=jEEPpgDwvok) 9 | * [TeamLeadConf. Я тимлид, и у меня ломка. Что делать?](https://www.youtube.com/watch?v=q-Q1hKa905w) 10 | -------------------------------------------------------------------------------- /teams/README.md: -------------------------------------------------------------------------------- 1 | # Команды 2 | 3 | Сегодня онлайн-разработка в «Магните» — самый молодой и автономный юнит, который быстро взаимодействует, строит процессы по принципу здравого смысла и пользы, использует продуктовый подход. Всего в IT «Магнит» больше 3500 инженеров, которые поддерживают и развивают IT-инфраструктуру всей федеральной сети. 4 | 5 | ## Виды команд 6 | 7 | Источники 8 | 9 | * книга [TeamTopologies](https://teamtopologies.com/) 10 | * конференция [TechLead](https://www.youtube.com/watch?v=dtSzAjt5YQc) 11 | * конференция [DevopsConf](https://devopsconf.io/moscow/2021/abstracts/7531) 12 | * статья [Организация Agile команд и ARTs: Командная топология в масштабе](https://agilelab.org/blog/organizing-agile-teams-and-arts-team-topologies-at-scale) 13 | * статья [Платформенные команды — что это такое и зачем они нужны](https://apolomodov.medium.com/%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B-%D1%87%D1%82%D0%BE-%D1%8D%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-%D0%BE%D0%BD%D0%B8-%D0%BD%D1%83%D0%B6%D0%BD%D1%8B-d4c978115152) 14 | 15 | ![топология команд](../imgs/team_topologies.png) 16 | 17 | ### Stream-aligned Teams 18 | 19 |
20 | Подробнее - развернуть/свернуть 21 | Поточно-ориентированная (далее продуктовая) команда, организована вокруг потока работ и имеет возможность предоставлять ценность непосредственно клиенту или конечному пользователю. 22 | 23 | #### Характеристики 24 | 25 | * Работает на единый поток создания ценности, новые фичи должны составлять большую часть работы, выполняемой командой. 26 | * Наделена полномочиями создавать и поставлять ценность для клиентов или пользователей как можно быстрее. 27 | * Обладает всеми навыки, необходимыми для создания и поддержки любых функций и компонентов, в которых она нуждаются. 28 | * Применяет практики дизайн мышления для лучшего понимания персоны, представляющей сегмент клиентов, которых она обслуживает — создавая и поддерживая желаемые фичи. 29 | * Команда берет на себя ответственность за поддержку своих элементов решений в промышленной эксплуатации. Другими словами, “они строят это; они управляют этим". 30 | * Реагировать на потребности клиентов – реагировать на запросы новых фич, инциденты и корректировать порядок действий. 31 | 32 | #### Источники задач 33 | 34 | * Прямая обратная связь от клиентов. 35 | * Результаты исследований. 36 | * Различные продуктовые метрики. 37 | 38 | #### Эффективновность 39 | 40 | * Прямая обратная связь от клиентов. 41 | * Результаты исследований. 42 | * Продуктовые метрики (в идеальном мире у команды должна быть одна понятная продуктовая метрика, за которой команда следит). 43 |
44 | 45 | Кроссфункциональные команды, где есть представители всех направлений: iOS, Android, backend, QA, дизайн, аналитики. Работают по scrum, двухнедельными спринтами, со всеми его стандартными активностями. 46 | 47 | #### Команды приложения «Магнит: акции и доставка» и сайтов компании 48 | 49 | * [App Tech](app_tech.md) 50 | * [Catalog](catalog.md) 51 | * [Extra Value Promo Games](extra_value_promo_games.md) 52 | * [Extra Value Promo Mobile](extra_value_promo_mobile.md) 53 | * [Main Screen](main_screen.md) 54 | * [Multiformat](multiformat.md) 55 | * [Online Journal](online_journal.md) 56 | * [Promo](promo.md) 57 | * [User Reviews](user_reviews.md) 58 | * [Virtual Card](virtual_card.md) 59 | * [Web Base](web.md) 60 | 61 | #### Команды клиентских сервисов доставки 62 | 63 | * [Attraction](attraction.md) 64 | * [Choice](choice.md) 65 | * [Purchaise](purchaise.md) 66 | * [Retention](retention.md) 67 | * [Integration](integration.md) 68 | * [Core/Optimizations](optimization.md) 69 | 70 | #### Команды операционных сервисов доставки 71 | 72 | * [OMS](oms.md) 73 | * [Payment](payment.md) 74 | * [Collect](collect.md) 75 | * [Delivery](delivery.md) 76 | * [UserSupport](user_support.md) 77 | * [Pharmacy](pharmacy.md) 78 | 79 | ### Platform Teams 80 | 81 |
82 | Подробнее - развернуть/свернуть 83 | Платформенная команда, организована вокруг разработки и поддержки платформ, предоставляющих услуги другим командам. 84 | 85 | #### Характеристики 86 | 87 | * Ориентированность на потребность коллег — если члены платформенной команды не воспринимают свою работу как продукт, который должен облегчить жизнь коллег, то скорее всего платформенная команда ускоренно движется в сторону своего расформирования. 88 | * Высокий уровень технических компетенций — часто сложность задачи по созданию платформы для продуктовых команд сложнее, чем продуктовые задачи, а это значит, что и требования к компетенциям выше. 89 | * Богатый опыт — зачастую только с опытом приходит некоторая технологическая мудрость, когда ты проектируешь общие решения не слишком ограниченно, но в то же время без over engineering; 90 | 91 | #### Источники задач 92 | 93 | * Заказ функциональности от продуктовых команд. 94 | * Функциональность, придуманная платформенной командой самостоятельно, но на основе проблем, которые испытывают продуктовые команды. 95 | * Технический долг, который не может решить продуктовая команда. 96 | 97 | #### Эффективновность 98 | 99 | * Зачастую работа платформенной команды приводит к сокращению time-to-market продуктовых команд, так как они часть функциональности могут собрать из готовых блоков или воспользоваться коробочным процессом. 100 | * Стоимость владения решениями, построенными на общих компонентах зачастую ниже в расчете на одну команду, так как стоимость изменений общих компонент размазывается на все продуктовые команды. 101 | * Одним из главных факторов успеха для платформенной команды является признание продуктовых команд, а выглядит это как свободный выбор продуктовых команд технических продуктов платформенной команды в условиях возможной конкуренции с open source решениями. Таким образом эти технические продукты должны облегчать работу продуктовых команд и помогать в ускорении поставок новой функциональности. Соответственно, главным провалом является вотум недоверия продуктовых команд тем продуктам и подходам, что платформенная команда продвигает в массы. 102 |
103 | 104 | Платформенные команды организованы вокруг разработки и поддержки платформ, предоставляющих услуги другим командам, и объединены в отдел разработки онлайн платформы. Отдел занимается разработкой, распространением и внедрением общих компонент, подходов, практик, сервисов для все продуктовых команд, чтобы делать их рабочие процессы проще и эффективнее. 105 | 106 | В зоне ответственности отдела находятся сервисы: 107 | 108 | * a/b платформа и конфигурирование различных настроек в realtime; 109 | * User-Generated Content; 110 | * авторизации и аутентификации; 111 | * коммуникаций с пользователями через sms/push/email; 112 | * обработки логики изменения цен и остатков в торговых точках Магнит; 113 | * поиска по товарам в торговых точках Магнит. 114 | 115 | #### Команды 116 | 117 | * [AB](ab.md) 118 | * [MagnitID](magnit_id.md) 119 | * [Cuscom](cuscom.md) 120 | * [Search](search.md) 121 | * [Stocks&Prices](stocks_and_prices.md) 122 | * [UGC](ugc.md) 123 | 124 | ### Enabling Teams 125 | 126 |
127 | Подробнее - развернуть/свернуть 128 | "Разблокирующая" команда организована для оказания помощи другим командам в специализированных возможностях и помощи в освоении новых технологий. 129 | 130 | #### Характеристики 131 | 132 | Инструменты и методы разработки решений постоянно меняются, предоставляя организациям регулярные возможности для интеграции новых практик и технологий. Хотя это приносит много преимуществ, это также создает проблемы для развития необходимых навыков и опыта во всех командах. Разблокирующие команды являются важной конструкцией. Они могут оказывать поддержку и давать рекомендации другим командам, помогая им приобретать эти новые навыки и быстро осваивать эти новые технологии. 133 | 134 | Примеры разблокирующих команд могут предоставить экспертные знания и поддержку в следующих областях: 135 | 136 | * Реализация DevOps. 137 | * Автоматизированное тестирование. 138 | * Непрерывная интеграция и инструменты для сборки. 139 | * Методы обеспечения качества проектирования. 140 | * Безопасность. 141 | * Среды и конфигурация. 142 | 143 | #### Источники задач 144 | 145 | * Заказ функциональности от любых других команд. 146 | * Различные области непосредственно несвязанные с разработкой и/или тестированием. 147 | 148 | #### Эффективновность 149 | 150 | В общем виде измерить эффективность разблокирующих команд крайне сложно. Если это DevOps - можно мерить скорость cicd и как он влияет на time-to-market, если это автоматизированное тестирование - можно мерить уменьшение времени на проведение регресса после внедрения автотестов и т.д. и т.п. 151 |
152 | 153 | «Разблокирующая» команда оказывает помощь другим командам в специализированных возможностях и в освоении новых технологий. В зоне ответственности отдела devops находятся: 154 | 155 | * инфраструктура 156 | * платформа 157 | * конвейер 158 | 159 | #### Команды 160 | 161 | * [DevOps Core](devops_core.md) 162 | * [DevOps Ecom](devops_ecom.md) 163 | * [DevOps Platform](devops_platform.md) 164 | * [DevOps Gastronom](devops_gastronom.md) 165 | * [DevOps Analytics](devops_analytics.md) 166 | -------------------------------------------------------------------------------- /teams/ab.md: -------------------------------------------------------------------------------- 1 | # AB 2 | 3 | Команда развивает и поддерживает сервисы для продуктовых аналитиков и платформу по проведению a/b тестов, которые позволяют делать продукт лучше. Команда отвечает за: 4 | 5 | * развитие A/B платформы 6 | * систему сплитования трафика 7 | * календарь проведения A/B тестов 8 | * clickstream 9 | * собственный транспорт передачи событий 10 | * проверку качества событий 11 | * систематизацию продуктовых событий 12 | * конфигурацию событий 13 | 14 | Команда находится в стадии формирования. Сейчас мы ищем руководителя, который возглавит это направление разработки. [Контакты](../contacts.md) 15 | 16 | ## Используемые технологии и инструменты 17 | 18 | * [golang](../tech/golang.md) 19 | * [python](../tech/python.md) 20 | * postgres 21 | * redis 22 | * kafka 23 | * rabbitmq 24 | -------------------------------------------------------------------------------- /teams/app_tech.md: -------------------------------------------------------------------------------- 1 | # App Tech 2 | 3 | Миссия: создание комфортной рабочей среды для разработчиков мобильного приложения "Магнит: акции и доставка" (Omni app), автомазация и актуализация релизных процессов. 4 | 5 | ## Цели и задачи 6 | 7 | * Поддержка и развитие технического стека Omni app в диалоге с командой мобильной платформы и продуктовыми команадами. 8 | * Технический саппорт Omni app, развитие общих инструментов, общих зависимостей и т.п. 9 | * Непрерывный поиск путей по ускорению и облегчению Omni app, самостоятельно и в тандеме с другими командами. 10 | * Непрерывное улучшение релизных процессов. 11 | 12 | ## Используемые технологии и инструменты 13 | 14 | * [mobile kotlin](../tech/kotlin.md) 15 | * [mobile swift](../tech/swift.md) 16 | -------------------------------------------------------------------------------- /teams/attraction.md: -------------------------------------------------------------------------------- 1 | # Attraction tram 2 | 3 | Команда привлечения отвечает за первый опыт клиента в продукте: логин/создание пользователя, выбор адреса, выпуск карты лояльности. 4 | 5 | 6 | ## Используемые технологии и инструменты 7 | 8 | * [php](../tech/php.md) 9 | * [go](../tech/go.md) 10 | * [kotlin](../tech/kotlin.md) 11 | * [swift](../tech/swift.md) 12 | -------------------------------------------------------------------------------- /teams/catalog.md: -------------------------------------------------------------------------------- 1 | # Catalog Team 2 | Основная цель команды - помогать людям выбирать лучшие товары для их покупок. Каталог - сердце магазина, поэтому наша основная задача - сделать работу с товарами максимально удобной, быстрой и понятной. 3 | Ежедневно мы работаем с большим массивом данных и большой пользовательской нагрузкой. 4 | 5 | Проект бросает нам технологические вызовы и мы проектируем, строим архитектуру, решаем сложные задачи и не боимся ошибаться. 6 | Каждый член команды влияет на то, насколько удобным предстанет каталог перед конечным пользователем. 7 | 8 | # Команда 9 | Разработка ведется очень дружной кроссфункциональной командой delivery + discovery team. 10 | 11 | В составе Delivery Team: Android, iOS, Go разработчки, QA-специалисты. 12 | В составе Discovery Team: product owner, дизайнер, системный аналитик, ux-исследователь. 13 | 14 | Каждый член команды активно участвует в принятии решений по реализации фичей, по техническим решениям. Помимо непосредственно работы над улучшением покупательского опыта, разработчики принимают участие в деятельности своих профессиональных "гильдий" (iOS, Android, backend, QA), где обсуждают общие подходы к разработке, требования к качеству кода, составляют гайдлайны и т.п. 15 | 16 | # Используемые технологии и инструменты 17 | * [mobile kotlin](../tech/kotlin.md) 18 | * [mobile swift](../tech/swift.md) 19 | * [backend go](../tech/golang.md) 20 | * postgres 21 | * redis 22 | * kafka 23 | -------------------------------------------------------------------------------- /teams/choice.md: -------------------------------------------------------------------------------- 1 | # Choice tram 2 | 3 | Команда выбора товаров. Каталог, поиск, и отображение товаров - зона ответственности команды. 4 | 5 | 6 | ## Используемые технологии и инструменты 7 | 8 | * [php](../tech/php.md) 9 | * [go](../tech/go.md) 10 | * [kotlin](../tech/kotlin.md) 11 | * [swift](../tech/swift.md) -------------------------------------------------------------------------------- /teams/collect.md: -------------------------------------------------------------------------------- 1 | TBD -------------------------------------------------------------------------------- /teams/cuscom.md: -------------------------------------------------------------------------------- 1 | # Cuscom 2 | 3 | Строим единую точку входа коммуникаций (sms, push, email, viber) для всех продуктов Магнит (лояльность, доставка, аптека и т.д.). Рассылаем десятки миллионов транзакционных и маркетинговых коммуникаций в день; управляем коммуникациями на основе разрешений и локального времени; строим политику коммуникаций с целью подбора оптимальной частоты для каждого пользователя и получения максимального эффекта от каждой коммуникации 4 | 5 | ## Команда 6 | Команда состоит из Python разработчиков, каждый из которых принимает участие в обсуждении разрабатываемых фич и построении архитектуры 7 | 8 | ## Используемые технологии и инструменты 9 | * [Python](https://github.com/magnit-tech/magnit-online/blob/master/tech/python.md) как основной язык программирования 10 | * Postgres и Redis для хранения данных 11 | * Jaeger, Grafana и Prometheus для мониторинга 12 | * Gitlab CI для работы 13 | -------------------------------------------------------------------------------- /teams/delivery.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magnit-tech/magnit-online/c8c8c1a9ad0dacffa64acc62eb8fcadba06a6168/teams/delivery.md -------------------------------------------------------------------------------- /teams/devops_analytics.md: -------------------------------------------------------------------------------- 1 | # Devops Analytics 2 | 3 | ## Команда 4 | 5 | Команда отвечает за развитие инфраструктуры,платформы и конвеера платформы аналитики всего Магнит Онлайна. 6 | 7 | ## Используемые технологии и инструменты 8 | 9 | * Оркестрация: k8s 10 | * IAC: terragrunt,terraform,ansible,helm 11 | * CI/CD: gitlab 12 | * Cloud: ycloud 13 | * gitops: flux 14 | * obsevability: prometheus,victoria metrics,grafana,loki,tempo 15 | * Other: greenplum,airflow,clickhouse,hashicorp vault,consul,nginx,minio,redis,postgres and etc 16 | -------------------------------------------------------------------------------- /teams/devops_core.md: -------------------------------------------------------------------------------- 1 | # Devops Core 2 | 3 | ## Команда 4 | 5 | Команда отвечает за развитие инфраструктуры,платформы и конвеера для мобильного приложения Магнит: акции и доставка. 6 | 7 | ## Используемые технологии и инструменты 8 | 9 | * Оркестрация: k8s 10 | * IAC: terragrunt,terraform,ansible,helm 11 | * CI/CD: gitlab 12 | * Cloud: ycloud 13 | * gitops: flux 14 | * obsevability: prometheus,victoria metrics,grafana,loki,tempo 15 | * Other: hashicorp vault,consul,nginx,minio,redis,postgres and etc 16 | -------------------------------------------------------------------------------- /teams/devops_ecom.md: -------------------------------------------------------------------------------- 1 | # Devops Ecom 2 | 3 | ## Команда 4 | 5 | Команда отвечает за развитие инфраструктуры,платформы и конвеера приложения Магнит Доставка, Магнит Аптеки, их бэкендов и смежных сервисов. У нас около 60 микросервисов. Основной стек это golang, есть php legacy. 6 | 7 | ## Используемые технологии и инструменты 8 | 9 | * Оркестрация: k8s 10 | * IAC: terragrunt,terraform,ansible,helm 11 | * CI/CD: gitlab 12 | * Cloud: ycloud (+ some on VKCS) 13 | * obsevability: prometheus,grafana,elk,loki,victoriametrics,tempo 14 | * gitops: flux 15 | * Other: nginx,postgres,mysql,redis,kafka,rabbitmq,vault and etc 16 | 17 | Мы работаем по scrum и оцениваем задачи в стори-поинтах, а не человеко-часах. 18 | Мы активно обучаем друг друга, помогаем и всегда открыты к диалогу. 19 | -------------------------------------------------------------------------------- /teams/devops_gastronom copy.md: -------------------------------------------------------------------------------- 1 | # Devops Gastronom 2 | 3 | ## Команда 4 | 5 | Команда отвечает за развитие инфраструктуры,платформы и конвеера для нового проекта gastronom.ru 6 | 7 | ## Используемые технологии и инструменты 8 | 9 | * Оркестрация: k8s 10 | * IAC: terragrunt,terraform,ansible,helm 11 | * CI/CD: gitlab 12 | * Cloud: ycloud 13 | * gitops: flux 14 | * obsevability: prometheus,victoria metrics,grafana,loki,tempo 15 | * Other: hashicorp vault,consul,nginx,minio,redis,postgres and etc 16 | -------------------------------------------------------------------------------- /teams/devops_platform.md: -------------------------------------------------------------------------------- 1 | # Devops Platform 2 | 3 | ## Команда 4 | 5 | Команда отвечает за развитие инфраструктуры,платформы и конвеера 6 | 7 | ## Используемые технологии и инструменты 8 | 9 | * Оркестрация: k8s 10 | * Service Mesh: Istio 11 | * IAC: terragrunt,terraform,ansible,helm 12 | * CI/CD: gitlab 13 | * Cloud: ycloud 14 | * gitops: flux 15 | * obsevability: prometheus,victoria metrics,grafana,loki,tempo 16 | * Other: hashicorp vault,consul,nginx,minio,redis,postgres and etc 17 | -------------------------------------------------------------------------------- /teams/extra_value_promo_games.md: -------------------------------------------------------------------------------- 1 | # Extra Value Promo Games 2 | 3 | **Extra Value** — дополнительная выгода для пользователей приложения «Магнит: акции и доставка». Мы делаем пользователей чуточку счастливее, предоставляя возможность поучаствовать в акциях с игровой механикой, в которых можно выиграть ценные купоны или digital призы. 4 | 5 | ## Мы в СМИ 6 | 7 | * [Золото магнитного моря](https://youtu.be/TYSaYuk3xCg) 8 | * [И тут и там сюрпризы вам](https://youtu.be/0n9y36-RUKE) 9 | * [Грилевые игры](https://youtu.be/HDkmvQthV4c) 10 | 11 | ## Команда 12 | 13 | В нашей большой и дружной команде собрались специалисты из разных областей: 14 | * **Frontend разработчики**, которые любят делать крутые игры 15 | * **Backend разработчики**, которые знают, как решить любую задачу, и чинят баги до того как они появились 16 | * **Cистемный аналатик**, который разберется с любой поставленной задачей и найдет документацию по любой системе (Если она есть =)) 17 | * **Крутой QA инженер**, мимо которой не пролетит даже мошка, что уж там говорить о баге 18 | * **игровой и продуктовый дизайнеры**, которые не знают предела совершенства, делая крутой дизайн игр и сайтов акций 19 | * **Продуктовые аналитики**, после работы которых вся команда разработки полюбила аналитические дашборды и статистику 20 | * **Product и Team Lead** команды, которые стараются вместе с ребятами делать продукт и процессы разработки лучше с каждым днем 21 | 22 | ## Используемые технологии и инструменты 23 | 24 | * [backend golang](../tech/golang.md) 25 | * [frontend](../tech/web.md) 26 | * [infrastructure](/teams/devops_core.md) 27 | 28 | -------------------------------------------------------------------------------- /teams/extra_value_promo_mobile.md: -------------------------------------------------------------------------------- 1 | # Extra Value Promo Mobile 2 | 3 | **Extra Value** — дополнительная выгода для пользователей приложения «Магнит: акции и доставка». Мы делаем пользователей чуточку счастливее, предоставляя возможность поучаствовать в игровых механиках и акциях, чтобы выиграть ценные купоны или digital призы, а также обменять свои магнитики на купоны в рамках коллекционных акций. 4 | 5 | ## Мы в СМИ 6 | 7 | * [С Новым домом](https://youtu.be/vcrjTeLv5XE) 8 | * [Обзор игры «Скрепыши»](https://youtu.be/b4aKmnt7z6k) 9 | * [Нечерная пятница](https://youtu.be/XW5GrI5T-EI) 10 | 11 | ## Команда 12 | 13 | В нашей большой и дружной команде собрались специалисты из разных областей. 14 | * **iOS и Android разработчики**, которые любят делать и делают крутые продукты 15 | * **Backend разработчик**, который знает, как решить любую задачу, и чинит баги заранее, пока они не появились. 16 | * **Cистемный аналатик**, который разберется с любой поставленной задачей и найдет документацию по любой системе (Если она есть =)) 17 | * **Пара крутых QA инженеров**, мимо которых не пролетит даже мошка, что уж там говорить о баге. 18 | * **Креативные дизайнеры**, которые делают супер классный дизайн для пользователей. 19 | * **Продуктовые аналитики**, после работы которых вся команда разработки полюбила аналитические дашборды 20 | * **Product и Team Lead** команды, которые стараются вместе с ребятами делать продукт и процессы разработки лучше с каждым днем 21 | 22 | ## Используемые технологии и инструменты 23 | 24 | * [mobile kotlin](../tech/kotlin.md) 25 | * [mobile swift](../tech/swift.md) 26 | * [backend go](../tech/golang.md) 27 | * [backend python](../tech/python.md) 28 | 29 | -------------------------------------------------------------------------------- /teams/integration.md: -------------------------------------------------------------------------------- 1 | # Choice tram 2 | 3 | Команда интеграции партнеров. Владеет всеми интеграциями с партнерами, включая маркетплейсы. 4 | 5 | 6 | ## Используемые технологии и инструменты 7 | 8 | * [php](../tech/php.md) 9 | * [go](../tech/go.md) -------------------------------------------------------------------------------- /teams/last_mile.md: -------------------------------------------------------------------------------- 1 | TBD 2 | -------------------------------------------------------------------------------- /teams/lms.md: -------------------------------------------------------------------------------- 1 | tbd 2 | -------------------------------------------------------------------------------- /teams/magnit_id.md: -------------------------------------------------------------------------------- 1 | # Magnit ID 2 | 3 | Единый аккаунт для покупателей Магнита, мобильных приложений и сайтов, которые поддерживают его авторизацию. Если вы входили в приложение лояльности или регистрировались на других сервисах Магнита, у вас уже есть ID. 4 | 5 | ## Команда 6 | 7 | Наша команда состоит из Golang разработчиков. Каждый член команды активно участвует в принятии решений по реализации фичей, по техническим решениям. 8 | 9 | ## Сервисы 10 | 11 | * **auth** - Identity service; 12 | * **profiles** - cервис хранения информации о профилях покупателей; 13 | * **magnitid** - API Gateway для сервисов авторизации; 14 | 15 | ## Используемые технологии и инструменты 16 | 17 | * [golang](../tech/golang.md) 18 | * postgres 19 | * redis 20 | * rabbitmq 21 | * kafka 22 | -------------------------------------------------------------------------------- /teams/main_screen.md: -------------------------------------------------------------------------------- 1 | # Main Screen Team 2 | 3 | Команда занимается разработкой и поддержкой главного экрана приложения «Магнит: акции и доставка». Мы отвечаем за первое впечатление пользователя о продукте: понятно онбордим, удобно навигируем по разделам и подсвечиваем важные изменения с помощью всплывающих окон. А еще делаем загрузку главного экрана очень быстрой и обеспечиваем его бесперебойную работу, даже без интернета. 4 | 5 | ## Команда
 6 | 7 | Разработкой занимается команда из Android-, iOS-, Go-разработчков, QA-специалистов, дизайнера, системного и продуктового аналитиков, продакт-менеджера и тимлида. Каждый при этом активно вовлечен в решение задачи на каждом этапе. Мы используем гибкий подход во всем, поэтому положительно относимся к любым инициативам членов команды. Помимо работы над задачами, инженеры принимают участие в деятельности своих профессиональных «гильдий» (iOS, Android, backend, QA), где обсуждают общие подходы к разработке, требования к качеству кода, составляют гайдлайны и т.д.

 8 | 9 | ## Используемые технологии и инструменты 10 | 11 | * [mobile kotlin](../tech/kotlin.md) 12 | * [mobile swift](../tech/swift.md) 13 | * [backend go](../tech/golang.md) 14 | -------------------------------------------------------------------------------- /teams/mobile-swat.md: -------------------------------------------------------------------------------- 1 | tbd 2 | -------------------------------------------------------------------------------- /teams/multiformat.md: -------------------------------------------------------------------------------- 1 | # Multiformat Team 2 | 3 | Основная цель команды - сделать так, чтобы пользователи совершали покупки в магазинах разного формата. Для этого мы разрабатываем и улучшаем функциональность выбора магазина, любимого магазина, улучшаем блок "товары недели" и т.д. Наша цель - сделать так, чтобы у форматов магазинов было такое же представление в нашем приложении как если бы они разрабатывали своё приложение, на уровне лидеров в своей индустрии 4 | 5 | ## Команда 6 | 7 | В нашей дружной команде есть крутые специалисты в каждом направлении. Есть два замечательных iOS разработчика, двое усердных Android разработчика, мега-крутой Backend-developer, так же есть два ультра-внимательных QA-инжинера, талантливый дизайнер, отличный бизнес аналитик, мега-четкий системный аналитик и строгий, но справедливый тимлид. 8 | Разработка ведется по Agile, где каждый член команды учвствует в принятии решений, как бизнес составляющей так и технической. У каждого есть возможность влиять на продукт и процессы 9 | Помимо непосредственно работы над мультиформатностью нашего приложения, разработчики принимают участие в своих профессиональных "гильдях" (iOS, Android, backend, QA), где обсуждают общие подходы к разработке, к коду, обмениваются опытом, составляют гайдлайны и т.п. 10 | 11 | ## Используемые технологии и инструменты 12 | 13 | * [mobile kotlin](../tech/kotlin.md) 14 | * [mobile swift](../tech/swift.md) 15 | * [backend go](../tech/golang.md) -------------------------------------------------------------------------------- /teams/oms.md: -------------------------------------------------------------------------------- 1 | Команда отвечающая за процессинг заказа. 2 | 3 | На текущий момент, область ответственности – партнерские заказы (заказы из DeliveryClub, Yandex.Eda, SberMarket) 4 | 5 | -------------------------------------------------------------------------------- /teams/online_journal.md: -------------------------------------------------------------------------------- 1 | # Online-journal 2 | 3 | Онлайн-журнал внутри приложения Магнит: акции и доставка. Мы даем пользователям возможность ознакомиться и прочитать широкий набор рецептов и статей. Внутри раздела пользователей ждут интерактивные рецепты, с которыми удобно и приятно готовить, а любимый контент легко найти и не потерять. Верим, что делаем пользователя чуточку счастливее! 4 | 5 | ## Команда 6 | 7 | Разработка ведется кроссфункциональной командой, в составе которой есть Android, iOS, Go/Python разработчки, QA-специалисты, дизайнер, аналитик и тимлид. Каждый член команды активно участвует в принятии решений по реализации фичей, по техническим решениям. Помимо непосредственно работы над улучшением покупательского опыта, разработчики принимают участие в деятельности своих профессиональных "гильдий" (iOS, Android, backend, QA), где обсуждают общие подходы к разработке, требования к качеству кода, составляют гайдлайны и т.п. 8 | 9 | ## Используемые технологии и инструменты 10 | 11 | * [mobile kotlin](../tech/kotlin.md) 12 | * [mobile swift](../tech/swift.md) 13 | * [backend go](../tech/golang.md) 14 | * [backend python](../tech/python.md) 15 | -------------------------------------------------------------------------------- /teams/optimization.md: -------------------------------------------------------------------------------- 1 | # Optimization tram 2 | 3 | Команда оптимизации. Занимается профилированием, поиском уязвимых мест и оптимизацией использования ресурсов. 4 | 5 | ## Используемые технологии и инструменты 6 | 7 | * [php](../tech/php.md) 8 | * [go](../tech/go.md) -------------------------------------------------------------------------------- /teams/payment.md: -------------------------------------------------------------------------------- 1 | TBD -------------------------------------------------------------------------------- /teams/pharmacy.md: -------------------------------------------------------------------------------- 1 | TBD -------------------------------------------------------------------------------- /teams/picking.md: -------------------------------------------------------------------------------- 1 | TBD 2 | -------------------------------------------------------------------------------- /teams/promo.md: -------------------------------------------------------------------------------- 1 | # Promo Team 2 | 3 | Основная цель команды - помогать людям выбирать лучшие товары для их покупок. Увеличить долю покупок товаров с промо-механиками, а так же увеличивать лояльность пользователей за счёт промо-механик. Команда отвечает за список акций и их размещение в мобильном приложении. В планах увеличивать ассортимент акций путем интеграций с внутренними сервисами. 4 | 5 | ## Команда 6 | 7 | Разработка ведется кроссфункциональной командой, в составе которой есть Android, iOS, Go/Python разработчки, QA-специалисты, дизайнер, аналитик и тимлид. Каждый член команды активно участвует в принятии решений по реализации фичей, по техническим решениям. Помимо непосредственно работы над улучшением покупательского опыта, разработчики принимают участие в деятельности своих профессиональных "гильдий" (iOS, Android, backend, QA), где обсуждают общие подходы к разработке, требования к качеству кода, составляют гайдлайны и т.п. 8 | 9 | ## Используемые технологии и инструменты 10 | 11 | * [mobile kotlin](../tech/kotlin.md) 12 | * [mobile swift](../tech/swift.md) 13 | * [backend go](../tech/golang.md) 14 | * [backend python](../tech/python.md) 15 | -------------------------------------------------------------------------------- /teams/purchaise.md: -------------------------------------------------------------------------------- 1 | # Purchaise tram 2 | 3 | Команда покупки товара. отвечает за корзину, процесс покупки, и сопровождения клиента в момент его заказа. 4 | 5 | 6 | ## Используемые технологии и инструменты 7 | 8 | * [php](../tech/php.md) 9 | * [go](../tech/go.md) 10 | * [kotlin](../tech/kotlin.md) 11 | * [swift](../tech/swift.md) -------------------------------------------------------------------------------- /teams/retention.md: -------------------------------------------------------------------------------- 1 | # Retention tram 2 | 3 | Команда удержания пользователя. Занимается разработкой возвратных механик, промокодов и других маркетинговых инструментов. 4 | 5 | 6 | ## Используемые технологии и инструменты 7 | 8 | * [php](../tech/php.md) 9 | * [go](../tech/go.md) 10 | * [kotlin](../tech/kotlin.md) 11 | * [swift](../tech/swift.md) -------------------------------------------------------------------------------- /teams/rte.md: -------------------------------------------------------------------------------- 1 | tbd 2 | -------------------------------------------------------------------------------- /teams/search.md: -------------------------------------------------------------------------------- 1 | # Search 2 | 3 | Поиск по товарам, ценам, остаткам всех товаров, всех магазинов в онлайне ритейла Магнит. Большая нагрузка, большой объем данных. Нечеткий и фасетный поиск. Цифры: 4 | 5 | * Количество магазинов ~ 30к 6 | * Количество товаров ~ 500к 7 | * Среднее количество товаров в магазине ~ 10-50к 8 | 9 | Продукт данной команды это API для других подразделений/команд для реализации своих CJM внутри различных витрин. 10 | 11 | ## Команда 12 | 13 | Команда находится в стадии своего формирования. Сейчас мы ищем golang разработчиков с навыками работы с поисковыми движками, в частности с elasticseach. [Контакты](../contacts.md) 14 | 15 | ## Сервисы 16 | 17 | * **Indexer** - занимается обновление поиского индекса 18 | * **Searcher** - реализует API для поиска 19 | 20 | ## Используемые технологии и инструменты 21 | 22 | * [golang](../tech/golang.md) 23 | * elasticseach 24 | * redis 25 | * postgres 26 | * rabbitmq 27 | * kafka 28 | -------------------------------------------------------------------------------- /teams/stocks_and_prices.md: -------------------------------------------------------------------------------- 1 | # Stocks&Prices 2 | 3 | Мы - команда Stocks&Prices(Остатки и цены). 4 | 5 | Наша задача - предоставлять самые актуальные данные по товарам с десятков 6 | тысяч торговых объектов для собственных сервисов и всех наших партнеров. Мы создаем и развиваем высоконагруженную 7 | систему, используя современный стек технологий, с пропускной способностью порядка сотни тысяч запросов. Здесь настоящий 8 | хайлоад, проектирование и архитектура, нетривиальные решения и оптимизации. 9 | 10 | Цифры: 11 | * Количество магазинов ~ 30 тысяч 12 | * Количество товаров ~ 1 миллиард 13 | * Среднее количество товаров в магазине ~ 10-50 тысяч 14 | * Порядок запросов в секунду - сотни тысяч 15 | 16 | ## Используемые технологии и инструменты 17 | 18 | * [Golang](../tech/golang.md) как основной язык программирования 19 | * Postgres и Redis для хранения данных 20 | * HTTP, GRPC и Kafka для общения между сервисами 21 | * Jaeger, Grafana и Prometheus для мониторинга 22 | * Gitlab CI для работы 23 | 24 | ## Вакансии 25 | 26 | Команда находится в стадии развития. 27 | 28 | В данный момент мы ищем **Go-разработчиков**, которых мотивирует сложность задач и возможность сделать вклад в один из ключевых продуктов платформы Магнит Онлайн. 29 | 30 | #### Ожидания от кандидата: 31 | * Опыт коммерческой разработки на Go от 1 года или опыт работы в бекенд-разработке от 3 лет 32 | * Понимание основ микросервисной архитектуры 33 | * Опыт в работе с базами данных Postgresql, Redis 34 | * Стремление делать хороший продукт для людей 35 | 36 | Будем рады рассказать подробнее о задачах и возможностях для развития в Магните. 37 | 38 | Для оперативной связи вы можете писать напрямую тимлиду Stocks&Prices [Сергею Горустовичу](gorustovich_sv@magnit.ru) или любому нашему коллеге из списка [контактов](../contacts.md). 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /teams/swat.md: -------------------------------------------------------------------------------- 1 | TBD 2 | -------------------------------------------------------------------------------- /teams/ugc.md: -------------------------------------------------------------------------------- 1 | # UGC 2 | 3 | Команда Пользовательского контента (User Generated Content) отвечает за опросы пользователей, а также занимается обработкой и хранением отзывов на товары. 4 | 5 | Основная задача команды - построение и развитие платформы клиентского опыта (Customer Experience Platform), предоставляющей полный цикл работы со сбором обратной связи от наших клиентов и обработку полученных данных. 6 | 7 | ## Команда 8 | 9 | Разработка ведется кросс-функциональной командой, состоящей из Backend разработчиков (Golang/Python), Web разработчиков (Vue), продуктового дизайнера, тимлида, менеджера продукта, продуктовых и системных аналитиков. 10 | Все члены команды активно задействованы в проработке технических решений и архитектуры разрабатываемых систем. Каждый имеет возможность повлиять на продукт и процессы. 11 | 12 | ## Используемые технологии и инструменты 13 | 14 | * [golang](../tech/golang.md) 15 | * [python](../tech/python.md) 16 | * [web](../tech/web.md) 17 | * postgres 18 | * kafka 19 | * redis 20 | 21 | ## Вакансии 22 | В данный момент мы находимся в поиске опытных Go-разработчиков, QA-инженеров и Системного аналитика. 23 | -------------------------------------------------------------------------------- /teams/user_reviews.md: -------------------------------------------------------------------------------- 1 | # User Reviews 2 | 3 | **User Reviews** — Возможность поделиться обратной связью — неотъемлемая часть функционала любого сервиса. Только благодаря ей мы можем понять, что пользователям не нравится и исправить это, а также увидеть, что пользователям нравится и продолжить развивать эти опции. Мы создаем инструменты, которые помогают услышать мнение каждого пользователя. 4 | 5 | 6 | ## Команда 7 | 8 | Разработка ведется в дружной, активной, кросс-функциональной команде, в составе которой есть Android, iOS, Python разработчики, QA-специалисты, продуктовые дизайнер и аналитик, team lead и менеджер продукта. 9 | 10 | Каждый член команды может влиять на то, куда движется продукт — каждая задача выносится на обсуждение перед передачей в работу 11 | 12 | Помимо непосредственно работы над улучшением покупательского опыта, разработчики 13 | принимают участие в деятельности своих профессиональных "гильдий" (iOS, Android, backend, QA), где обсуждают общие подходы к разработке, требования к качеству кода, составляют гайдлайны и т.п. 14 | 15 | ## Используемые технологии и инструменты 16 | 17 | * [mobile kotlin](../tech/kotlin.md) 18 | * [mobile swift](../tech/swift.md) 19 | * [backend python](../tech/python.md)$ 20 | -------------------------------------------------------------------------------- /teams/user_support.md: -------------------------------------------------------------------------------- 1 | TBD -------------------------------------------------------------------------------- /teams/virtual_card.md: -------------------------------------------------------------------------------- 1 | # Virtual Card 2 | 3 | Магнит Лояльность — это система лояльности компании Магнит, которая позволяет получать бонусы, экономить на покупках, участвовать в тематических клубах, розыгрышах и других активностях сети Магнит для пользователей. 4 | 5 | Приложение Магнит для мобильных устройств на базе iOS /Android, поможет вам активировать карту, или выпустить виртуальную версию карты. С помощью приложения пользователь может отслеживать предложения и актуальне акции в магазинах Магнит. Бонусная программа сети магазинов предусматривает накопление баллов в виде процента от покупок. Для этого покупатель предъявляет на кассе карту Приложение Магнит с QR-кодом виртуальной карты. Приложение позволяет отслеживать накопления и траты, контролировать уровень достижений покупателя. 6 | 7 | ## Мы в СМИ 8 | 9 | * [«Магнит» запускает программу лояльности](https://www.vedomosti.ru/business/articles/2019/08/21/809266-magnit-zapuskaet-programmu) 10 | * [Обзор новой программы лояльности «Магнит»](https://vc.ru/marketing/108457-tak-i-tyanet-obzor-novoy-programmy-loyalnosti-magnita) 11 | * [Программа лояльности «Магнита» завоевала три награды на Loyalty Awards Russia 2020](https://www.magnit.com/ru/media/press-releases/programma-loyalnosti-magnita-zavoevala-tri-nagrady-na-loyalty-awards-russia-2020/) 12 | 13 | ## Команда 14 | 15 | Разработка продукта ведется Agile-командой, в составе которой есть Android, iOS, Go, Python разработчики, QA инженеры, тимлид; в тесной коммуникации с дизайнерами, аналитиками и владельцем продукта. Каждый член команды активно участвует в принятии решений по реализации фичей, по техническим решениям. Помимо непосредственно работы над системой лояльности, разработчики принимают участие в деятельности своих профессиональных "гильдий" (iOS, Android, backend, QA), где обмениваются экспертизой, составляют гайдлайны, решают каким образом будут использовать новейшие подходы и технологии из платформо-зависимого стека, обсуждают техническое развитие продукта и т.п. Команда отвечает за поддержку и развитие любимых категорий, велком-бонусов клиентам, управлением подписками на повышенные бонусы и другие бенефиты, размещения в партнёрском разделе, стабильности работы накопления и списания баллов при помощи виртуальной карты и персонализации различных предложений для повышения процента начислений за покупки. 16 | 17 | ## Используемые технологии и инструменты 18 | 19 | * [mobile kotlin](../tech/kotlin.md) 20 | * [mobile swift](../tech/swift.md) 21 | * [backend go](../tech/golang.md) 22 | * [backend python](../tech/python.md) 23 | -------------------------------------------------------------------------------- /teams/web.md: -------------------------------------------------------------------------------- 1 | # Web 2 | 3 | Миссия: Помочь Веб-аудитории Магнита получить лучшие персонализированные предложения и IT-продукты Магнита 4 | 5 | Цели: 6 | 7 | * Формировать веб-продукты под потребности целевой аудитории за счет data-driven подходов 8 | * Объединить все веб-сайты в единую Веб платформу с единым Magnit ID 9 | * Аккумулировать аудиторию Веба 10 | * Перераспределять трафик между внутренними продуктами 11 | 12 | ## Команда 13 | 14 | Разработка ведется кроссфункциональной командой, в составе которой есть Backend/Frontend разработчики, QA-специалисты, дизайнеры, аналитики и тимлид. Каждый член команды активно участвует в принятии решений по реализации фичей, по техническим решениям. Помимо непосредственно работы над улучшением покупательского опыта, разработчики принимают участие в деятельности своих профессиональных "гильдий" (Golang, JS, QA), где обсуждают общие подходы к разработке, требованиям к качеству кода, составляют гайдлайны и т.п. 15 | 16 | ## Используемые технологии и инструменты 17 | 18 | * [frontend](/tech/web.md) 19 | * [backend](/tech/golang.md) 20 | -------------------------------------------------------------------------------- /tech/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magnit-tech/magnit-online/c8c8c1a9ad0dacffa64acc62eb8fcadba06a6168/tech/.DS_Store -------------------------------------------------------------------------------- /tech/README.md: -------------------------------------------------------------------------------- 1 | # Технологии и инструменты 2 | 3 |

4 | confluence 5 | gitlab 6 | go 7 | jira 8 | kafka 9 | kotlin 10 | kubernetes 11 | php 12 | postgresql 13 | python 14 | rabbitmq 15 | redis 16 | swift 17 | javascript 18 | vue 19 | terraform 20 |

21 | 22 | С полным стеком наших технологий можно познакомиться в [технологическом радаре](https://radar.thoughtworks.com/?sheetId=https://raw.githubusercontent.com/magnit-tech/tech-radar/master/%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D0%B0%D0%B4%D0%B0%D1%80%20%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D0%B0%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8.csv). 23 | 24 | ## Общий стек 25 | 26 | * confluence — для документации 27 | * gitlab (Premium SaaS Plan) - для хранения кода и cicd 28 | * jira — для задач 29 | * testrail/testit — для тест кейсов 30 | * yandex cloud + managed k8s — для инфраструктуры 31 | 32 | ## Языки разработки 33 | 34 | ### Backend 35 | 36 | * [go](golang.md) 37 | * [php](php.md) 38 | * [python](python.md) 39 | 40 | ### Devops 41 | 42 | * [devops](devops.md) 43 | 44 | ### Mobile 45 | 46 | * [kotlin](kotlin.md) 47 | * [swift](swift.md) 48 | 49 | ### Frontend 50 | 51 | * [web](web.md) 52 | -------------------------------------------------------------------------------- /tech/devops.md: -------------------------------------------------------------------------------- 1 | # Devops 2 | 3 | [Технологический радар](https://magnit-tech.github.io/magnit-online/tech/radar/devops/index.html) 4 | 5 | ## Cloud 6 | 7 | Испольуем Yandex & VK Clouds. 8 | 9 | ## IAC 10 | 11 | Используем https://terragrunt.gruntwork.io/ 12 | 13 | Все ресурсы описаны модулями. Для провижининга используем ansible. 14 | 15 | ## K8S 16 | 17 | Используем managed k8s. 18 | Для деплоя infra-part используем https://fluxcd.io/ 19 | Для деплоя applications используем app-chart, который разрабатываем мы. 20 | 21 | ## Service Mesh 22 | 23 | Используем https://istio.io/ 24 | 25 | ## CI/CD 26 | 27 | Используем gitlab.com -------------------------------------------------------------------------------- /tech/golang.md: -------------------------------------------------------------------------------- 1 | # Golang 2 | 3 | [Технологический радар](https://magnit-tech.github.io/magnit-online/tech/radar/golang/index.html) 4 | 5 | 6 | 7 | ## Version 8 | 9 | 1.17 и выше. Версии обновлять только до stable. 10 | 11 | ## GIT, Gitlab, CI/CD 12 | 13 | * Репозитории проектов хранятся на gitlab.com. 14 | * Все процессы CI/CD полностью автоматизированы. Вмешательство админов и devops'ов для деплоя сервисов не требуется. 15 | * Новые микросервисы поднимаются из шаблонов и сразу готовы к деплою, даже без добавления бизнес-логики. 16 | * Задачи, находящиеся в разработке, можно проверять и тестировать в виртуальных окружениях, которые автоматически создаются при пуше ветки в gitlab. 17 | 18 | ## Logging 19 | 20 | Используем https://github.com/uber-go/zap 21 | 22 | Логирование только структурное, логи пишем в JSON. 23 | Для агрегации логов используем Loki. Просмотр логов осуществляется через Grafana и/или Kibana. 24 | 25 | ## Tracing 26 | 27 | Используем актуальную версию клиента jaeger. 28 | В качестве хранилища и бэкенда для трайсинга используется Grafana Tempo: https://grafana.com/oss/tempo/ 29 | 30 | ## Metrics 31 | 32 | Для метрик используем Prometheus. 33 | 34 | ## HTTP Framework 35 | 36 | https://github.com/labstack/echo 37 | 38 | ## Postgresql 39 | 40 | Работа с postgresql осуществляется с помощью: https://github.com/jackc/pgx 41 | 42 | Не используем ORM, только RAW запросы. 43 | 44 | Миграции накатываем с помощью golang-migrate: https://github.com/golang-migrate/migrate 45 | 46 | ## Specification 47 | 48 | Для взаимодействия между сервисами используем подход specification first (OpenAPI v3.0). 49 | 50 | Http methods только **GET** | **POST**. 51 | 52 | Именования методов: 53 | ```/$version/$domain/$action``` 54 | 55 | Например: 56 | ```/v1/users/add``` 57 | 58 | ## Code Generation 59 | 60 | Для генерации клиентов использует oapi-codegen (https://github.com/deepmap/oapi-codegen) с набором своих доработок и исправлений. 61 | 62 | ## Testing 63 | 64 | Для удобства написания тестов используем: 65 | * testify toolkit: https://github.com/stretchr/testify 66 | * mockery https://github.com/vektra/mockery 67 | -------------------------------------------------------------------------------- /tech/kotlin.md: -------------------------------------------------------------------------------- 1 | ## Описание приложения Magnit Android. Стек технологий. 2 | 3 | ### Версия Android 4 | Приложение поддерживает минимальную версию Android SDK 23 (6.0) 5 | 6 | ### Стек технологий 7 | - **Kotlin** основной язык разработки 8 | - **Kotlin Coroutines** для фоновых операций и асинхронных задач 9 | - **Navigation Component** и **single activity** для навигации 10 | - **Retrofit** для сетевых запросов 11 | - **Dagger2** для dependency injection 12 | - **Kotlin Gradle DSL** для конфигурации сборки проекта 13 | - **Moshi** для парсинга json 14 | - **ViewBinding** для биндинга данных на view 15 | - **jUnit 4** для unit тестирования 16 | - **Espresso** и **mockserver** для instrumentation testing 17 | - **FCM** для работы с push уведомлениями 18 | - **Yandex AppMetrica** для сбора аналитических данных 19 | - **Fastlane** для сборки проекта на базе GitLab CI/CD 20 | 21 | ### Архитектура 22 | Проект следует принципам Uncle Bob's Clean Architecture и состоит из трех слоёв: 23 | 1. Presentation 24 | 2. Domain 25 | 3. Data 26 | 27 | В качестве архитектурного паттерна проектирования используется [MVVM (Model-View-ViewModel)](https://ru.wikipedia.org/wiki/Model-View-ViewModel). 28 | 29 | ### Modules 30 | В проекте используется многомодульный подход. Здесь можно выделить основные: 31 | - App-модуль — связывает в себе все модули и имеет зависимости на Feature-модули и Core. 32 | - Core-модуль — содержит вспомогательный код, необходимый для нескольких Feature-модулей. Это могут быть полезные обертки над используемыми библиотеками, общие компоненты presentation слоя, расширения или иные утилиты. Core-модуль ни от кого не зависит. 33 | - Feature-модуль — модуль, содержащий конкретную фичу, изолированную от остальных в соответствии с бизнес-логикой. В общем случае он включает в себя presentation слой, DI и иные специфичные модулю данные. Feature-модуль имеет зависимость на Core-модуль. 34 | 35 | ### Feature toggles 36 | При разработке нового функционала приложения используются toggles, управлять которыми можно как локально, так и server side, что дает дополнительную гибкость, стабильность и безопасность интеграции новых фич в проект. 37 | 38 | ### Локализация 39 | Приложение на текущий момент может поддерживать две локализации - русскую и английскую. Процесс локализации и обновления строк происходит централизованно для всех платформ, через **POEditor**. Чтоюы запустить синхронизацию и обновление строк в проекте следует выполнить python скрипт и пакета tools проекта. 40 | 41 | ### Best practises 42 | Для поддержания чистого и легко читаемого кода следует придерживаться следующих принципов и правил: 43 | * [Kotlin style guide #1](https://developer.android.com/kotlin/style-guide) 44 | * [Kotlin style guide #2](https://kotlinlang.org/docs/coding-conventions.html) 45 | * [Coroutines](https://developer.android.com/kotlin/coroutines/coroutines-best-practices?utm_source=android_broadcast_te&utm_medium=post&utm_campaign=coroutines-luchshie-) 46 | * [StateFlow and SharedFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) 47 | * [SOLID](https://ru.wikipedia.org/wiki/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)) 48 | * [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) 49 | * [KISS](https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)) 50 | 51 | > В дополнение ко всему следует использовать плагин для Android Studio [Detekt plugin](https://plugins.jetbrains.com/plugin/10761-detekt), настроенный на конфиги линтера проекта. 52 | 53 | ### Git-flow 54 | - На каждую задачу создается feature branch. Обязательные ревью, как минимум 2 approve. 55 | - Для именования коммитов и веток используется подход [Semantic Git Commit](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716) 56 | - Версионирование релизов происходит по спецификации [Semantic Versioning](https://semver.org/) 57 | 58 | 59 | ### Сторонние библиотеки и ресурсы 60 | В проекте не допускается использование экспериментального api различных библиотек, SDK и средств языка, а так же их alpha и beta версий. Для некоторых beta возможны исключения, но только по согласованию со всей командой (с обоснованием такой необходимости), и только из библиотек поставляемых Android SDK и Google. Решения о возможности внесения новых библиотек в проект должны приниматься коллегиально. 61 | -------------------------------------------------------------------------------- /tech/php.md: -------------------------------------------------------------------------------- 1 | # Реализация сервисов на php 2 | 3 | Указанный набор технологий может меняться под конкретные нужды и задачи. 4 | 5 | [Технологический радар](https://magnit-tech.github.io/magnit-online/tech/radar/php/index.html) 6 | 7 | ## Технологии 8 | 9 | - Php >= 8.0 10 | - Nginx + php-fpm - вебсервер 11 | - Symfony LTS - как фреймворк 12 | - Composer - пакетный менеджер для установки зависимостей 13 | - Doctrine - в качестве основной ORM 14 | - Guzzle - как библиотека для написания http клиентов до других API 15 | - OpenAPI и GraphQL - как интерфейсы REST API 16 | - Cron - планировщик 17 | - Supervisor - для управления демонами 18 | - Redis и Memcache - для кеша 19 | - Mysql (Percona) и Postgres - если нужны реляционные БД 20 | - Kafka, RabbitMQ, DB queue - для очередей 21 | - PHPUnit - как фрейм для написания автоматических тестов 22 | - Postman - что бы делиться подготовленными коллекциями по REST API 23 | - Swagger - для автоматического сбора документации по REST API 24 | - Twig - как шаблонизатор 25 | - JIRA - как система для управления потоком задач 26 | - Confluence - для документации 27 | 28 | ## Task flow in Git 29 | - Задача = feature ветка 30 | - Ветвимся от master 31 | - Под релизы собираются ветки, которые после smoke сливаются с master 32 | - Для именования веток используем № задачи из JIRA + Semantic Git Commit 33 | 34 | ## Как проверяем код и стандартизируем 35 | - PSR - как список стандартов 36 | - SonarQube - как статический анализатор 37 | - PHP-CS-Fixer - для проверки стандартов 38 | 39 | ## Какое окружение для разработки 40 | 41 | Проекты содержат docker-compose файл(-ы), с полностью описанными зависимыми сервисами и моккерами для запуска в Docker. 42 | Make файл для удобства запуска одной командой. 43 | Есть Dev, Test, Uat облачные среды под любые нужды. 44 | 45 | ## CI/CD 46 | 47 | - pipeline для запуска SonarCube и PHP-CS-Fixer после commit-ов 48 | - автоматическая сборка и упаковка докер образов: dev/test/uat/prod 49 | - pipeline под запуск unit тестов 50 | - функциональные тесты на Python 51 | - ansible для Iac 52 | - автоматическая доставка приложений на среды по тегам 53 | 54 | ## Внешние библиотеки 55 | 56 | - Стараемся придерживаться Zero dependency подхода либо форкаем стабильные версии пакетов 57 | - Автоматический обновление версий в composer вида {..^} запрещёны 58 | - Ведём списки проверенных библиотек у которых проведён анализ кода 59 | 60 | # Лучшие практики 61 | 62 | 63 | * [DDD](https://en.wikipedia.org/wiki/Domain-driven_design) 64 | * [Comment Code](https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments/) 65 | * [Low cognitive complexity](https://docs.codeclimate.com/docs/cognitive-complexity) 66 | * [CQRS](https://habr.com/ru/company/skyeng/blog/546314/) - простым языком 67 | * [PHP-PSR](https://www.php-fig.org/psr/) 68 | * [Symfony Right Way](https://symfony.com/doc/current/best_practices.html) 69 | * [SOLID](https://ru.wikipedia.org/wiki/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)) 70 | * [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) 71 | * [KISS](https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)) -------------------------------------------------------------------------------- /tech/python.md: -------------------------------------------------------------------------------- 1 | # Реализация микросервисов на python 2 | 3 | [Технологический радар](https://magnit-tech.github.io/magnit-online/tech/radar/python/index.html) 4 | 5 | Пишем микросервисы среднего слоя на python. 6 | 7 | ## Технологии 8 | 9 | - python = 3.9.x 10 | - FastAPI - как http web фреймворк 11 | - uvicorn - как ASGI server 12 | - poetry - как пакетный менеджер для установки зависимостей 13 | - sqlalchemy/aoipg - как драйвер для работы с postgresql 14 | - alembic - для миграций 15 | - httpx - как библиотека для написания http клиентов до других API 16 | - pydantic 17 | - как библиотека для описания структур данных как внутри микросервиса так и для выдачи данных в ответе http 18 | - как библиотека для конфигурирования приложения через env переменные 19 | - aiocron - для реализации фоновых задач запускаемых по расписанию 20 | - aioredlock - при необходимости реализации распределенных локов между подами внутри кубера 21 | - aiocache/aioredis - для кеширования чего-либо в redis 22 | 23 | Код должен быть покрыт type hinting, который должен проверяться через mypy 24 | 25 | Код должен быть отформатирован через black/isort/pyflakes 26 | 27 | ## Локальный запуск 28 | 29 | Проект должен содержать makefile, в котором должны быть описаны все способы запуска локально: 30 | 31 | - сервера 32 | - тестов 33 | - проверок на форматирование кода 34 | - проверок на mypy 35 | - миграций 36 | 37 | ## Запуск в докер контейнере 38 | 39 | Проект должен содержать docker-compose файл, в котором должны быть описаны все способы запуска сервера в докер образе локально со всеми необходимыми зависимостями 40 | 41 | ## CICD 42 | 43 | - проверка кода на форматирование через black/isort/pyflakes 44 | - сборка докер образов: dev/prod 45 | - проверка кода на type hinting через mypy 46 | - запуск тестов. Минимальное покрытие тестами кода - 90% 47 | - smoke test 48 | - деплой 49 | -------------------------------------------------------------------------------- /tech/radar/devops/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 95 | 96 | 97 | 98 | 106 | 109 | 110 | 111 |
99 |
    100 |
  • ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
  • 101 |
  • TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
  • 102 |
  • ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
  • 103 |
  • HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
  • 104 |
105 |
107 | Generated by Zalando Tech Radar. 108 |
112 | 113 | 114 | -------------------------------------------------------------------------------- /tech/radar/golang/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 83 | 84 | 85 | 86 | 94 | 97 | 98 | 99 |
87 |
    88 |
  • ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
  • 89 |
  • TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
  • 90 |
  • ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
  • 91 |
  • HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
  • 92 |
93 |
95 | Generated by Zalando Tech Radar. 96 |
100 | 101 | 102 | -------------------------------------------------------------------------------- /tech/radar/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 78 | 79 | 80 | 81 | 89 | 92 | 93 | 94 |
82 |
    83 |
  • ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
  • 84 |
  • TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
  • 85 |
  • ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
  • 86 |
  • HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
  • 87 |
88 |
90 | Generated by Zalando Tech Radar. 91 |
95 | 96 | 97 | -------------------------------------------------------------------------------- /tech/radar/php/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 281 | 282 | 283 | 284 | 292 | 295 | 296 |
285 |
    286 |
  • ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
  • 287 |
  • TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
  • 288 |
  • ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
  • 289 |
  • HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются..
  • 290 |
291 |
293 | Generated by Zalando Tech Radar. 294 |
297 | 298 | 299 | 300 | -------------------------------------------------------------------------------- /tech/radar/python/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 86 | 87 | 88 | 89 | 97 | 100 | 101 | 102 |
90 |
    91 |
  • ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
  • 92 |
  • TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
  • 93 |
  • ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
  • 94 |
  • HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
  • 95 |
96 |
98 | Generated by Zalando Tech Radar. 99 |
103 | 104 | -------------------------------------------------------------------------------- /tech/radar/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 75 | 76 | 77 | 78 | 86 | 89 | 90 | 91 |
79 |
    80 |
  • ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
  • 81 |
  • TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
  • 82 |
  • ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
  • 83 |
  • HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
  • 84 |
85 |
87 | Generated by Zalando Tech Radar. 88 |
92 | 93 | 94 | -------------------------------------------------------------------------------- /tech/swift.md: -------------------------------------------------------------------------------- 1 | О проекте Magnit iOS и используемых технологиях 2 | 3 | ## Версия iOS 4 | 5 | Приложение поддерживает минимальную iOS 14.0. 6 | 7 | ## Настройка окружения 8 | 9 | Необходимо установить зависимости 10 | [brew](https://brew.sh) 11 | [rvm](https://rvm.io/rvm/install) 12 | Склонировать репозиторий, открыть в директорию проекта и выполнить следующие команды 13 | `bundle install` 14 | `brew bundle` 15 | `brew install cocoapods` 16 | `pod install` 17 | 18 | ## Архитектура 19 | 20 | В качестве используемого подхода к архитектуре приложения используется **CleanSwift**, где в основе presentation слоя лежит VIP (View-Interactor-Presenter). На русском можно ознакомиться [здесь](https://habr.com/ru/post/415725/). 21 | 22 | ### Структура проекта 23 | 24 | Основными директориями в проекте являются 25 | * Assets - директория для различных видов ассетов 26 | * Bootstrap - директория для базовых настроек проекта (Application, AppDelegate, etc) 27 | * Core - директория для инфраструктурных сущностей, которые затрагивают весь проект, а так же для расширений (extensions) 28 | * Debug - директория для всех сущностей, касаются фичей на стадии разработки: дебаг меню, dev toggles, etc 29 | * Localization - директория для локализированных строк и обертки для работы с локализированными строками 30 | * Modules - часть DI структуры, здесь собраны сервисы, которые используются как зависимости в других сущностях приложения 31 | * Networking - директория для обертки вокруг работы с сетью 32 | * Scenes - директория с экранами приложения и бизнес-логикой для них, согласно **CleanSwift** 33 | * Sections - директория с секциями экранов "мой магнит" и "магнит сегодня" 34 | 35 | ### DI 36 | 37 | В проекте используется в качестве DI зависимость DIP. 38 | В [ModuleCenter](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/blob/develop/Magnit/Modules/ModuleCenter.swift) регистрируются зависимости. 39 | Из ModuleCenter зависимости забираются посредством метода `getModule`, который возвращает Optional, это сделано в угоду безопасности. 40 | 41 | ## UI 42 | 43 | В основе UI - **UIKit**. Для иерархий для экранов форм используется подход с CVC (Child View Controller), где каждая часть представлена в виде секции и помещена в UIStackView. Экраны-списки реализованы классическим путём с определением делегатов на уровне ViewController без менеджера для tableView/collectionView. Раньше вёрстка осуществлялась через xib-файлы с пост-настройкой стиля, констрейнтов и пр. в коде, но сейчас такой подход больше не используется, по возможности верстку всех экранов переносим в код при помощи **AutoLayout** + **Constraints** 44 | 45 | ### Ассеты 46 | 47 | В качестве ассетов (изображений) используются экспортируемые из Figma ассеты в векторном формате SVG. Именование происходит с префиксом в зависимости от назначения изображений - "ic_" иконки, "bg_" фоновые картинки, "img_" картинки общего назначения. Работа с PaintCode больше не ведётся, в перспективе мы должны полностью заменить StyleKit на использование нативных ассетов и дизайн систему (см. ниже) 48 | 49 | ## Дизайн-система 50 | 51 | В командах было принято за стандарт использовать все поступающие от дизайна элементы, цвета, отступы, шрифты и пр. из единого источника правды для композиции пользовательского интерфейса - это дизайн система. Обновляется и дополняется в отдельном [репозитории](https://gitlab.com/magnit-online-services/app-loyalty/mobile/design-system-ios), а поставляется в проект через pod. 52 | 53 | ## Локализация 54 | В приложении используется русская и английская локализация. Процесс локализации осуществляется централизованно с помощью инструмента **POEditor**. После добавления новых локализованных строчек в проекте в POEditor нужно выполнить скрипт **updateStrings** из папки [scripts](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/tree/develop/scripts) и добавить полученные локализованные тексты в репозиторий. 55 | 56 | ## Работа с сетью 57 | 58 | Для работы с сетью в основе лежит **Alamofire**, поверх которого есть обертка в виде собственного [APIClient](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/blob/develop/Magnit/Networking/Magnit/APIClient.swift) с generics под ответ/запрос. Для коммуникации между backend и frontend используется Swagger first approach, где backend предоставляет swagger.yaml, а frontend генериурет networking слой. Для генерации кода на Swift используется утилита **[SwagGen](https://github.com/yonaskolb/SwagGen)** с кастомным набором шаблонов. 59 | Запуск генерации так же происходит посредством вызова скриптов **updateNetworkLayer**, **updatePostmanMocks** из папки [scripts](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/tree/develop/scripts) 60 | 61 | ## Тестирование 62 | Для Unit-тестирования используется связка **Quick** & **Nimble** для декларативного описания тестов. **Sourcery** используетя для генерации mock-объектов. В небольшом количестве имеются некоторые UI-тесты, что реализованы с помощью **Robot pattern testing**. 63 | 64 | ## DevToggles 65 | 66 | Для разработки используются dev toggles, которые являются enum'ом с набором фичей, которые не должны быть видны в магазинной сборке, но работа над ними ведется. 67 | В случае, если фича зарелижена, то тоггл удаляется как из enum'a, так и из входных точек фичи удаляются проверки. 68 | Для установки значений и использования их в коде была написана небольшая [обертка](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/blob/develop/Magnit/Debug/DevToggles/GrowthService.swift) 69 | 70 | ## FeatureFlags 71 | 72 | Сейчас более активно ведётся разработка с использованием Feature Flags - это удалённое управление состоянием фичи (вкл/выкл) с сервера. Для добавления фиче флага в приложение используется модуль [FeatureFlags](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/blob/develop/Magnit/Modules/FeatureFlags/FeatureFlagsModule.swift) 73 | 74 | ## Контроль версий 75 | 76 | Для контроля версий кода используется git. 77 | Парадигма к подходу разработки - **gitflow**, с фиче-ветками, обязательным код-ревью. 78 | Для прохождения ревью требуется 2 аппрува от разработчиков со статусом CODEOWNER. Ревью преследует принципы сохранения выбранной архитектуры приложения, а так же принципам SOLID, DRY, YAGNI. Так же преследуется цель сохранения выбранного стиля кода. 79 | 80 | ## CI / CD 81 | 82 | В качестве CI используется **Gitlab Pipelines**. 83 | Для сборок используется **fastlane**, в корне проекта есть [папка](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/tree/develop/fastlane) со всеми конфигами. 84 | Скрипт запуска fastlane лежит в папке [scripts](https://gitlab.com/magnit-online-services/app-loyalty/mobile/ios/-/tree/develop/scripts). 85 | Сертификаты для подписи приложения лежат в отдельном репозитории в зашифрованном виде. Для облегчения работы были написаны лейны `fastlane match_retrieve_debug` и `fastlane match_retrieve_acc` для разных окружений, которые мы используем. 86 | Если сертификаты оказались невалидны по каким либо причинам, обновить их можно используя лейны `fastlane match_update_debug` и `fastlane match_update_acc` соответственно. 87 | 88 | ### Зависимости 89 | 90 | Зависимости устанавливаются через Cocoapods. Текущий список зависимостей таков: 91 | 92 | > * pod 'Alamofire', '5.5.0' # Работа с сетью 93 | > * pod 'AlamofireNetworkActivityIndicator', '3.1' # Работа с сетью (индикация) 94 | > * pod 'Cache' # Кеширование 95 | > * pod 'Dip', '7.1.1' # DI 96 | > * pod 'Firebase/Analytics' # Аналитика 97 | > * pod 'Firebase/Crashlytics' # Краш репорты 98 | > * pod 'Firebase/Messaging' # Пуш уведомления 99 | > * pod 'KeychainAccess', '4.2.0' # Обертка для работы с защищенным хранилищем 100 | > * pod 'Kingfisher', '5.14.0' # Обертка для удобной загрузки и кеширования изображений 101 | > * pod 'Locksmith', '4.0.0' # Обертка для работы с защищенным хранилищем 102 | > * pod 'lottie-ios', '3.1.8' # Сложные анимации 103 | > * pod 'MarkdownKit', '1.6' # Парсер MarkDown 104 | > * pod 'OneTimePassword', '3.2.0' # Генератор OTP (используется для QR кодов) 105 | > * pod 'SexyTooltip', '1.2.7' # Тултипы 106 | > * pod 'SkeletonView', '1.10.0' # Используется только в клубах для создания скелета экрана 107 | > * pod 'SnapKit', '5.0.1' # Стили шрифтов и цветов 108 | > * pod 'SwiftLint', '0.40.3' # Статический анализатор кода 109 | > * pod 'YandexMobileAds/Dynamic', '2.16.0' # Аналитика 110 | > * pod 'YandexMobileMetrica/Dynamic/Core', '3.12.0' # Аналитика 111 | > * pod 'SwiftJWT' # Работа с JWT строками 112 | > * pod 'Wormholy' # Утилита для логирования и просмотра https запросов с устройства 113 | 114 | > * // Приватные репозитории 115 | > * pod 'DesignSystem', :source => 'https://github.com/magnit-tech/magnit-podspec.git' # Выше упомянутая дизайн-система 116 | 117 | > * // Unit-тестирование 118 | > * pod 'Quick', '3.0.0' # Вместе с Nimble используются для декларативного описания Unit-тестов 119 | > * pod 'Nimble', '9.0.1' # 120 | 121 | > * // UI Testing 122 | > * pod 'SBTUITestTunnelServer', '6.3.0', :configuration => ['Debug'] 123 | > * pod 'GCDWebServer', '3.5.4', :configuration => ['Debug'] 124 | > * pod 'SBTUITestTunnelCommon', '6.3.0', :configuration => ['Debug'] 125 | 126 | 127 | Решения о возможности внесения новых библиотек в проект должны приниматься коллегиально. 128 | -------------------------------------------------------------------------------- /tech/web.md: -------------------------------------------------------------------------------- 1 | # Frontend Magnit 2 | 3 | [Технологический радар](https://magnit-tech.github.io/magnit-online/tech/radar/web/index.html) 4 | 5 | ### Стек технологий 6 | 7 | - **nuxt 3** 8 | - **vue 3** 9 | - **typescript** 10 | - **postcss** 11 | - **pinia** 12 | - **jest** 13 | - **storybook** для визуализации [библиотеки UI-компонентов](https://web-design-system.dev.ya.magnit.ru/). 14 | 15 | ## GIT, Gitlab, CI/CD 16 | 17 | * Репозитории проектов хранятся на gitlab.com. 18 | * Все процессы CI/CD полностью автоматизированы. Вмешательство админов и devops'ов для деплоя не требуется. 19 | * Задачи, находящиеся в разработке, можно проверять и тестировать в виртуальных окружениях, которые автоматически создаются при пуше ветки в gitlab. --------------------------------------------------------------------------------