Хабр, привет!
Хочу написать небольшую серию постов о том, как я автоматизировала или ставила на конвейер какие‑то процессы, с разной степенью успешности, из личного и рабочего опыта.
Ну, люблю я автоматизировать все, что движется, а все что не движется — двигать и автоматизировать. Так что таблицы, трекеры и скрипты (небольшой код) я делаю далеко не только для рабочих задач.
Я работала в нескольких высоко‑технологичных компаниях и командах, и далеко не все из моих коллег имели стремление хотя бы попробовать что‑то из рутины перевести в автоматический или полуавтоматический режим.
Кейс №1 — Мой очень старый пример из 2021 года
Я пыталась автоматизировать процесс выгрузки и передачи отчетности.
Не поймите меня не правильно, я люблю людей, и своих коллег тоже (да, они тоже люди). Но когда им резко что‑то надо именно сейчас (ad‑hoc), и таких нуждающихся 30 человек‑ то я люблю их чуть меньше.
Проблема: ограниченность времени и рабочего ресурса
На одной из прошлых работ, где в моем отделе нас аналитиков было всего 2 (AdTech), а потребность в отчетах росла с кол‑вом запущенных рекламных (маркетинговых) компаний и привлеченных клиентов. Каждый месяц ( и/или неделю) вынь да положь всем картинки, отчетность, метрики и предсказания на 100 лет вперед и назад ( или хотя бы месяц) и не только. Компаний, для которых мы это делали было много, очень много, разных размеров и категорий. И как по часам в ПН N‑го числа, все с утра приходили к нам и, как чайки, «дай‑дай» отчет (да, это тоже часть их работы).
Я думала‑думала как бы так разгрузить этот злосчастный понедельник, что бы и волки сыты и овцы целы. Ведь другие задачи, никто не отменял, они могут быть и важными, и срочными в том числе.
Для начала поймем, что за процесс и какие в нем этапы:
Что, когда, для кого была проведена маркетинговая компания — именно эти данные падают в отчет. По ним считаются метрики и строятся графики. Особенно это важно, если компания как организация (клиент) одна, а вот реклам она запускала несколько разных, в разный период или на разную длительность (по типу рекламы тоже отличаются: есть для узнаваемости бренда, есть для конверсии и тд).
Сбор данных и хранение всего в БД.
Отчет должен появляться на столе у каждого аккаунт‑менеджера в ПН и желательно утром для каждой проведенной (запущенной) рекламе отдельно. ( далее компания будет означать рекламную компанию, а клиент — компанию как организацию)
Аккаунт менеджер «окает» на отчет и рассылает этот отчет своим клиентам
Весь этот процесс занимал в лучшем случае 2–3 часа, в худшем сутки.
Я начала с конца, так как я не хотела, что бы мне начинали писать в 8 утра, а в 11 уже ругались, что отчеты еще не готовы, надо как‑то их готовить заранее, либо ограничить само общение без ущерба продуктивности.
Попытка №1
Например, я пробовала готовить отчеты в ВС вечером накануне.
Но тут сразу 2 минуса: работа в ВС, и то что клиент хочет видеть полный период отчетности (вдруг кто‑то купит телевизор за миллион рублей в 23–30 ВС, а мы не отобразим это в отчете), и даже дельта в 1 день не приемлема.
Попытка №2
Тогда, надо настроить коммуникацию внутри команды, так что бы все работало без пинков. Ну, для начала я решила организовать нам совместное хранилище на (кажется) SharePoint (в целом механика работы с облачными хранилищами везде +/‑ одинаковая).
Там создались папки в отдельности на каждую компанию — внутри папки по годам и месяцам — иерархичные каталоги.
Сейчас бы..
Сейчас, в эти джунгли из папок, я бы добавила еще папку «архив»,куда бы отправляла все устаревшие отчеты с заданной периодичностью.
Раздала я доступы сотрудникам (можно конкретному аккаунт‑менеджеру к папке компании, можно просто всем), доступ к папке с отчетом внешним клиентам выдавался строго регламентированно.
Сейчас бы..
Сейчас, я бы еще добавила скрипт на любом языке, который запускался бы оркестратором (даг на аирфлоу или даже внутренняя программа‑планировщик на рабочей машине — тоже запускается автоматически по расписанию) — что бы присылать отбивку на почту аккаунт‑менеджеру и представителю компании.
Даже после этого шага, стало сильно проще, когда коллеги привыкли, что теперь все хранится и появляется в одном месте. Но скорость появления отчетов это не увеличило. И если коллеги не писали мне в 8 утра, то писали в 12 с вопросом «когда уже будет, скоро?»
А тут, в чем собственно была проблема: БД создавала и поддерживала не я, да и скрипты, которые собирали данные писала не я, это наш легаси код, я пыталась сделать ему искусственное дыхание и оживить. К тому же, формат отчета — был зарегламентирован, так что сильно не разгуляешься.
Актуальные проблемы:
То как собирался отчет требовало личного контроля (вставлять название компании, проверь, что она еще с нами сотрудничает, указывать период и многое другое).
Скорость обращения к БД и получения данных.
И это были отчеты, где данные только собирались и агрегировались — никаких ML моделей, или посидеть‑подумать как посчитать бенчмарки. Только рукопашка.
Трогать саму БД я не рискнула, да и мне никто бы не позволил, так что оставалось работать только с нашим внутренним скриптом.
Попытка №3
Почесала я затылок и предложила вот что, а давай мы будем перед началом скрипта всегда обновлять список текущих активных клиентов, их проведенных компаний, и запускать для каждого скрипт по сбору отчетности, максимально формализуем вариативную часть, пропишем правила (практически if else).
То есть, я хотела свести наше вмешательство в работу, уже запущенной программы, к минимуму. Что смогли — сделали. Стало еще лучше, но не достаточно хорошо, к сожалению, для правильной отчетности нужно было работать с большим кол‑вом переменных, которые. Не совсем или совсем не поддавались формализации. Так что случались исключения из наших правил, а соответственно и ошибки. А скрипт был один (шаблонный), и при 1-й же ошибке все упадало, а отчеты переставали формироваться.
Пока мы в режиме мультизадачности ее (ошибку) заметим — пройдет какое‑то время, а значит, мы опять получим десяток » а когда отчет?».
Попытка №4
«Давай игнорировать ошибки» — бодро предложила я, и моя коллега меня поддержала.
В итоге, мы нашли како‑то плагин для юпитер ноутбук, который не позволял работе скрипта остановится, даже если он наткнулся на ошибку — ведь у нас отдельные независимые блоки. И потом мы просматривали, какие отчеты выгрузились, а какие нет.
Создали отдельные скрипты под функционально независимые элементы, которые вызывались по условиям в главном скрипте, для более прозрачного дебага и формирования ruled‑based подхода.
Сейчас бы..
Сейчас, я бы формировала дополнительный текстовый файлик — где просто печатала бы список выгруженных отчетов и того, где встретилась ошибка. Можно его складывать на шарик или присылать на почту аналитикам
В тот момент я с аирфлоу была не знакома, а коллега мне ничего не подсказала. И мы автоматизацию запуска наладили как‑то криво, а может и не наладили, я уже и не помню.
Да, и хотя нельзя назвать это полной автоматизацией, КПД по сохраненному времени и нервам был приличным (с нашей стороны, и со стороны аккаунт‑менеджеров, и со стороны клиентов).
Мои общие выводы и личные лайфхаки:
Если что‑то повторяется больше 3-ех раз и имеет тенденцию продолжаться (даже с изменениями или корректировками), то самое время задуматься о каких‑то костылях‑помощниках.
Если что‑то заняло больше 2-ух часов и не является сугубо интеллектуально‑созидательной работой — тоже можно подумать. Из практики, если что‑то случилось единожды скорее всего произойдет и второй раз.
Я люблю информирование, многих, конечно, бесят потоки автоматически отправляемых писем — мне они помогают отслеживать процесс и собирать обратную связь.
Как часть само‑иронии прикреплю эту картинку.
В следующем посте расскажу, уже с примерами кода (надеюсь):
Как мы делали автопроверку домашек.
Заставляли менеджеров считать циферки и вписывать их в табличку.
Может быть еще что-то вспомню