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

Евгений Зайферт: почему большие задачи пугают
Большая задача пугает не объёмом, а неопределённостью. Когда непонятно, с чего начать, сколько это займёт и что может пойти не так, хочется отложить её или, наоборот, броситься делать всё сразу. Оба варианта обычно заканчиваются плохо.
Совет, который Евгений дал бы себе в начале пути, — меньше пытаться выучить «всё сразу». С задачами так же: не пытайтесь сделать всё сразу.
Шаг 1. Сформулируйте результат
Прежде чем делить задачу, опишите, что должно получиться в конце, и какие есть условия. В случае с миграцией это звучало так: сервисы работают на новой архитектуре, а пользователи не замечают переезда.
Чёткий результат помогает потом проверить, закончена ли задача, и не уйти в сторону.
Шаг 2. Найдите естественные границы
Почти любую большую задачу можно разделить по естественным границам: по модулям, по сервисам, по группам пользователей, по типам данных. Хороший этап:
- даёт проверяемый результат;
- может быть сделан отдельно от остальных;
- не ломает систему, если на нём остановиться.
Если этап не проходит хотя бы одну из этих проверок, его стоит разделить ещё.
Шаг 3. Определите порядок
Некоторые этапы зависят друг от друга, другие можно делать параллельно. Начинайте с того, что даст больше всего информации при наименьшем риске. Часто это небольшой и наименее критичный кусок: на нём видно, как поведёт себя система, и выявляются проблемы, о которых вы не подумали.
Шаг 4. Согласуйте план с командой
Евгений согласовал план миграции с командой до начала работы. Это не формальность: коллеги видят то, что вы могли упустить, и заранее понимают, что и когда будет меняться.
По словам Евгения, код — лишь часть работы программиста. Остальное — коммуникация и инженерные решения. Обсуждение плана — как раз такая работа.
Шаг 5. Двигайтесь постепенно и следите за результатом
Во время миграции нагрузку переносили не одним переключением, а постепенно, следя за метриками. Если что-то шло не так, это было видно сразу, и проблема затрагивала только небольшую часть системы.
В любой задаче полезно заранее решить, по каким признакам вы поймёте, что этап прошёл успешно, и что будете делать, если нет.
Шаг 6. Документируйте по ходу
Миграция закончилась не только без заметных сбоев, но и с понятной документацией. Записывайте, что сделано, какие решения приняты и почему. Это помогает вам самим, если работа растягивается на недели, и тем, кто будет работать с системой после вас.

Коротко
- сформулируйте результат и условия
- делите по естественным границам
- каждый этап должен давать проверяемый результат
- начинайте с наименее рискованного
- согласуйте план с командой
- двигайтесь постепенно и следите за метриками
- документируйте по ходу
Большая задача — это просто много маленьких. Главное — увидеть, где проходят границы между ними.


Обсуждение статьи