Задание состоит из 2-х частей.
-
Требуется продумать архитектуру одной фичи в приложении Яндекс Go и описать своими словами проработку. Ниже описан примерный план, что должна включать в себя проработка.
-
Выполнить ревью минимум двух проработок, написанных вашими коллегами. Попытаться понять, что он предлагает, и если получится, найти какие-то проблемы.
Предлагается оформить проработку в Markdown формате и залить на GitHub в виде pull-request'а, чтобы проще было ревьюить и комментировать вашу работу.
После выполнения ревью вашей проработки, следует либо внести доработки в архитектуру (поправить замечания), либо аргументированно объяснить, что ваше решение ок).
Свою проработку нужно положить в виде ссылки в таблицу ниже напротив свей фамилии. В столбцах рядом указано, кто будет делать ревью вашей работы. В последнем столбике указываем выбранную фичу.
Если вы хотите, вы можете просмотреть более, чем 2 работы. Но 2 – это обязательный минимум.
Дедлайн: 14:00 9 июня
Технический чат для вопросов и обсуждения: https://t.me/joinchat/K_TVYjiSwyAwNzFi
Решение вашей домашней работы №1 нужно разместить пулл-реквестом в свою папку в репозитории Школы: https://github.com/YaBackSchool2021/homework1 Название вашей папки нужно сделать в формате «имя-фамилия» транслитом. Например, «veronika-starkova».
Ревьюерами укажите тех, кто указан в табличке на Вики (и дополнительно их проинформируйте по готовности)
Вам должно было прийти приглашение на тот аккаунт в GitHub, который вы указывали при регистрации в Школу. Напишите Нике в личку, если этого не произошло
Не стоит делать проработку слишком большой. Делайте основной упор на качество проработки, а не на количество текста.
Примерный план, над чем стоит подумать и что описать:
-
небольшое описание задачи, постановка гипотез, понять, что улучшаем и зачем делаем фичу
-
MVP. Подумать, как можно сделать фичу минимальными усилиями, где можно срезать углы. Подумать над этапами реализации (описать MVP-вариант и полноценный)
-
схематично изобразить архитектуру/основные сценарии (какие есть компоненты, как связаны между собой, какие ендпоинты вызываются и откуда). Например, для этого можно использовать sequence diagram (plantuml)
-
описать протокол и API взаимосвязей между компонентами, например используя swagger (можно описать только 1-2 наиболее сложных ендпоинта)
-
описать несколько тестов разного типа (юнит, интеграционные, нагрузочные), на свое усмотрение. Подумать над граничными ситуациями
-
подумать над форматом эксперимента для включения фичи, на кого стоит включать в первую очередь, какие кварги использовать, за какими бизнесовыми и техническими метриками следить
Данный список пунктов является рекомендательным, а не обязательным. Если вы считаете, что что-то можно исключить или добавить что-то ещё (например, из материалов лекции), то можете делать, как считаете нужным.
//Дисклеймер: данное домашнее задание является экспериментальным форматом и не будет строго оцениваться по всем перечисленным пунктам. К заданию стоит подходить творчески//
На выбор предлагается несколько вариантов фичей, которые уже существуют в приложении Яндекс Go, вы можете выбрать любую из предложенных или придумать свой вариант. Для своего варианта можно взять как уже существующую фичу, так и придумать что-то новое.
Для всех вариантов не нужно придумывать базовую логику работы такси. Считаем, что уже есть готовая система, включающая в себя:
- клиентские приложения для водителей и пассажиров
- авторизация и хранение данных пользователей, водителей
- функциональность для выполнения полного цикла заказа (выбор нужного тарифа, поиск водителя, выполнение заказа, процессинг оплаты)
- админка для работы со всеми данными в системе (поиск и просмотр заказов, просмотр информации о пользователях и водителях, редактирование тарифов, работа с конфигами и экспериментами)
https://taxi.yandex.ru/action/rating_ru
Нужно продумать логику выставления оценки водителем после завершения поездки, описать, где и в каком формате должен хранится рейтинг. Подумать над честной формулой вычисления общей оценки. Понять, какие нужны ендпоинты (ручки) для клиентского приложения и водительского. И другие особенности, все, что посчитаете важным.
https://taxi.yandex.ru/blog/family-account/
Нужно подумать над форматом хранения аккаунтов, описать операции CRUD. Продумать логику выбора семейного аккаунта в качестве способа оплаты.
https://yandex.ru/support/taxi/how-to-order/receipt.html
Нужно подумать над тем, как добавлять новую почту в приложении, как подтверждать почту. Понять, в какой момент должен отправляться отчет. Продумать ситуацию, когда пользователь обращается в поддержку и хочет получить отчет по прошлым поездкам.
https://blog.pragmaticengineer.com/scaling-engineering-teams-via-writing-things-down-rfcs/ https://www.industrialempathy.com/posts/design-docs-at-google/