Найти тему

Качество кода: Сверху или снизу?

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

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

Что относится к таким характеристикам? Пожалуй базовая концепция, это программирование с явно выделенным состоянием. То есть все что мы делаем, делается в рамках процессов, явно описанных конечными автоматами, в идеале с помощью спец библиотек https://github.com/aasm/aasm. У ребят этого действительно не было и когда ребята смоделировали происходящее в виде автомата нарисовав диаграммы состояний и переходов, они сразу увидели сложные процессы и точки, которые вызывают проблемы в коде. Причем когда мы немного рефлексировали на эту тему, они сказали что такой взгляд на код, помог им лучше понять происходящее и те пути, которые могут привести к улучшению системы.

После этого я немного поразмышлял над тем, как все это можно объяснить. Почему нужно идти с этой позиции и как это можно объяснять другим. В результате мне в голову пришла такая аналогия. Грубо говоря разделение по слоям, это уровень выполнения сложных технических элементов в любом виде спорта, например троюков на велосипеде. В свою очередь грамотное создание функций, организаций объектов, работа с состоянием, автоматами, это базовая техника, без которой не получится делать что-то сложное. То есть нельзя всего этого не уметь классно делать, но при этом быть способным отлично раскладывать систему на слои и/или сервисы.
1 минута