Само устройство
Управляет тремя радиомодулями, кнопкой, светом и вибрацией, поиском сигналов, питанием, сном и сохранением настроек.
Со стороны это небольшое устройство с кнопкой и управлением с телефона. Внутри — два микроконтроллера, три радиомодуля и несколько самостоятельных программ, которые должны работать как единое изделие.
Проект вырос из более раннего устройства, работавшего в другом радиодиапазоне. Идеи и части старого кода переносились в новую версию, потом появился второй режим, а позднее сменилась и сама управляющая платформа.
Вместе с полезными решениями новый проект унаследовал настройки неизвестного происхождения, короткие защитные задержки из ранних опытов и фрагменты архитектуры, которая создавалась для гораздо более простой задачи.
На этом этапе устройство уже можно было показать, но оно ещё не было продуктом.
Простого переключения стало недостаточно: потребовались точные правила работы и защиты от конфликтов.
Старый код нельзя было просто выбросить. Сначала нужно было понять, какое физическое поведение он случайно сохраняет.
Появились питание от батареи, кнопка, индикация, память, обновления, восстановление и удобное управление.
Первая честная точка остановки: как только основная функция и два режима заработали, прототип уже можно было объявить готовым. Обычный бизнес нередко останавливается именно здесь, потому что цена следующего шага пока не видна.
Не одну «прошивку», а пять связанных частей. Четыре основные входят в оценку 53–54 тысячи строк собственного кода. Производственный пульт считается отдельно.
Управляет тремя радиомодулями, кнопкой, светом и вибрацией, поиском сигналов, питанием, сном и сохранением настроек.
Отвечает за Wi-Fi, веб-интерфейс, обмен данными, обновления и восстановление после неудачной загрузки.
Готовит и проверяет полный пакет параметров, сохраняет его и безопасно загружает в устройство.
Устанавливает программы, запускает сценарии, управляет внешними приборами, собирает измерения и возвращает систему в исходное состояние.
Отдельный инструмент примерно на 3,3 тысячи строк. Он помогает подготовить новое изделие без большой лаборатории: установить обе программы, загрузить настройки и провести полный производственный цикл.
Испытательный стенд не стоял в углу готовым. Его придумали, физически собрали, соединили с устройством и измерительными приборами, а затем несколько раз переписали. Сначала он увеличил стоимость проекта, и только потом начал экономить время.
Ручная проверка не всегда отвечает на главный вопрос. Действие могло выполниться, а ответ в браузер потеряться. Внешний считыватель мог ошибиться. Измерительный прибор мог быть занят. Антенна могла лежать неудачно. Наконец, программа могла показывать нормальную работу, когда настоящий радиосигнал уже испорчен.
Поэтому лаборатория научилась сама устанавливать программы, нажимать физическую кнопку, запускать внешние устройства, записывать электрические команды и наблюдать реальный радиоэфир. Один полный цикл проверки сократился с десятков минут до нескольких.
Старый код нельзя безопасно «почистить на глаз». Ненужная на вид строка может случайно удерживать правильное поведение реального радиочипа. Поэтому каждое крупное упрощение проходило один путь: понять смысл, описать новое правило, изменить код, проверить на плате и сравнить с заведомо рабочей версией.
Большая часть этой работы не видна в финальном проекте. Её результатом часто становился не новый код, а доказанно удалённый старый.
Столько строк осталось в модуле поиска сигналов после переработки. Объём уменьшился примерно на 79%, а нужное поведение сохранилось.
Устаревшую диагностическую оболочку удалили, отдельно сохранив действительно полезную функцию.
Исторические версии редактора настроек вынесли из рабочего каталога в архив.
Одну часть переписали с нуля, проверили на 20 наборах настроек и 12 физических записях. Позже эксперимент всё равно отбросили и вернули проверенную основу.
Удалённый код тоже стоит денег. Финальная папка не хранит все неудачные гипотезы, временные инструменты и переписанные версии. Но чтобы уверенно выбросить старую систему, иногда требуется больше работы, чем чтобы оставить её как есть.
После первой демонстрации появились задачи, которые пользователь почти не замечает, пока они работают правильно: три радиомодуля вместо одного простого режима, поиск сигналов, жесты кнопки, индикация, безопасный сон и пробуждение, сохранение настроек, обновление через Wi-Fi и восстановление после ошибки.
Устройство включается и выполняет основную функцию.
Функции повторяются, режимы переключаются, настройки загружаются, ошибки хотя бы воспроизводимы.
Проверены используемый режим сна STOP0, питание, память, обновление, нестандартные настройки и восстановление.
Есть повторяемые проверки, сохранённые рабочие версии, измерения, документы и честно указанные границы знания.
Первый уровень достигается сравнительно быстро. Большая часть скрытой работы пришлась на переход к последнему: результат не должен зависеть от одного экземпляра, положения антенны, случайно удачного запуска или старой программы неизвестного происхождения.
Радиомодуль иногда переставал подтверждать готовность. Для такого случая сделали ограниченное автоматическое восстановление. В одном испытании устройство пережило 47 восстановлений за 30 секунд внешнего воздействия и продолжило работу. Финальная версия отдельно прошла ещё один прогон с 16 восстановлениями за 18 секунд.
В другом случае модуль принимал команды и выглядел исправным, но форма настоящего радиосигнала уже была неправильной. Автовосстановление первого сбоя этот дефект не обнаруживало. Увидеть его можно было только отдельным радиоприёмным прибором.
В повторных проверках проблема проявлялась около 868 МГц и не проявлялась около 910 МГц. Это важное наблюдение, но не доказательство причины: условия двух серий нельзя считать полностью одинаковыми. Опыт со сниженной мощностью тоже был лишь исторической проверкой, а не найденным объяснением дефекта; в текущей версии вернулись к прежнему уровню мощности.
Ниже не список ошибок и не упрёк «обычной команде». Это реальные моменты, когда уже существовал защищаемый результат и продолжение можно было рационально остановить ради срока или бюджета.
Можно было оставить его лабораторным образцом и не превращать в самостоятельное изделие.
Можно было прекратить улучшать скорость обнаружения и устойчивость к сложному эфиру.
Можно было сохранить старую архитектуру, не распутывая накопленные зависимости.
Можно было не сводить данные всех частей к одному понятному и безопасному состоянию.
Рабочую версию уже можно было сохранить, передать и закрыть дальнейшие исследования.
Для коммерческого результата часто достаточно устранить последствия, не продолжая дорогой поиск физической причины.
Именно здесь дальнейшее исследование окончательно вышло за границу очевидной экономической выгоды.
Формулировал гипотезы, переделывал подключения, выбирал геометрию опыта, проверял платы, наблюдал радиоэфир и решал, какой компромисс допустим для продукта.
Сопоставляли большие объёмы кода и документов, запускали серии проверок, собирали результаты, помогали сохранять контекст и превращать найденный дефект в воспроизводимый тест.
Без человека автоматизация не знает, чему верить и какой опыт поставить. Без автоматизации человек тратит часы на одни и те же операции и гораздо легче пропускает редкий сбой. Результат дала именно связка.
Это не табель рабочего времени и не попытка оценить проект по количеству строк. Диапазон 25–40 человеко-месяцев получен разложением всего пути на крупные виды работ.
Человеко-месяц — объём работы одного специалиста за полный месяц. Его нельзя просто разделить на число людей: аппаратные опыты, интеграция и приёмка часто идут последовательно и используют один и тот же стенд или экземпляр устройства.
По данным Хабр Карьеры, медианная зарплата в российском IT в конце 2025 года составляла около 183 тысяч рублей на руки. Это общая медиана по 52 123 анкетам, а не цена нужной нам команды.
Отдельное исследование по грейдам на меньшей выборке из 660 записей показывает ориентиры около 370–380 тысяч для сильного старшего специалиста и 540–570 тысяч для технического руководителя. Маленькая выборка означает, что это ориентир, а не точный тариф.
Диапазон 0,5–0,8 млн рублей — уже моя оценка, а не число из исследований. Кроме зарплаты сюда входят налоги, рабочее место, приборы и инфраструктура, управление, простои между зависимыми этапами и риск исследовательской работы. Умножение на 25–40 человеко-месяцев даёт 12,5–32 млн рублей; округлённые 15–30 млн показывают порядок суммы, а не смету до рубля.
Главная экономия была не в том, что кто-то быстрее печатает код. Испытательный цикл стал занимать минуты вместо десятков минут; редкие проблемы можно было ловить сериями повторов; изменения сразу сопоставлялись с документацией и соседними частями системы; рабочие версии, измерения и выводы не терялись между этапами.
По наблюдаемой скорости таких циклов механическая работа на стенде ускорялась примерно в 10–30 раз, чтение и сопоставление больших участков кода — в 5–10 раз, а весь проект с учётом неизбежной ручной работы — ориентировочно в 4–7 раз.
Факты: состав системы, объём собственных файлов, датированные контрольные точки, архивы, результаты конкретных испытаний и сохранённые рабочие версии.
Инженерная оценка: человеко-месяцы по направлениям, полная стоимость специалиста для компании, стоимость внешнего контракта и коэффициенты ускорения.
Важные границы: 15-часовая проверка сна показала отсутствие заметного падения напряжения батареи с точностью отображения 0,001 В, но не была точным измерением тока. Успешные проверки около 910 МГц не доказывают причину сбоев около 868 МГц. Исторический опыт со снижением мощности не является текущей настройкой продукта.