Короткий ответ
#Система
Slotwise позволяет клиникам публиковать свободное время приёма, а пациентам записываться и платить. Его за три года построила команда из двух человек: веб-приложение, обработчик очереди, который отправляет подтверждения и напоминания, и планировщик, который каждую ночь закрывает неоплаченные записи. Владелец продаёт продукт и код не читает. Первый ведущий разработчик уходит в следующем квартале.
#Что показывает первый анализ
| Компонент | Для чего он | С чем связан |
|---|---|---|
| Веб-приложение | Кабинет клиники, публичные страницы записи, шаг оплаты | База данных, кэш, платёжный провайдер, очередь |
| Обработчик очереди | Письма с подтверждениями и напоминаниями, обновление календарей | Очередь, почтовый провайдер, провайдер календарей |
| Ночной планировщик | Закрывает неоплаченные записи, пишет выгрузку CSV для одной группы клиник | База данных, файловое хранилище |
| Платёжный вебхук | Принимает платёжные события и отмечает записи оплаченными | Платёжный провайдер, база данных |
| База данных | Клиники, время приёма, записи, пациенты | Веб-приложение, обработчик, планировщик |
| Кэш и хранилище очереди | Сессии, кэшированные страницы, очередь задач | Веб-приложение, обработчик |
| Файловое хранилище | Загруженные логотипы клиник, ночная выгрузка | Веб-приложение, планировщик |
По краю карты видны пять внешних сервисов: платёжный провайдер, почтовый провайдер, провайдер календарей, сервис отслеживания ошибок и сервис аналитики. Последние два кто-то когда-то подключил, и их нет ни в одном списке, который видел владелец.
#Три утверждения и их доказательства
- Запись отмечается оплаченной только платёжным вебхуком. Наблюдалось в обработчике вебхука и в модели записи, где больше никакой код не ставит признак оплаты.
- Адреса почты пациентов уходят почтовому провайдеру и сервису аналитики. Для почтового провайдера наблюдалось в коде уведомлений. Для аналитики наблюдалось в коде отслеживания на странице записи, который передаёт адрес как идентификатор пользователя.
- Неоплаченные записи закрываются через тридцать минут. Заявлено в комментарии и в README. В планировщике наблюдались двадцать четыре часа. Два источника расходятся, и картина так и говорит, а не выбирает один.
Второе утверждение относится к тем, о которых владелец не знал, что надо спросить, а знать их нужно до того, как придёт вопрос о приватности. Третье относится к тем, что видны только тогда, когда заявленное и наблюдаемое записываются отдельно.
#Что не удалось установить
- Пользуется ли ещё какая-нибудь клиника провайдером календарей или он только настроен.
- Кому принадлежит аккаунт в сервисе отслеживания ошибок и куда уходят его оповещения.
- Что группа клиник делает с ночной выгрузкой CSV.
- Сколько хранятся данные пациентов после ухода клиники.
Ни на один из этих вопросов код не отвечает. Каждый попадает в список с причиной, по которой он открыт, а два из них, аккаунт сервиса ошибок и срок хранения данных пациентов, нужно задать уходящему разработчику, пока есть кому их задать.
#Второй анализ
- Изменилось в системе. Платёжный вебхук переехал на адрес с версией. Старый адрес всё ещё отвечает, и платёжный провайдер всё ещё настроен присылать события на него.
- Узнали, но не изменилось. Обработчик повторяет неудачное напоминание три раза, а логотипы уменьшаются при загрузке. И то и другое было верно и месяц назад, просто не было записано.
- Не объявлено исчезнувшим. Второй анализ не упоминает ночную выгрузку CSV. Но он и не проверял планировщик повторно, поэтому выгрузка становится вопросом, а не удалением.
- Больше не подтверждено. Утверждение, что напоминания уходят за день до приёма, опиралось на настройку в веб-приложении, которую второй анализ больше не находит. Откуда теперь берётся значение, не установлено, поэтому утверждение помечено как больше не подтверждённое, с датой последнего подтверждения.
#Что с этим делает владелец
Три вещи, и ни одна не требует читать код. Владелец несёт сводку на получасовой созвон с разработчиком, и первым пунктом идёт переехавший вебхук и старый адрес, на который всё ещё шлёт провайдер. Он задаёт два вопроса, на которые может ответить только уходящий разработчик, и ответы записываются туда, где их найдёт следующий анализ. И он добавляет строку в уведомление о приватности, потому что адреса пациентов уходят в сервис аналитики, о чём неделю назад он не знал.