Врачей обязали ежедневно следить за показателями пациентов в приложении и вовремя корректировать лечение
В двух больницах Екатеринбурга успешно протестировали дистанционный мониторинг за состоянием пациентов, рассказала в эфире канала «ОТВ» глава Минздрава Свердловской области Татьяна Савинова(В Свердловском минздраве заявили, что дефицит кадров — не оправдание для «безобразно» организованной работы)
Теперь практику планируют масштабировать на весь регион для повышения уровня медицинского обслуживания амбулаторных пациентов.
Так, больные сахарным диабетом и артериальной гипертензией ежедневно вводят в специальное приложение показатели жизненно важных функций. Затем данные автоматически поступают врачу, после чего он может своевременно корректировать лечение и оперативно реагировать на возможное ухудшение состояния больного.
«Пациент (если он согласится таким образом обслуживаться) будет ежедневно вводить показатели сахара в крови или давления в специальном мобильном приложении. Врач, зная о выписанных препаратах и видя в своей медицинской системе информацию от пациента, может дистанционно корректировать назначения или давать необходимые рекомендации», – заявила Савинова.
"Обеспеченность медиками первичного звена в Свердловской области составляет 1,4 человека на 10 тыс. населения (при норме, например, педиатров 12,5). Такие данные приводятся в рейтинге портала «Если быть точным», опирающемся на сведения Росстата и ведомственную статистику. С 2020 года показатель обеспеченности врачами в Свердловской области еще и упал: с 1,6 до 1,4. Теперь область занимает 85 из 86 возможных мест в России по этому показателю."
Врач снова крайний?
Плановые операции: врач снова крайний?
Представьте: дежурство в обычной областной больнице. Хирург открывает новости — губернатор заявляет, что плановые операции надо делать максимум через месяц. Для онкологии обещан отдельный быстрый путь.
Звучит правильно. Пациенты радуются, руководство кивает. Но врач вспоминает: по федеральным правилам ждать плановую помощь должны ещё меньше. И на бумаге это действует уже давно.
В итоге в поле зрения пациента только одно лицо — лечащий врач. Не чиновник, не организатор, а конкретный хирург, онколог, терапевт. Именно он часами объясняет, почему операция не завтра, хотя по новостям «всё решено».
Где сегодня граница профессиональной и личной ответственности врача, если реальный поток пациентов не бьётся с красивыми сроками в постановлениях и заявлениях?
И что будет, когда первый пациент из очереди придёт не к организатору здравоохранения, а прямо в ваш кабинет с распечаткой новости и вопросом: «Доктор, а почему у меня не так?»
Оптимизация труда
Есть одна фирма, выпускает определенный продукт. Часть этого продукта - это ПО. ПО каждый раз разное, но выполняет плюс/минус одинаковую задачу.
В фирме трудится условный Петенька. Он старательный, но не очень умный. В итоге на производство ПО у него уходит около месяца, код получается кривой, отладить его может только Петенька, ибо дебри сознания.. Но фирму устраивает, т.к. потребность в этом ПО - примерно и возникает примерно раз в месяц (win-win)
Руководители фирмы решают оптимизировать процесс. И нанимают на производство ПО стороннего разработчика Васю. Вася выдает за зарплату Петеньки тоже самое ПО за 1-2 недели. И в итоге для оптимизизации своего времени (договорились же)... Пишет шаблон ПО, с которым разобраться может даже младенец, меняя человекопонятные циферки и буковки.
Производство ПО стало занимать 1-2 дня.
Руководители решают еще оптимизировать процесс, и нанимают вместо Петеньки Олежку, парня крайне смышленного, старательного, и вообще молодца. На зарплату чуть выше Петеньки он за 1-2 дня (разобравшись в коде Васи) делает ПО, и освобождается для выполнения еще 100500 сопутствующих задач. Фирма в адском выигрыше.
В итоге, что забавно на хер пошел и Петенька, и что печально Васенька.
Мораль: иногда можно и нужно изображать дикие затраты энергии, косить под Петеньку, обфурцировать код, чтобы разобраться в нём мог только ты, чтобы по прежнему быть не заменимым?
Что-то подсказывает, что рыночные отношения таковы, что рано или поздно всё равно бы нашли Васю-2, который выполнил бы эту задачу, и освободил ресурсы.
Оптимизация PostgreSQL: Как text_pattern_ops ускорил поиск по префиксу в 7000 раз
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Предисловие
В мире баз данных нет мелочей — даже незначительная настройка типа столбца или выбор операторного класса индекса может изменить производительность запросов на порядки. В этой статье - разбор реального кейса, где поиск по префиксу в таблице на 7 миллионов строк ускорился более чем в 7000 раз — не за счёт добавления ресурсов, а благодаря применению индекса text_pattern_ops и правильной работе с типами данных в PostgreSQL.
Тестовая таблица bookings
relname | n_live_tup
bookings | 7113192
demo=# \d bookings.bookings
Unlogged table "bookings.bookings"
Column | Type | Collation | Nullable | Default
--------------+--------------------------+-----------+----------+---------
book_ref | character varying(6) | | not null |
book_date | timestamp with time zone | | not null |
total_amount | numeric(10,2) | | not null |
Indexes:
"bookings_pkey" PRIMARY KEY, btree (book_ref)
"idx_bookings_book_date" btree (book_date)
Referenced by:
TABLE "tickets" CONSTRAINT "tickets_book_ref_fkey" FOREIGN KEY (book_ref) REFERENCES bookings(book_ref)
Тестовый запрос
SELECT * FROM bookings.bookings WHERE book_ref LIKE 'scenario5-TEST%';
План выполнения тестового запроса cost=1000.00..102491.48
EXPLAIN ( ANALYZE , COSTS , SETTINGS , BUFFERS , SUMMARY , MEMORY )
SELECT * FROM bookings.bookings WHERE book_ref LIKE 'scenario5-TEST%';
Gather (cost=1000.00..102491.48 rows=35566 width=42) (actual time=519.574..533.363 rows=0 loops=1)
Workers Planned: 1
Workers Launched: 1
Buffers: shared hit=45632
-> Parallel Seq Scan on bookings (cost=0.00..97934.88 rows=20921 width=42) (actual time=515.346..515.346 rows=0 loops=2)
Filter: ((book_ref)::text ~~ 'scenario5-TEST%'::text)
Rows Removed by Filter: 3556596
Buffers: shared hit=45632
Settings: jit = 'off', generic_plan_fuzz_factor = '0.9', random_page_cost = '1.1', effective_io_concurrency = '300', temp_buffers = '14MB', max_parallel_workers_per_gather = '1', max_parallel_workers = '16', effective_cache_size = '6GB'
, work_mem = '32MB', search_path = 'bookings, "$user", public'
Planning:
Buffers: shared hit=6
Memory: used=12kB allocated=24kB
Planning Time: 0.194 ms
Execution Time: 533.402 ms
(14 rows)
Необходимо оптимизировать таблицу, для ускорения запросов по условию WHERE book_ref LIKE 'XXX%';
Почему индекс не используется?
Индекс bookings_pkey — уникальный B-tree индекс по book_ref
Он идеален для точных совпадений (=) или для поиска по префиксу, если количество совпадающих строк мало.
Однако в данном случае: book_ref LIKE 'scenario5-TEST%' — это префиксный поиск.
Планировщик выбирает Seq Scan, потому что он оценивает, что 7 113 192 строк из 7 113 192 (все строки) подходят под фильтр
В выводе EXPLAIN указано: Rows Removed by Filter: 3556596
Это означает, что в таблице всего 7 113 192 строк, и все они прошли через фильтр book_ref LIKE 'scenario5-TEST%', но ни одна не удовлетворила условию — то есть в таблице нет ни одной строки, начинающейся с 'scenario5-TEST'.
То есть:
Фильтр book_ref ~~ 'scenario5-TEST%' применяется ко всем строкам.
Он отсеивает все строки (Rows Removed by Filter = 7 113 192).
Но индекс не помогает, потому что нет ни одной строки, соответствующей шаблону — и планировщик не знает этого заранее.
Ключевой момент:
Планировщик не знает, что шаблон 'scenario5-TEST%' не совпадает ни с одной строкой. Он оценивает статистику:
Если бы было 100 строк, соответствующих шаблону — индекс использовался бы.
Если бы было 1 000 000 строк — индекс мог бы использоваться, но с высокой стоимостью.
Но если все строки проходят через фильтр (и при этом ни одна не подходит), то планировщик не видит смысла использовать индекс, потому что: Индекс требует доступа к индексу, затем доступа к таблице (heap) для проверки book_ref.
При отсутствии совпадений — это двойная работа: сначала читать индекс, потом проверять каждую строку в таблице — и всё равно ничего не удалить.
Seq Scan — это просто последовательное чтение таблицы, и если все строки нужно проверить, то это оптимально.
Почему не используется индекс, даже если он есть?
Потому что PostgreSQL планировщик выбирает план с минимальной оценкой стоимости.
Для LIKE с префиксом ('prefix%') B-tree индекс может быть использован, но только если: Количество совпадающих строк мало (обычно < 5–10% от таблицы).
Или если статистика показывает, что шаблон редок.
В данном случае: Шаблон 'scenario5-TEST%' не совпадает ни с одной строкой.
Планировщик не знает этого заранее — он оценивает по статистике.
Он предполагает, что шаблон может совпадать с некоторым количеством строк, но не с большинством.
Однако, поскольку в таблице нет таких строк, и фильтр применяется ко всем, то Seq Scan оказывается дешевле, чем: Чтение индекса (чтобы найти потенциальные совпадения), затем чтение таблицы по TID (для проверки book_ref).
Индекс не помогает, потому что он не уменьшает количество строк, которые нужно проверить — их всё равно 7 млн.
Как использовать индекс? Создать функциональный индекс для LIKE-запросов
CREATE INDEX idx_bookings_book_ref_pattern ON bookings.bookings (book_ref text_pattern_ops);
Этот индекс оптимизирован для LIKE с префиксом и может быть использован даже при больших объемах, если планировщик оценит его эффективность.
1.Проверить текущую локаль:
SHOW lc_collate;
Если результат — C или POSIX, то индекс bookings_pkey уже может использоваться для LIKE 'prefix%'.
Если результат — ru_RU.UTF-8, en_US.UTF-8 и т.п. — индекс text_pattern_ops обязателен.
demo=# SHOW lc_collate;
lc_collate
------------
ru_RU.utf8
(1 row)
2.Изменить тип столбца на varchar
text_pattern_ops — операторный класс, предназначенный для text и varchar.
character(n) (или bpchar) — это фиксированная строка с пробелами-заполнителями, и не является бинарно-приводимой к text в контексте индексирования.
Поэтому PostgreSQL не позволит создать индекс с text_pattern_ops на столбце типа character(n).
book_ref | character(6)
demo=# \d bookings.bookings
Unlogged table "bookings.bookings"
Column | Type | Collation | Nullable | Default
--------------+--------------------------+-----------+----------+---------
book_ref | character(6) | | not null |
book_date | timestamp with time zone | | not null |
total_amount | numeric(10,2) | | not null |
Indexes:
"bookings_pkey" PRIMARY KEY, btree (book_ref)
"idx_bookings_book_date" btree (book_date)
Referenced by:
TABLE "tickets" CONSTRAINT "tickets_book_ref_fkey" FOREIGN KEY (book_ref) REFERENCES bookings(book_ref)
Проверка перед изменением
Убедитесь, что в столбце нет значений с завершающими пробелами (что маловероятно для book_ref):
SELECT book_ref, length(book_ref), char_length(book_ref)
FROM bookings.bookings
WHERE length(book_ref) != char_length(book_ref)
LIMIT 10;
Если запрос возвращает 0 строк — значит, все значения без лишних пробелов, и переход на varchar безопасен.
Почему это важно?
Тип character(n) (или bpchar) в PostgreSQL — это фиксированная строка, которая дополняется пробелами до указанной длины. Например:
Если book_ref имеет значение 'ABC123' и тип character(6) — хранится как 'ABC123' (без изменений).
Если book_ref имеет значение 'AB' и тип character(6) — хранится как 'AB ' (с четырьмя завершающими пробелами).
Запрос проверяет, не содержатся ли в столбце book_ref некорректные значения с завершающими пробелами, которые могут остаться после смены типа с character(n) на varchar(n).
Это критически важно для сохранения целостности данных, особенно в системах, где book_ref используется как первичный ключ или внешний ключ.
Рекомендация: Всегда выполнятm проверку перед изменением типа character(n) → varchar(n), даже если считается, что "пробелов не может быть" — в базах данных всегда НУЖНО проверять данные, а не предполагайте их корректность.
Изменить тип столбца на varchar(6);
ALTER TABLE bookings.bookings ALTER COLUMN book_ref TYPE varchar(60);
book_ref | character varying(60)
demo=# \d bookings.bookings
Unlogged table "bookings.bookings"
Column | Type | Collation | Nullable | Default
--------------+--------------------------+-----------+----------+---------
book_ref | character varying(60) | | not null |
book_date | timestamp with time zone | | not null |
total_amount | numeric(10,2) | | not null |
Indexes:
"bookings_pkey" PRIMARY KEY, btree (book_ref)
"idx_bookings_book_date" btree (book_date)
Referenced by:
TABLE "tickets" CONSTRAINT "tickets_book_ref_fkey" FOREIGN KEY (book_ref) REFERENCES bookings(book_ref)
3.Создать индекс idx_bookings_book_ref_pattern
CREATE INDEX idx_bookings_book_ref_pattern ON bookings.bookings (book_ref text_pattern_ops);
demo=# \d bookings.bookings
Unlogged table "bookings.bookings"
Column | Type | Collation | Nullable | Default
--------------+--------------------------+-----------+----------+---------
book_ref | character varying(60) | | not null |
book_date | timestamp with time zone | | not null |
total_amount | numeric(10,2) | | not null |
Indexes:
"bookings_pkey" PRIMARY KEY, btree (book_ref)
"idx_bookings_book_date" btree (book_date)
"idx_bookings_book_ref_pattern" btree (book_ref text_pattern_ops)
Referenced by:
TABLE "tickets" CONSTRAINT "tickets_book_ref_fkey" FOREIGN KEY (book_ref) REFERENCES bookings(book_ref)
4. Проверить план выполнения
cost=472.78..27152.99
EXPLAIN ( ANALYZE , COSTS , SETTINGS , BUFFERS , SUMMARY , MEMORY )
SELECT * FROM bookings.bookings WHERE book_ref LIKE 'scenario5-TEST%';
Bitmap Heap Scan on bookings (cost=472.78..27152.99 rows=35566 width=42) (actual time=0.043..0.044 rows=0 loops=1)
Filter: ((book_ref)::text ~~ 'scenario5-TEST%'::text)
Buffers: shared read=3
I/O Timings: shared read=0.021
-> Bitmap Index Scan on idx_bookings_book_ref_pattern (cost=0.00..463.89 rows=35566 width=0) (actual time=0.037..0.038 rows=0 loops=1)
Index Cond: (((book_ref)::text ~>=~ 'scenario5-TEST'::text) AND ((book_ref)::text ~<~ 'scenario5-TESU'::text))
Buffers: shared read=3
I/O Timings: shared read=0.021
Settings: jit = 'off', generic_plan_fuzz_factor = '0.9', random_page_cost = '1.1', effective_io_concurrency = '300', temp_buffers = '14MB', max_parallel_workers_per_gather = '1', max_parallel_workers = '16', effective_cache_size = '6GB'
, work_mem = '32MB', search_path = 'bookings, "$user", public'
Planning:
Buffers: shared hit=12 read=1
I/O Timings: shared read=0.027
Memory: used=16kB allocated=40kB
Planning Time: 0.301 ms
Execution Time: 0.077 ms
(15 rows)
Результат
Исходный план выполнения:
Gather (cost=1000.00..102491.48 rows=35566 width=42) (actual time=519.574..533.363 rows=0 loops=1)
Execution Time: 533.402 ms
Оптимизированный план выполнения:
Bitmap Heap Scan on bookings (cost=472.78..27152.99 rows=35566 width=42) (actual time=0.043..0.044 rows=0 loops=1)
Execution Time: 0.077 ms
Все хотят модный ИИ. Но почти никто не понимает, куда его воткнуть на производстве
Последние пару лет ИИ на производстве стал чем‑то вроде обязательного пункта повестки. Про него говорят собственники, его ждут от команд, его упоминают в стратегиях «на будущее». Часто – с молчаливым ожиданием, что ИИ сам по себе наведет порядок: ускорит процессы, сократит ручной труд, сделает бизнес более управляемым.
На практике этого почти никогда не происходит. ИИ не является универсальным решением и уж точно не становится точкой входа в изменения. Более того, если внедрять его без понимания, какие именно проблемы он должен решать, он лишь добавляет новый слой сложности.
Эта статья – о том, как на самом деле выглядит работа с ИИ на производстве. Не как модный эксперимент, а как управленческий подход. Мы разберем один реальный производственный кейс и покажем, почему ИИ начинает работать только тогда, когда перестает быть самоцелью.
Как выглядел запрос клиента
Ко мне в телеграм-канал пришел собственник крупного мебельного производства. Бизнес уже зрелый: серийный выпуск, несколько цехов, собственное конструкторское бюро, финансовый и коммерческий блоки, активные продажи через разные каналы. Производство загружено, заказов хватает, компания продолжает расти.
Разговор начался с осторожным интересом и сомнением:
«Давайте подумаем, где мы можем внедрить ИИ, чтобы он дал результат».
За этой формулировкой стояло вполне понятное состояние. С одной стороны – ощущение, что бизнес упирается в потолок эффективности. С другой – непонимание, за что именно хвататься.
На старте ни собственник, ни команда не могли четко сформулировать:
– какие конкретные проблемы должен решить ИИ;
– где компания реально теряет деньги или время;
– какие решения сейчас принимаются скорее «по опыту», чем на основе системы.
При этом внутреннее напряжение уже накапливалось. Много ручных операций. Сильная зависимость от отдельных людей и их экспертизы. Разные подразделения опираются на разные цифры. Эффект от изменений часто становится понятен слишком поздно – когда что-то исправлять уже дорого или сложно.
В такой точке ИИ выглядит почти спасением. «Он же должен уметь считать, подсказывать, автоматизировать». Именно с этим ощущением клиент и пришел.
Тогда мы предложили начать не с поиска ИИ‑инструментов, а с более приземленного вопроса: какая цифровая стратегия вообще имеет смысл для этого бизнеса, исходя из его реальных процессов и целей.
Почему нельзя начинать с ИИ
На старте кажется, что все и так понятно: где‑то много ручного труда, где‑то не хватает прозрачности, где‑то люди перегружены. Хочется сразу идти в решения.
Но в реальности у каждого блока своя картина происходящего. Производство видит одни узкие места. Финансы – другие. Коммерция – третьи. Если в этот момент начинать внедрять ИИ точечно, под запрос одного отдела, результат почти всегда получается локальным и плохо масштабируемым.
Поэтому в этом проекте мы принципиально не начинали с технологий.
Что мы сделали вместо этого
По сути, именно на этом этапе и начинает складываться цифровая стратегия – не как документ и не как план внедрения технологий, а как общее понимание того, какие изменения действительно нужны бизнесу и в каком порядке.
Первым шагом стали разговоры с руководителями всех ключевых блоков: производства, финансов, КБ, коммерции, логистики. Не презентации и не сбор идей «что можно автоматизировать», а подробный разбор реальной управленческой рутины.
Мы спрашивали:
– какие решения вы принимаете регулярно;
– где уходит больше всего ручного времени;
– в каких местах вы понимаете результат слишком поздно;
– где бизнес держится не на системе, а на конкретных людях.
Эти разговоры быстро показали: запрос на ИИ – это следствие, а не причина. Основные проблемы лежат в несогласованных данных, ручных пересчетах, разрывах между подразделениями.
После интервью мы поехали на производство. Это был важный этап: часть проблем, которые в разговорах звучали абстрактно, в цехах и на складе оказывались вполне осязаемыми узкими местами.
Дальше мы собрали собственника и всю управленческую команду на стратегическую сессию. Цель была не в том, чтобы придумать решения, а в том, чтобы впервые посмотреть на проблемное поле целиком – одной командой. Проговорить, подтвердить, приоритизировать и соотнести с тем, каким бизнес должен стать через несколько лет.
Именно здесь обычно и становится понятно, зачем вообще нужны такие сессии, если «и так все ясно». Пока проблемы не названы и не согласованы вместе, любые технологии лечат симптомы, а не причины.
По итогам сессии команда неожиданно поймала себя на странном ощущении. Они шли на встречу с ожиданием, что два часа будут говорить про ИИ – возможности, инструменты, «фокусы». А вместо этого почти все время ушло на спокойный и местами даже нудный разбор узких мест компании: где решения принимаются вручную, где данные не сходятся, где бизнес держится на людях, а не на системе. В этот момент стало особенно ясно, что проблема была не в отсутствии ИИ, а в отсутствии общей картины.
Где ИИ действительно дал эффект (а где – нет)
Когда проблемное поле было согласовано, а приоритеты расставлены, разговор про ИИ резко изменился. Он перестал быть абстрактным и стал прикладным.
Выяснилось, что значительная часть проблем вообще не требует ИИ. Где-то достаточно упростить процесс. Где-то – договориться о единых правилах расчета. Где-то – убрать ручные исключения.
ИИ появился только в тех точках, где:
– есть повторяющаяся операция;
– задействовано несколько человек;
– цена ошибки ощутима;
– автоматизация дает понятный экономический эффект.
Один из таких примеров – склад.
На складе несколько сотрудников занимались исключительно ручной проверкой отгрузок. Погрузчик подъезжает, человек сканирует каждую упаковку, сверяет позиции с отгрузочным заданием и только после этого дает разрешение на загрузку. Процесс рабочий, но полностью завязанный на внимательность людей и плохо масштабируемый.
В этом месте мы предложили использование компьютерного зрения: камера фиксирует зону отгрузки, система автоматически считывает штрихкоды с упаковок, сопоставляет их с заданием в учетной системе и дает сигнал – можно грузить или нет. Человеку не нужно ходить и проверять каждую позицию вручную.
Эффект здесь легко считается: меньше ручного труда, меньше ошибок, высвобождение людей под другие задачи. Именно в таких местах ИИ начинает работать как инструмент эффективности, а не как модная надстройка.
Важно, что в других блоках ИИ сознательно не внедряли. Потому что сначала нужно было привести в порядок данные, логику расчетов и саму управленческую модель. Без этого любые «умные» инструменты не дали бы устойчивого результата.
Почему так сработает не у всех
После подобных историй часто возникает желание повторить: «значит, нам тоже нужен ИИ».
Но здесь важно быть честными. ИИ не станет волшебной палочкой, если:
– процессы нестабильны;
– данные противоречат друг другу;
– решения все равно принимаются по ощущениям;
– бизнес не понимает, какие проблемы для него критичны.
В такой ситуации ИИ либо не даст эффекта, либо создаст новые точки сложности.
Как работать с ИИ, чтобы он действительно давал эффект
Рабочий подход почти всегда начинается не с технологий, а с управления:
Понять, какие решения в бизнесе реально влияют на деньги.
Разобраться, где эти решения принимаются вслепую или с запозданием.
Навести порядок в процессах и данных.
И только потом использовать ИИ – там, где он дает измеримый результат.
Именно такой подход мы и называем цифровой стратегией.
ИИ не делает бизнес управляемым сам по себе. Он лишь усиливает то, что в компании уже есть – процессы, данные, логику принятия решений.
Поэтому цифровая стратегия – это не просто выбор технологий. Это честный разговор о том, как компания принимает решения и где она теряет эффективность. Иногда в этом разговоре ИИ оказывается полезным инструментом. Иногда – нет. И это нормально.
Мы регулярно видим, что самый большой эффект дает не сам ИИ, а работа, которая ему предшествует: разбор управленческих узких мест, согласование приоритетов, наведение порядка в данных и процессах.
Если вам сейчас тоже кажется, что «ИИ вроде бы нужен, но непонятно зачем и куда», возможно, стоит начать не с технологий, а с этого разговора.
Пожалуйста, почините найм!
Нытье
Я в IT довольно давно, как в том меме — мне этот мир абсолютно понятен. Но сейчас происходит какая-то ерунда, и, учитывая разные обстоятельства в мире, считаю, так делать крайне тупо. Не то чтобы я хотел пожаловаться — увольнения, «оптимизации», «трансформации» были всегда. Это всё бизнес, и к нему нечего предъявить. Разные ситуевины бывают. Но я бы хотел как-то вставить своё мнение по теме.
Годами, если вы хотите попасть в какую-то крутую компанию, вам нужно было, и до сих пор это «нормальная» практика, устраивать десятки этапов собеседований. Без проблем — я принимаю эту игру. Нам же важно найти ту самую рок-звезду, которая будет решать поставленные перед ним задачи. Типа как в магазине выбираем принтер, правда, сдать его обратно через три месяца нельзя. Листик с него вышел — значит, всё, поиспользовал, живи с ним дальше.
В 2016-м у меня уже было несколько лет опыта. Я устраиваюсь в довольно крупную компанию, в несколько раз умножая свою ЗП. Прохожу HR-созвон, делаю тестовое — шахматы на фронте с запросами к бэку, прохожу скрининг, где решаю, куда и как будет ехать паровозик с такой-то герцевой частотой, прохожу технический собес, прохожу софтскилловый с СТО. Решаю там ещё ряд нюансов, типа релокации. И наконец, я попадаю в компанию, где первые две недели просто жду доступы, а затем пишу на Backbone.js + старом Marionette (люблю его, но всё равно смешно даже в 2016-м) ещё несколько лет, пока мы не начинаем мигрировать параллельно на Webpack, React, на котором я делал тестовое, TS, который добрался до масс, и микросервисы, микрофронты. А там появляются компоненты, требующие рендера в разных фреймворках...
Мы семья, растём вместе, развиваемся вместе и всё такое. Я там уже а-ля техлид, гильдия общих компонентов, опционы, нас покупает WeWork. Ну потому что, как объяснил CEO, он вдруг пересёкся на улице с тем CEO (да, с тем, который сам себе бренд продавал), и вдруг оказалось — «мы такие родственные души», выпили кофе, и он продался. Мы тусим, устраиваем опен-эйр, на который слетаются тысячи сотрудников, едим веганскую еду (так захотела его жена — альтруистка, филантропка), так мы делаем мир лучше, но только после того, как сам Adam Neumann произнесёт речь. До тех пор — ждите. Слушаем Lorde на нашей пати. А потом случается IPO, оно провальное, наш CEO покупает компанию обратно, про WeWork снимают сериал, а меня увольняют одним днём после шести «семейных» лет.
Он когда спускался, трогал людей за голову. Это все Анатолий, который тащил нас на первый ряд. Такой криж, не описать
Он когда спускался, трогал людей за голову. Это все Анатолий, который тащил нас на первый ряд. Такой криж, не описать
Я повторюсь: ноль осуждений, это бизнес. Но вы не думали сами свои двадцать этапов попроходить? Сходить, может, к психологу — чтобы не было желания продавать компанию непонятно кому. Свою работу как формошлёп, кнопочки — я проделал. Я разобрался, чем отличается в этом React'е useMemo от useCallback, хотя в 2013-м мне обещали, что оно само будет решать, как оптимально рендерить. Отдельная тема, я напишу пост))
IT в РФ, относительно разных стран, — офигенное. Нельзя этого сказать про потолок ЗП, но в целом оно настоящее, и оно есть. Мне есть с чем сравнить. Здесь есть внутренний рынок, а не просто галеры на другие страны. Но нюансики, подобные описанному выше, тоже имеются.
Наверное, уже как полтора года идут различного рода сокращения. Типа вот — ИИ сейчас проанализирует плохие проекты, найдёт слабых перформеров. Мы скинем ещё больше людей. Несмотря на ту толпу, что и так скинули.
Я стесняюсь спросить — а этот ИИ заранее не мог проанализировать тупую бизнес-идею?
Сделать ему промпт?
Я хочу открыть кафешку, рядом с другой кафешкой, но другого цвета, няшным названием, ИИ фичами, нанять сотни сотрудников, снять офис, да-да нет-нет?
Он мог бы сказать, что это тупой проект, который я буду пилить полтора года по канбану (если не успеем быстрее конкурентов — мы закроем команду), и мы его выкинем за неделю до релиза. А потом ещё такой же. И десяток других — в других командах. Третий раз повторюсь: что просят — то и делаю, это норм. Я бизнес-ориентед, тиммейт, всё ок. Но вы в следующий раз поищите, пожалуйста, проблемы заранее, ок? Всей толпой бизнес-аналитиков, продакт-менеджеров, дизайнеров и победителей конкурсов. Не делайте проекты ради выборки бюджета — порешайте задачи с паровозиками, подумайте, нужен ли очередной аналогичный сервис. Чтобы потом не думать: «Неужели опять опа?»
Что чинить
Окей, если вы уже некоторое время в профессии, то, возможно, поняли, что бывает разное. И наступают все на одни и те же грабли, так или иначе. То ли забыли спросить ИИ, то ли духовный наставник не тот. Бизн��су нужно быстро найти хороших разработчиков — и, если что, быстро их слить. Ну извините, в сухом остатке так.
Несколько месяцев назад мне нужно было найти трёх синьоров-помидоров. И это в период, когда многие крупные компании слили много хороших программистов. Вроде бы задача элементарнейшая — огромное количество кадров на рынке. Но не тут-то было.
По сути, сайты, которые предлагают публикацию вакансий, — плохи. Я не хочу использовать слово «г*вно», поэтому написал не «говн*», а «плохи».
Вот я опубликовал вакансию — за неделю там тысячи отзывов. Как я вообще могу выбрать из четырёх тысяч трёх хороших разработчиков?
Да, спасибо, я вижу, вы дали мне фильтр — от шести лет. У меня каждый день было по 3–4 собеса. За неделю только на двух я услышал разницу между var, let, const или между «обычной» и «arrow»-функцией. Это вопрос, ответ на который есть в абсолютно любой книге по JS. Что ещё проще спросить? Долго мне вот по этим тысячам идти?
Думаю: ладно, окей, попробую ради прикола позвать на собес 10+ лет — там уже люди помнят, например, что такое React на классах и что будет с контекстом у функции, если её присвоить переменной.
А такого фильтра просто нет. Есть фильтр «больше шести лет», а там как в казино — крути ленту, может, увидишь. Точнее, её даже крутить нельзя — там пагинация по страницам))
Это обошлось в восемь тысяч рублей в месяц. Не считая человеко-часов собеседований и самих кандидатов.
Я не HR, а они бывают разные. Мне как-то отказали, сказав: «Я не увидела у вас JavaScript и HTML». В резюме, где указано всё — от JSP, Silverlight-апплетов с jQuery до React, Vue, Polymer и так далее.
А что если бы у нас был HR? Ещё минус человеко-часы на то, чтобы услышать: «Ну, var — это что-то старое, а новое — let».
Да, можно давать тестовое — мы так и делали поначалу. Но буквально все они были навайбкожены. Это тоже пустая трата времени с обеих сторон. Я даже научился визуально отличать бордеры — тухло-неоновые, которые так любит Gemini.
А самая хохма — практически у всех была переключалка темы, которую тоже любит Gemini.
Мы даже пытались усложнить задачу, подвязав конкретное API — всё равно это был вайбкодинг. Кандидаты просто не хотят тратить время. Это понимаемо.
Я за простой живой диалог. На вопросе об опыте, когда просишь рассказать бэкграунд, всегда всё сразу понятно. Человек рассказывает про разные проекты, про команды — то, как он это делает и что говорит, уже многое показывает.
Но на рынке появились ещё так называемые «волки». Они меняют своё ФИО и учатся проходить собесы. И когда тебе чётко и быстро отвечают на двадцатом интервью разницу между var, let, const, начинаешь даже сомневаться — вдруг это тот самый волк, про которых пишут у себя в @glebmachine ТГ. Прям фобию развил.
Но такие легко выводятся на чистую воду парой вопросов. Например: «Использовал классовый React? А Redux? И какой там был популярный HOC?» (connect, если что).
Волки, как правило, знают отдельные термины, а в связке сразу сыпятся — и не могут даже примерно ответить.
И вот так шло пару недель. Я, конечно, нашёл — одного, но это было прям мегаиспытание. Учитывая, что я точно знаю: на рынке много уволенных крутых спецов из разных крупных компаний. Но все они попадают в один пул с тысячами разных людей, которые не стесняются подаваться на всё подряд. У меня даже нет фильтра по годам нормально, а у них мотивационное уведомление — «отзовись сегодня ещё на 100 вакансий, и твои шансы возрастут».
Эти бездумные мотивационные отклики — на другой площадке (не будем тыкать пальцем) — стоят по 300 ₽ за открытие. Ну, если вы, как я, решили, что можно с этого начать, а там посмотрим — проплатим вакансию. А кнопки вроде такой и нет, только через поддержку. Но могу ошибаться.
С первого раза вообще удалили — подумали, это фейк. Найти, кто удалил, не смогли — мол, даже в системе не было. Какой-то бардак.
И там тоже под тысячу откликов — только уже абсолютно обезличенных.
С некоторой подсказкой: «вот он вам подойдёт». Возможно. Хочешь написать? Давай — заплати 300 ₽.
Заплатил? Извини, ошибка. Давай ещё раз.
У меня до сих пор на кошельке там какие-то деньги от открытий, которые не прошли.
А после того, как я заплатил, открыл отзыв и пишу: «Добрый день, хотим пригласить вас на собеседование» — там выпадают на мороз. Кто-то по приколу откликнулся — и ушёл.
Можно подумать, что я не умею пользоваться и там есть какая-то автоматизация? Ну тут как сказать :) Воронки и автовопросы делу особо не помогают))
Я даже, как вышел MCP под devtools, натравил агента, который пытался как-то отсеять мне кандидатов. В первый запуск он всех случайно удалил — по классике мемов. Как-то даже файлы удалял и говорил: «Если есть ещё, я попытаюсь ещё раз». Спасибо.
ИИ помогаторы
Но ИИ есть у этих площадок. Вы что, конечно, есть.
Чудесная кнопочка — «✨ Анализировать».
Подходит на 95%, но из-за того, что нет письма и просит ЗП ниже — не рекомендуем. Не приоритет. Есть 800 других, попробуй там.
Ради прикола знакомый откликнулся на резюме, которое я бы взял без интервью — оно его тоже не рекомендует.
Представьте теперь HR, которая не нашла в моём резюме JavaScript, тыкающую на эту кнопочку))
Как чинить
У меня, конечно же, нет идеального решения. По сути, лучше всего работают только референсы — и это подтверждает большинство моих знакомых. Когда ты знаешь, где твой бывший тимлид, прошлые коллеги — всё проще.
Но так вышло: все знакомые, к счастью, при работе, и я нырнул в этот общий поток поиска со стороны работодателя. Это жесть. А как себя чувствуют разработчики, пытающиеся найти работу?
Есть большой спрос на специалистов. Многие компании устраивают конференции — якобы рассказать что-то, но на самом деле просто собирают контакты, засылают в толпу HR’ов, покупают места на баннерах, делают собственные сайты с вакансиями.
Найти реально сложно. Но есть и сокращения — толпы людей увольняют, и они становятся в кнопочку «✨ Анализировать» наравне с волками, интернами и выпускниками курсов C++ за 32 дня в месяц. Конечно, это честно и правильно, но с точки зрения эффективности — довольно странно.
Вам (бигтеху и не только) срочно нужен хороший разработчик под очередную «кафешку другого цвета», разработчику нужна работа — а найти друг друга вы не можете. На входе вы ставите пять этапов, перед которыми стоят вот такие сайты. Человек приходит, делает работу, часто далеко не на ту сложность вопросов)) А потом, если вдруг что-то идёт не так — вы его увольняете одним днём. Человека, на поиск которого вы потратили много сил.
Наверное, из-за конкуренции вы не можете сделать общий бенч. Знаете, как в аутсорс-компаниях: когда закрывается проект по тем или иным причинам, вас не увольняют — вы ждёте, и вас ставят на другой проект. Часто даже зарплату какую-то платят. Но так или иначе, это в ваших же интересах.
Возможно, меня услышат продакты и аналитики из этих площадок и подумают, как можно улучшить фильтры. Добавить, допустим, как на одной из зарубежных платформ, — отзывы от коллег, чтобы можно было видеть, где конкретно работал человек, что его действительно там знают. Любые простые улучшения помогут.
То, что есть сейчас, — это просто неюзабельное "плохи".
Автозаполнение вакансии — это важно? Важнее фильтров? Или то, что оно мне автоматом раскидает четыре тысячи ваканси�� по трём папкам, как-то поможет?
За десятки лет сделать такую форму, что без ИИ её не заполнить? Я не понимаю.
Пожалуйста, почините. И спасибо за внимание.














