К пятому дню я забыл половину, куда откликнулся, и поймал себя на том, что трижды отправляю резюме в одну и ту же компанию. Хаос в почте отражал хаос в голове. Не помогло бы «просто быть внимательнее» — помогла таблица. Завёл обычный CSV и выдохнул: во всём, что можно посчитать, уже меньше паники.

Колонки: дата, компания, вакансия, стек, статус, заметка. Статусы простые: отправлено → отвечено → тестовое/интервью → отказ или тишина.

Нейтрально: разбор становится управляемым, когда из неструктурированного потока делаешь данные. Плюс такое «низкое» действие можно прогнать через код и смотреть статистику одной строкой.

import csv
from collections import Counter

with open("otkliki.csv") as f:
    rows = list(csv.DictReader(f))

print(Counter(r["status"] for r in rows))   # {отправлено: 12, отвечено: 1}

stale = [r for r in rows if r["status"] == "отправлено"]
print("без ответа:", len(stale))

Вечером из таблицы стало видно то, что голова прятала: живой ответ был один, почти все остальные — в «отправлено без ответа». Это не приговор, это поле для улучшения: менять первый абзац письма и смотреть, меняется ли число «отвечено». Поиск — это тот же код: мерить, менять, смотреть.