Я долго размышлял на данную тему и наконец решил изложить.
Вся эта история с оценкой кода по количеству написанных строк или другие попытки оценить объем работы мне всегда не давали покоя.
Сейчас я не пишу код в промышленных масштабах, разве что для себя какой-то мелкий инструмент. Но когда-то я писал много и занимался этим больше 15 лет.
Придешь утром в офис и начинаешь что-то писать, сохраняясь в промежутках, конечно же. А вечером мне нравилось иногда нажать ctrl+z и смотреть в ускоренном темпе, пусть и в обратном порядке, как бегал курсор, как выделялись, появлялись и исчезали какие-то блоки кода. Сначала условие и цикл появились в одном месте, потом кусок кода из цикла перешел в процедуру, цикл вообще исчез и т.д. Это завораживающий танец курсора и текста под ним.

К концу дня новая лаконичная процедура, пара вставок в существующие блоки. В общей сложности 50-80 строк кода. Часто приходилось дорабатывать легаси, где нужно аккуратно внедрить свои вставки в разных местах, ничего не сломав.
И я задавал себе вопрос: а кто видел все эти мои поиски и скитания? Для внешнего наблюдателя видно только сколько строк было утром и сколько их стало вечером. Но это вообще не то. Эти 80 строк даже не намекают на то, чем я занимался целый день. Уверен, вы понимаете, о чем речь.
Сейчас, в эпоху тотальной увлеченности ИИ, меня не покидает мыс��ь, что неплохо бы весь этот когнитивный процесс легализовать.
Здесь не будет инструкций как я это сделал. Здесь будет просто рассуждение вокруг да около.
Телеметрия
На сайтах давно применяются механизмы отслеживания поведения пользователя. Куда он нажал, сколько был на странице, насколько глубоко скролил и т.д.
Почему в разработке такого нет? Переходы между модулями, наведение курсора на какие-то методы для просмотра подсказок, переход по зависимостям, поиск и прочее. Набрать текст, выделить, удалить, переместить, подключить библиотеку, поправить конфиг, запустить.
Внесение изменений, компиляция, тестовый запуск, повторное изменение с последующей компиляцией. Пошаговая отладка с заходом. Это же масса времени и когнитивной работы.
Или отладка SQL запроса. Вы же знаете, как это бывает, когда можно неделю отлаживать тяжелый запрос. Смотреть планы, замерять I/O-статистику, добавлять индексы. Выдергивать куски вложенных запросов и отлаживать их отдельно, а затем вставлять в общий запрос. Кто это видит? Никто. Только вы.
В конце недели ваш комит выглядит как 3 короткие, но идеальные правки в запросе. Чем ты занимался всю неделю? Добавил эти три строки? Иногда самому становится не по себе от осознания того, как результат твоей работы выглядит для стороннего наблюдателя.
Все привыкли оценивать результат, но в разработке, как и в науке, 90% времени — это постановка эксперимента и поиск ошибки. Инструменты оценки за это не заточены. Они заточены на результат, будто вы копаете яму отсюда и до обеда.
Никто не оценит все ваши страдания, пробы и ошибки, но именно в них рождается результат.
А вот если бы телеметрия собирала все ваши действия в лог, а потом построить на этом граф или этот ваш ИИ бы оценил, насколько это непросто. Для бизнеса ваша работа стала бы прозрачной и доказуемой.
Парадокс мастерства
Есть байка про Пикассо, когда его попросили нарисовать на салфетке набросок. Он сделал это за пару минут. А на вопрос, сколько ему за это должны, назвал огромную сумму. Это возмутило заказчика, ведь как можно требовать такую сумму всего 2 минуты. На что художник ответил, что потратил на это не 2 минуты, а всю жизнь.
Разве эта байка не перекликается с разработчиками, которые тратят массу времени на невидимую работу, а затем пытаются доказать заказчику, что это не просто 2 строчки кода?
А что, если попробовать?
Можно собрать тысячи честных логов процесса разработки и процесса имитации, а затем обучить на этом модель, чтобы выделить паттерны. Такие сырые логи, конечно же, не годятся для обучения модели, но из них можно построить тепловую карту и/или граф активности. На графе будет видно "пульс" процесса. Кто-то делает это быстрее, а кто-то медленнее, но процесс будет примерно одинаковый. Ваша работа станет доказуемой. Разумеется, собирать нужно всё — не только IDE, но и окружение.
Это должна быть внешняя утилита, которая просто ведет лог работы. В настройках пользователь сам задает что именно собирать и из каких приложений. Фильтры заголовков с регулярками, типы объектов и вот это вот все. Тогда будет видно, что вы после отладчика перешли в какой-то SQL редактор (SSMS/PLSQL) или postman, долго его мучили, а оттуд�� на stackoverflow и крутили там десятки страниц.
Законная лень или как мы на самом деле ищем решения
Всем известно, что человек не может писать код с 9 до 18, особенно, если требуется поиск решения, а не просто набор текста стандартных алгоритмов. Бывает, что мысль не идет. Можно сколько угодно себя заставлять писать — толку не будет. Либо такого понапишешь, что потом не разобрать. Решение крутится где-то на языке. Вы чувствуете, что оно есть и оно достаточно простое, но ясная картинка не складывается. Вы уже перепробовали десятки вариантов, а каменный цветок не выходит. Нужно отвлечься — почитать анекдоты/новости, посмотреть котиков, чтобы произошла дефрагментация мысли. Это инкубация, которая может длиться от нескольких часов до нескольких дней. В какой-то момент происходит вспышка — решение сложилось. Вы открываете свой код, смотрите, что вы там понаписали, и думаете: боже, что это?! Удалить! И пишете за 5 минут сразу работающий блок, который раньше не взлетал несколько дней. И это чувство неловкости перед самим собой: я потратил столько времени, а если спросят, то и показать как бы нечего. Это когнитивный диссонанс. Мы привыкли измерять объемами. Если это что-то стоящее, то его должно быть много, не так ли?
Как объяснить бизнесу, почему вы одну из двух недель потратили на видосики?
Такой период, как инкуба��ия-инсайт, будет виден на тепловой карте, потому что ему предшествовал процесс интенсивного перебора вариантов, когда вы переписывали один и тот же кусок еще и еще, затем пауза в IDE, котики в браузере и короткое финальное решение.
Может возникнуть вопрос приватности. Но ведь человек сам может выбирать, что логировать, а что нет, и это в его интересах, а главное — логи не обязательно должны содержать тексты, они могут содержать только маркеры, на основе которых можно строить тепловые карты. Здесь не имеет значения, что именно написано и какого качества это было на этапе поиска решения, намного важнее число попыток и количество вариантов, ибо именно сюда и ушло все время.
Эффективные менеджеры могут попытаться использовать это против вас. Ведь Петя продолжал жрать кактус и таки выдал какое-то чудовище, в то время, как Вася пошел смотреть котиков и вернулся с тремя строчками идеального кода. Но здесь как раз и нужна статистика по таким картам и беспристрастность ИИ. Подобно тому, как нейросеть анализирует снимки флюорограммы, когда даже опытный специалист не видит там ничего особенного, а нейронка видит маркеры.
Почему этого до сих пор нет? Ну ладно, если кто-то недобросовестный занимается очковтирательством, но большинство ведь честно выполняют свою работу и любят ее. Когда вы увлечены, вы не замечаете, как летит время. Целый день честно чем-то занимался, никаких котиков. Но вот уже коллеги начали собираться домой. Смотришь на часы, там 18:00. А где результат? Самому не понятно, куда ушло время. Такие тепловые карты вам самим помогут понять, где были моменты максимального напряжения и какой реальный интеллектуальный вклад был сделан, несмотря на то, что пощупать нечего.
Что скажете?