Как оверсинкинг и перфекционизм мешают мне заканчивать проекты

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

Рассмотрим мой недавний микропроект с ClickHouse. Задача была довольно простая—взять данные из одного места и положить в другое. Всё. Что может быть проще? После завершения PoC клиент дал добро на продакшн-реализацию и я пошёл копать.

Началось всё с базы. Я же девопс, поэтому негоже создавать ресурсы вручную. Все должно разворачиваться с помощью терраформа. В качестве managed решения для ClickHouse было выбрано облако Яндекса. В этот момент я вспомнил, что нужно делать синхронизацию через очередь, потому что может быть такое что сервер перезапустится, умрет, получит таймаут. Все должно быть надежно, поэтому давайте вначале запушим в очередь сообщение с нужным нам объектом, а воркеры будут обрабатывать эту очередь и писать данные. Если вдруг случится таймаут, то сообщение останется на месте и будет обработано позже. Никто не забыт, ничто не забыто.

Яндекс предоставляет свой SQS-совместимый сервис для очередей. Я подумал—раз мы уже делаем кусочек инфры в Яндексе, то может и очередь туда засунем? Сказано-сделано, давай изучать как сконфигурировать очередь через терраформ. Вроде там всё просто, давай делать. Но тут возникает проблема—состояние терраформа надо где-то хранить! На своих других проектах для этого я использовал S3, но тут получается как-то тупо—стейт на S3 а облако в другом месте. У Яндекса ведь есть свой S3! Может быть там развернуть? Я застрял на этой мысли. В итоге попрокрастинировав, я решил для стейта взять terraform cloud. Зарегался там, всё как положено.

Пошел писать очереди. Вроде написал вроде все ок—делаю apply—а не работает! Еще несколько часов трачу на выяснение что не так с моей конфигурацией, ищу примеры в интернете. Ничего не помогает, забиваю и ложусь спать. Перед сном приходит идея—а может ну его, очередь в яндексе? Ведь у меня в приложении уже есть обработка других вещей через AWS SQS и она отлично работает. Потом, для интеграции используется Spring Boot Cloud который позволяет сделать чтение SQS одной аннотацией. Если я хочу делать яндексовую очередь—хоть она и SQS-совместима, надо будет как-то по-другому передавать ключи. Учитывая проблемы с разворачиванием очереди на яндексе через терраформ лучше просто завести еще одну очередь на амазоне и не парить себе мозг.

Следующим утром я быстро добавил еще одну очередь, скопипастил код который делает обработку, растыкал её по нужным местам и был таков. Ах да, все же начиналось с ClickHouse. Его я без проблем развернул через терраформ.

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

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


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred