Эргономичный подход
Эргономичный подход (ЭП) - это гайдлайн разработки бакендов информационных систем. Он помогает команде систематически обеспечивать высокое качество и скорость решения задач бизнеса на протяжении всего срока жизни проекта.
Краеугольным камнем ЭП является понятие эффекта - желательного для пользователя изменения в окружающем мире, выполняемого системой. Это понятие лежит в основе трёх ключевых характерных черт эргономичных кодовых баз, то есть кодовых баз, выполненных по гайдлайну Эргономичного подхода:
- Эргономичные кодовые базы должны быть декомпозированы на модули на базе эффектов. Это помогает создавать дизайны, обладающие низкой сцепленностью и высокой функциональной связанностью;
- Эргономичные кодовые базы должны быть выполнены в соответствии с функциональной/неизменяемой архитектурой внутри модулей. Это помогает собрать все эффекты операции в одном месте и упростить понимание работы системы;
- Эргономичные кодовые базы должны быть покрыты автоматическими тестами, преимущественно работающими через публичное API системы и фокусирующимися на верификации эффектов. Такой подход повышает устойчивость тестов к рефакторингу системы и позволяет гарантировать, что она работает так, как ожидает пользователь.
Все эти черты не являются новыми или уникальными для ЭП.
Модули, порождаемые декомпозицией на базе эффектов, являются прямыми аналогами объектов дизайна Ивора Якобсона из Object-Oriented Software Engineering: A Use Case Driven Approach — книги, впервые представившей понятие юзкейса и архитектуру Entity-Boundary-Interactor (прообраз современных гескагональной и чистой архитектуры).
Функциональную архитектуру можно разглядеть в морфологии, ориентированной на трансформацию (Transform-centered morphology) из структурного дизайна (Structured Design) Константина - книги, которая подарила нам понятия сцепленности (coupling) и функциональной связанности (cohesion).
А Джерард Месарош в XUnit Test Patterns — классической книге по автоматизированному тестированию - называет тестирование через публичное API с фокусом на верификации эффектов стратегией, хорошо работающей для большинства проектов.
В Эргономичном подходе эти три идеи объединены понятием эффекта, адаптированы друг к другу и современным реалиям разработки информационных систем. Получившееся сочетание является базой гайдлайна разработки, следование которому обеспечивает систематическое создание качественных кодовых баз.
Эффективность Эргономичного подхода подтверждена множеством кейсов успешного решения задач бизнеса - от быстрой разработки небольших MVP до реинжиниринга ключевых подсистем и целых систем.
Кейсы
Проект Э
Проект Э - это сервис, помогающий людям, больным диабетом, следить за своим здоровьем и делиться информацией о нём со своими близкими и лечащим врачом. Проект разрабатывается по заказу крупного российского производителя медицинского оборудования.
Над проектом работали две команды.
Первая команда на бакэнде создала систему с высокосцепленной микросервисной архитектурой, вертикальной архитектурой внутри модулей и без единого теста. Это привело к тому, что разработка новой функциональности требовала неадекватно больших трудозатрат и сопровождалась большим количеством ошибок.
После перехода проекта ко второй команде, работавшей по Эргономичному подходу, было принято решение провести полный реинжиниринг бэка в соответствии с принципами ЭП.
Реинжиниринг выполнила команда из лида и двух юниоров за 5.5 человеко-месяцев. Команда уложилась в 80% от трудозатрат на разработку исходной версии, что в результате сократило вдвое средние трудозатраты на разработку и количество ошибок.
Отзыв руководителя проекта на работу второй команды:
Хочу поблагодарить Алексея за проделанную работу - реинжиниринг бакэнда.
Год назад мы получили от клиента кодовую базу, которую до нас не запускали несколько лет, пока шла разработка других частей системы. В результате нам достался код на .Net с микросервисной архитектурой (более 10 микросервисов), отсутствием каких-либо тестов и документации по работе сервера и совершенно непонятной оценкой сроков даже запуска системы.
После запуска сервера и старта активной разработки стали очевидны проблемы с качеством кодовой базы: практически все задачи требовали неадекватно больших трудозатрат. Для решения этой проблемы Алексей предложил выполнить реинжиниринг сервера. Презентация Алексея о причинах больших сроков реализации задач наглядно продемонстрировала заказчику проблемы кодовой базы и он одобрил переписывание кода на Kotlin, перевод проекта с микросервисной архитектуры на монолитную и покрытие кодовой базы тестами.
Алексею удалось довольно точно оценить время на реинжиниринг и расписать план по спринтам на полгода. В процессе реинжиниринга код был покрыт тестами, команда Kotlin-стажеров под руководством Алексея поддерживала версию сервера на .Net на продакшене и параллельно переписывала код на Kotlin.
В результате удалось добиться всех целей реинжиниринга (ускорить работу сервера, удешевить разработку в двое, сделать систему расширяемой и покрыть тестами) и при этом выполнить всё в запланированные сроки.
На данном этапе система работает в продакшене и ей пользуются более 3000 пациентов и врачей по всей России. Отличная работа!
Geoservices
Geoservices — проект, выполненный по последней версии Эргономичного подхода. Это система для обновления информации о филиалах X5 Retail Group в Яндекс.Картах, 2Гис и Google.Maps. Система выполняет сбор данных о филиалах из нескольких внутренних источников, обеспечивает хранение и управление фотографиями филиалов и на периодической основе выполняет обновление соответствующей информации в геосервисах.
После выполнения проекта его руководитель оставил следующий отзыв об Эргономичном подходе:
Я Евгений Тимофеев — руководитель проектного офиса в компании Амаркон, международной компании, предлагающей корпоративные решения и услуги для крупного бизнеса в ритейле. В 2022 году с Алексеем работали над созданием сервиса, выгружающего сведения магазинов в ГИС: Яндекс.Карты, 2ГИС, Google.Maps. Это проект для X5 Retail Group — ведущей российской продуктовой розничной компании. Я занимал должность руководителя проекта, а Алексей архитектора и ведущего бэкенд-разработчика. В нашей команде был ещё один разработчик. Алексей продемонстрировал свой профессионализм и экспертизу в разработке сложных корпоративных информационных систем.
Алексей разработал архитектуру сервиса, используя авторский метод "Эргономичный подход". Фундамент, заложенный методикой, предопределил ход разработки, подготовки технической документации. Что, в свою очередь, позволило спроектировать простую систему, сократить срок разработки, минимизировать объём дефектов. На этом проекте Эргономичный подход прошёл боевое крещение и доказал конкурентоспособность, право на применение и развитие для систем любого класса. Отмечу, работая в паре с опытным разработчиком, Алексей занял роль ментора и передал знания по методу, что позволило продолжить коммерциализацию авторской методики в новых проектах.
Кэмп
Кэмп - MVP специализированной геоинформационной системы для водителей-дальнобойщиков. В отличие от геоинформационных систем общего назначения, Кэмп позволяет найти не просто гостиницу по пути следования, а место, где водитель может и сам переночевать, и рефрижератор на 86 "кубов" припарковать.
С точки зрения разработки этот проект интересен тем, что его целиком проектировали и реализовывали молодые специалисты, а ведущие специалисты только консультировали и проводили ревью.
Команда бакэнда вела разработку в соответствии с Эргономичным подходом, и результатом стала следующая обратная связь от руководителя проекта:
К бэку у меня вообще претензий нет. Он просто работает.
Проект Л
Проект Л — это первый проект, в котором бакэнд был выполнен целиком по одной из ранних версий ЭП. Это проект по проверке бизнес-гипотезы об эффективности новой механики представления результатов онлайн-лотереи.
Отзыв руководителя проекта:
Алексей - один из лучших разработчиков, с которыми я работал. Работой с ним я удовлетворён на 10 баллов из 10, потому что он практически всегда попадает в озвученные сроки, и в работе с ним не приходится накидывать 50% на всякий пожарный.
Реинжиниринг модуля маршрутизации клиентских обращений в Threads
Threads (теперь Чат-центр edna) - комплексное решение для организации взаимодействия с клиентами в чатах и мессенджерах. Этот проект послужил первой площадкой для апробирования идей ЭП.
При внедрении Threads у одного из стратегически важных заказчиков вскрылась проблема с производительностью в модуле маршрутизации клиентских обращений. В силу специфики работы контакт-центра заказчика у него скапливалась большая очередь чатов для маршрутизации, в результате чего конечные пользователи ожидали ответа оператора более минуты, а операторы при этом простаивали.
Накопившийся за годы работы техдолг не позволял устранить проблему малой кровью, поэтому было решено провести полный реинжиниринг модуля. Реинжиниринг модуля проводился в соответствии с принципами ЭП, что позволило увеличить его пропускную способность в триста раз, решить проблему клиента и сохранить его для компании.
Отзыв CTO компании-разработчика Threads, по результатам реинжиниринга:
Большое спасибо за решение задачи улучшения производительности модуля маршрутизации клиентских обращений. Алексей проявил себя крайне профессионально, разобравшись в специфике проблемы, придумав подходы к улучшению за счёт реинжиниринга модуля, и доказав нагрузочным тестированием, что его гипотезы и технические решения - верны.
Обучающие материалы
- Декомозиция на базе эффектов
- Принципы пакетирования кодовой базы
- Функциональная архитектура
- Принципы написания тестов
- xUnit Test Patterns: Refactoring Test Code.
Об авторе
Меня зовут Алексей Жидков. Я занимаюсь коммерческой разработкой ПО с 2005 года и преподаю на ФИТ НГУ и ВКИ НГУ с 2007 года.
За это время я был разработчиком или техлидом/архитектором 30 проектов для различных отраслей - от встроенного ПО для приставок кабельного телевидения и систем промышленного видеонаблюдения до АИИС КУЭ для ПАО "Транснефть" и проекта по анализу больших данных в финтехе.
Моя практика за эти годы показала, что процесс разработки в нашей индустрии всё ещё больше похож на плохо предсказуемую смесь ремесла и искусства, чем на систематизированную инженерную деятельность. Это зачастую приводит к чрезмерной стоимости проекта, обусловленной серьёзными ошибками в дизайне, реализации и тестировании.
Я разработал Эргономичный подход для того, чтобы систематизировать процесс работы своих команд и обеспечить стабильно высокое качество и скорость решения задач клиентов.
Если у вас появились вопросы по Эргономичному подходу - буду рад ответить на них:
- Email: me@azhidkov.pro
- Telegram: d-r-q