├── 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
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
18 | * [Магнит: акции и доставка](https://apps.apple.com/ru/app/магнит-акции-и-доставка/id881463973)
19 |
20 | ### Сайты
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 | 
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 |
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 |
99 |
100 |
ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
101 |
TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
102 |
ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
103 |
HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
89 |
TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
90 |
ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
91 |
HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
84 |
TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
85 |
ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
86 |
HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
287 |
TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
288 |
ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
289 |
HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются..
ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
92 |
TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
93 |
ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
94 |
HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
ADOPT — технологии и инструменты, которые внедрены и активно используются командах. Технологии, по которым в Magnit Online есть экспертиза.
81 |
TRIAL — технологии и инструменты, которые уже прошли этап тестирования и готовятся к тому, чтобы работать в продакшн (или даже уже работают там).
82 |
ASSESS — пробные технологии и инструменты, которые в данный момент оцениваются. С их участием реализуются только тестовые проекты, и они не используются в реальных задачах.
83 |
HOLD — в этой категории у нас есть экспертиза, но упомянутые инструменты используются только при поддержке существующих систем — новые проекты на них не запускаются.
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.
--------------------------------------------------------------------------------