Как рождается и умирает программа, или И один в поле воин

В разработке есть такой термин, как жизненный цикл программного обеспечения —  от технического задания до снятия системы с эксплуатации. Моя система прошла все этапы жизненного цикла. Хочу рассказать, как появилась, запускалась и работала система, какой опыт при ее внедрении приобрел, какие эмоции получил и какие уроки извлек. История о том, как в одиночку создать приложение, понравиться пользователям, но проиграть как менеджер.

4632abc990562911dcfe95085c73f3da.jpg

От идеи до внедрения…как это было

Генератором идей сам никогда не был —  воплощал, как правило, чужие идеи. Система электронной истории болезни появилась благодаря идее и инициативе руководителя кардиологической клиники и ведущего статистика. Клиника располагалась в довольно скромном 4-этажном здании, но имела  свою лабораторию и занималась функциональной диагностикой, а также только -только начинала проводить эндоваскулярные операции. Главврач предложил сделать «Word для врачей», облегчить бумажную рутину плюс собрать статистику лечения по профилю. Идея укладывалась в простое решение — открытие электронной карточки пациента, куда в несколько полей должна вводиться информация о состоянии пациента, проведённых обследованиях, анализах и лечении. Для статистики были заведены справочники, разработаны отчёты. По завершении приёма врач кнопкой «Печать» формирует «историю болезни». Незамысловато и просто для 2010 года. Техническое задание сформировали на 10 страницах, зафиксировав общие договоренности. Оплата за разработку составила месячную заработную плату разработчика на заводе, где я в это время работал. Сложностей в разработке не было.

Реализация не затянулась, и спустя некоторое время мы с женой начали заниматься в клинике внедрением программы и обучением специалистов. Запуск системы оказался тяжёлым. К объективным трудностям при запуске программы прибавились пользовательские проблемы владения ПК: сложности с интерфейсом; неудобно и непонятно, жаловались специалисты, которых мы обучали. На основной работе пришлось взять трудовой отпуск. Бились (иначе не скажешь) две недели. Вернулся на завод, а жена продолжала работу в клинике ещё на протяжении такого же времени. Успешно запустить программу, научить пользователей и не развестись, не разбежаться был наш челлендж. Почти как ремонт, когда все на нервах. Накал страстей и эмоций был действительно велик, возникало много вполне естественных вопросов и проблем. В этот момент у пользователей вдруг возникло недоверие к программе — то, чего мы никак не ожидали. Да, была допущена ошибка, которая, в некоторых случаях, приводила к искажению данных в истории болезни. Ошибка, конечно, была быстро найдена и исправлена, важнее стало восстановить доверие к программе; не сразу, но удалось и это.

Технически программа представляла собой приложение на Delphi  с базой данных Firebird версии 1.5. Программа Электронный эпикриз проработала около трёх лет, не получив особо интересных развитий в части интерфейса. Это было основное окно программы.

Электронный эпикриз

Электронный эпикриз

В 2015 году кардиологическая клиника расширилась, образовался кардиохирургический центр, включивший в себя и клинику с Эпикризом.  В новом здании появились новые отделения. Руководство предложило новый контракт на развитие системы. Мы сформировали ТЗ для разработки более серьёзной программы, в которой уже должны врачи-хирурги, средний медицинский персонал, лаборатория, сотрудники склада медпрепаратов. Программа получила название КардиоКарта. Функционал значительно расширился за счёт ввода дополнительных отделений — реанимации, трансфузиологии, электрофизиологических исследований и целого комплекса консультационно-диагностических услуг. Не справляясь уже с нагрузкой по доработке программы вечерами, решил уволиться с завода и перейти в кардиохирургический центр на полную ставку, приняв предложение руководства медучреждения.

Появилась возможность  уделять больше времени доработке интерфейса, удобству программы и новому функционалу. Каждодневно общаясь с врачами и медперсоналом, с головой погрузился в изучаемую тему, отмечая для себя все нюансы далекой от меня профессии. Создал пусть не универсальную, но востребованную на тот момент программу, учитывая желания и требования врачей.

Руководство кардиохирургического центра генерировало идеи, и мне это нравилось. Центр приобрёл лабораторное оборудование в Турции, с самописной интеграцией. Мы интегрировались системами через переводчика на ломаном английском. Общими усилиями интеграция взлетела и работала все последующие годы. Единственное, что ломалось в связке, — это COM-порты на оборудовании.

Картотека медицинских карт

Картотека медицинских карт

Следующими этапами было подключение отделений фармакологии, анестезиологии, трансфузиологии с учётом гемаконов, онлайн -доступа к системе. Параллельно появилось несколько вспомогательных программ для работы фармакологии: печать лейблов на препаратах для выдачи пациентам и взаимодействие с бухгалтерской системой в виде фоновых задач для справочников и переноса остатков.

Окно осмотра пациента лечащим врачом

Окно осмотра пациента лечащим врачом

С онлайн — доступом был интересный случай. За неделю до приезда высокого начальства директор решил их удивить показом не только программы, но и сайта, на который можно зайти по телефону и просмотреть истории. Понимая, что быстро создать сайт нереально, он предложил сделать муляж со статичным контентом. Даже начали выбирать пациентов для отображения. Я воспринял это как вызов и за пару ночей с фреймворком Django, Bootstrap сделал более — менее рабочий вариант сайта с нормальным функционалом: список пациентов, просмотр дневников, анализов, инструментальных исследований, ну и, конечно, сверху небольшой логотип с сердечком. В итоге удалось не просто удивить, а сделать дополнительное средство работы с системой. Онлайн — версия стала развиваться дальше. Сейчас, оглядываясь назад и вспоминая то время, удивляюсь, как мы вообще избежали взломов и атак со стороны вредителей. Защита была на собственном сервере, никаких специалистов по безопасности не было.

Несколько демонстрационных экранов (ФИО сгенерированы случ. образом)

Несколько демонстрационных экранов (ФИО сгенерированы случ. образом)

В 2016–2017 годах в Республике Казахстан начался переход на электронный документооборот. В большей части это касалось госорганов и социальных служб. Медицина по-прежнему вела бумажные эпикризы. Вся документация была представлена в бумажном виде. Не знаю точных ежемесячных затрат на бумагу, но, думаю, они были значительные. Директор предложил своё видение этой проблемы: раз страна идет на цифровизацию, то и на местах следует проявить инициативу. Решение не заставило себя ждать: руководство объявило о прекращении ведения бумажной истории болезни. Выписной эпикриз печатали пациенту в сокращенном виде и выдавали при выписке. Остальная документация оставалась исключительно в электронном виде. Это был важный этап для нас и для нашей программы: нам и нашей системе доверяли.  К этому времени была проведена большая работа по защите и журнализации данных. Ситуации были разные: смерть пациента, прокурорские расследования по историям болезни. В системе была журнализация, которая за всем следила. Делал её сначала для себя, чтобы обезопасить себя относительно изменения данных. Пароли делали надёжные плюс вход по ЭЦП. Работа с ЭЦП реализована через библиотеку криптопровайдера CC Kalkan, основанную на исходном коде продукта OpenSSL. Криптопровайдер CC Kalkan — это разработка Национального удостоверяющего центра для сторонних приложений для работы с ЭЦП.

Подключение к системе с использованием ЭЦП

Подключение к системе с использованием ЭЦП

Достаточно много технических вызовов было при работе с новой системой. В подчинении состояли три технических специалиста, которые занимались железом, консультациями по офисным программам, сети и прочим делам. На мне было администрирование домена, планы архивации, закупки оборудования, а также периодическое решение проблем с медоборудованием.

Госзакупки

Работа в штате не айтишной компании была тяжёлой и стала напрягать: много задач, не соответствующих моей специализации. Плюс в этот момент  получил российское гражданство. Решил открыть ИП и сосредоточиться на разработке. Руководство было лояльно к этой идее. Однако возник вопрос интеллектуальной собственности. Претензий на софт у кардиохирургического центра не было. Исходные коды остались за мной. ИП и права интеллектуальной собственности оформил на родственника. Интеллектуальная собственность на нерезидента стала ещё тем испытанием. Мы с женой занялись бухгалтерией, разработкой и сопровождением.

По оплате договорились превратить сумму заработной платы в стоимость сопровождения и перейти к форме взаимодействия через юридические лица. Однако здесь была засада. Центр был частично государственным. Это значит, что все контракты должны проходить через госзакупки. А госзакупки, надо сказать, — это отдельная история с большими проблемами, особенно, когда ты один занимаешься этим архисложным вопросом и делаешь это в первый раз. Разыграли первый конкурс, и, конечно же, я проиграл.  Сопровождать систему без исходных кодов набралось около 5–6 разных компаний. Выиграл конкурс предприниматель из Алматы, направил своих технических специалистов на знакомство с программой. Но без исходников вносить изменения не получилось. Решили отправить менеджеров договариваться, предложив мне 40% от стоимости договора. Не смогли договориться; в итоге кардиохирургическому центру пришлось судиться с ними из-за невозможности получить услугу по договору. Суд принял сторону медучреждения, рекомендовав в будущем использовать защищённые интеллектуальные права на программу и заключать договор напрямую с пометкой об интеллектуальной собственности.  Оставь я права на свой софт в центре, утратил бы уже при первом закупе и центр, и своё приложение. Потеряв месяц в судебных тяжбах и разбирательствах, в следующей итерации закупок мы уже указали требование на привязку к интеллектуальной собственности и наличии исходных кодов для внесения изменений. Благо, контракт заключается на весь год; на год я забыл о проблемах и сосредоточился на работе.

На рынке быть — по-волчьи выть

Пользователи программы — врачи-функционалисты, кардиохирурги — на городских и областных конференциях  делились впечатлениями и успехами использования программы. Директор центра на своем уровне  также  подчёркивал достижения в автоматизации выполнения медперсоналом рутинных вещей; в качестве доказательства, что с использованием программы далеко ушёл от своих коллег, демонстрировал «мобильное приложение». И в какой-то момент ко мне пришли с деловым предложением адаптации системы к двум другим больницам. Работы было довольно много, были организованы совместные встречи, диалоги с заинтересованными лицами. Обозначился круг проблем, которые предстояло решить, — интеграция с лабораторией, где оборудование сильно отличалось от того, что использовалось в кардиохирургическом центре, отсутствие модуля взаимодействия с железом лаборатории на низком уровне, изменение профиля программы с кардиологического на общий.

На встречах впервые услышал фразу: «Мы же с вами бизнесмены, давайте договариваться». Это значило, что необходимо заплатить деньги, чтобы пройти конкурс, который был бы организован в рамках тендера. Гарантий принятия акта выполненных работ никто, конечно же, не обещал. Это уже зависело от самих работ по запуску системы. Вопроса такого ранее не возникало, я оставался разработчиком, а не бизнесменом, который должен ещё и платить деньги заказчику за продукт. Было несколько встреч вне рамок лечебного учреждения (прямо как в фильмах о шпионах), где  озвучивалась сумма. Она была весьма демократичная, видимо, хотели получить премию к заработной плате. До сих пор меня это удивляет, что не жадничали они.

Photo by Pavel Danilyuk: https://www.pexels.com/photo/shallow-focus-of-two-people-handshaking-5520322/

Конкурс —  сложная процедура, требующая предоставления большого количества документов. И это не только список работающих в фирме сотрудников, но и полная их характеристика — какую работу выполняют, какими знаниями обладают. В общем, говоря современным языком, имеются ли ресурсы для участия в проекте. Всё было сделано как надо: два разработчика, сотрудник технической поддержки, руководитель. Для нового большого проекта я готов был нанять людей и платить им.

Конкурс был проигран по стоимости. Участвовало несколько компаний, в том числе и российская, но победила в конкурсе компания с южного Казахстана. Она же занялась адаптацией своей системы. Через определённое время они запустились, но сложности были с оборудованием лабораторий. Проигранный конкурс не стал  шоком  и не вызвал никаких других чувств, кроме желания и необходимости  двигаться дальше.

Второе предложение было более лояльным. Мы договорились о внедрении готовой программы в клинику гораздо большего формата. Наученные горьким опытом предыдущих конкурсов и тендеров, решили пойти по проторенной дорожке: устроиться работать разработчиком и внедрять программу в рамках своих обязанностей без передачи интеллектуальной собственности клиенту, таким образом оставив за собой будущую доработку и сопровождение. Всё шло по плану до тех пор,  пока мы не встретились с финансовым директором клиники. И без объяснения причин  расстались. Не было негатива, предложений об откате, претензий, просто один отработанный день —  и до свидания. Предполагаемая причина — это наступление конкурентов, которые шли не просто по пятам, а с опережением.

Конкуренция на рынке

Конкуренты начали не с поликлиник и медцентров, а с местного департамента здравоохранения с целью охвата всех клиник под одно надёжное крыло. Предлагаемая система ориентирована на онлайн, потребности департамента и создания единого центра получения отчётности. Изначально правильный подход с централизацией и задействованием административного ресурса сверху.

Первая система, с которой конкурировали, заменила поликлиническую часть КардиоКарты. Приложение было написано также на Delphi, с базой данных на Oracle. Внедрение было очень долгим, тяжёлым. Требовалось новое железо с выделенным тестовым сервером. Руководство очень удивлялось разнице в подходах при запуске программ. В моём случае использовалось имеющееся оборудование, у «новых» всё по правилам: новая задача — новое железо, новые затраты и лицензии на софт. Внедрение ещё и усложняли мои старые пользователи, которые не хотели перехода. Не со зла, а от привычки к программе, которая стала для них удобной и понятной. Переучиваться пришлось полностью. Часть поликлиники осталась за КардиоКартой, потому как функциональная диагностика стационарных больных проводилась в ней. Пользователи работали сразу в двух программах. В случаях сбоев переходили в КардиоКарту. С технической поддержкой конкурентов установились тёплые отношения, общались, помогали друг другу. Их заинтересовало несколько практических решений по удобству заполнения протоколов осмотров в моей программе. В их системе была похожая функциональность, но выглядела она сложно и путано.

Я старался объективно оценить программу конкурентов, и всё же она казалась мне громоздкой. Это был некий конструктор, из которого можно было всё собрать, настроить окна. Некая 1С в сфере медицины. Справочники содержались в одной большой таблице с типом справочника. Позже, разобравшись в их системе, даже консультировал пользователей. Система прожила около года. Поменялось руководство в департаменте —  пришли и новые менеджеры с новой системой.

Photo by Pixabay: https://www.pexels.com/photo/battle-board-game-castle-challenge-277124/

Photo by Pixabay: https://www.pexels.com/photo/battle-board-game-castle-challenge-277124/

Следующая компания готова была автоматизировать медицину комплексно. Вот это уже были более сильные конкуренты. Полностью онлайн — система с серверами у местного монополиста связи с резервированием, безопасностью и всем необходимым для работы качественной системы. Руководство центра держалось и просило отсрочку запуска у себя с мотивацией, что имеется собственная система, которая удовлетворяет их полностью. Все понимали, что процесс запущен и его не остановить. Активной разработки с моей стороны уже не было, новый функционал не требовался. Основная работа состояла в поддержке, консультациях, анализе исторических данных. В системе накопился большой объём аналитических данных, которые можно использовать в защите диссертаций и исследований.

Скучная статистика по системе и инструменты работы

Размер базы данных

50 Гб

Количество таблиц

170

Общее количество пользователей

630

Активное количество пользователей (ежедневно)

70

Количество историй болезни

38703

Количество уникальных поликлинических записей

34560

Записей журнала изменений

190М записей

Кодовая база

290 файлов
79К строк
1192 коммита

Срок эксплуатации

~10 лет

База данных

Firebird 2.5

Среда разработки

Delphi 2010, Python, Ibexpert

Где система сейчас?

Система официально снята с эксплуатации. Исторические данные доступны в системе. Анализ данных добрался и до медицины среди интересующихся врачей и статистиков. В поликлинике периодически используется во время простоя основной системы при осмотрах для формирования и печати функциональных обследований. Сопровождение продолжалось после расторжения контракта ещё несколько месяцев, но в итоге сошло на нет.

Было несколько публикаций о программе в местных интернет изданиях: раз и два.

Найти новых клиентов для программы сложно по причине жёсткой привязки к единственному заказчику. Плюс особенности программы для медучреждений Казахстана усложняют адаптацию для России.

Профит

На протяжении всего времени (а это без малого 10 лет!)  кардиохирургический центр зарекомендовал себя как надёжный партнёр, с которым было приятно работать, реализовывать их идеи и пожелания. Результаты нашей совместной работы были видны сразу. Врачам становилось проще работать, статистикам — собирать данные. Недостаточно хорошо, правда, был охвачен  финансовый учёт, причина в отсутствии заинтересованности у финансового отдела.

Успех программы очень прост: она разрабатывалась под конкретное предприятие с учётом  его специфики и пожеланий пользователей, дорабатывалась  оперативно и в срок. Могу сказать, что, работая в штате медицинского учреждения, достиг максимального погружения в специфику медицинской профессии. Руководство центра поступило очень обдуманно, предложив реализовать сначала простое приложение, с незамысловатым интерфейсом, подготовив пользователей к более сложному решению. Внедрение последующих систем шло проще среди подготовленных пользователей.

Как специалист получил технические знания в области Python, настройки серверов, администрирования баз данных, оптимизации запросов.

Возможно, не было сделано главного —  не удалось собрать, создать команду, которой под силу было бы решение сложных и трудных задач. Мы могли бы сделать больше. Были специалисты технической поддержки, в том числе и моя жена, но программа так и осталась программой одного разработчика. Не было видения развития системы хотя бы в обозримом будущем, вне клиники с кардиологическим уклоном. Не ухватил идею развития системы онлайн. Причина утраты влияния программы видится и в отсутствии управленца. Приходилось работать с заказчиком, а вечером реализовывать его требования и предложения. Наутро же снова становишься менеджером и общаешься по госзакупкам. Быть в одном лице разработчиком, менеджером и бизнесменом сложно. В долгой перспективе, как показал мой опыт, у меня не получилось. И все же этот опыт бесценен. Вопреки расхожему мнению, что один в поле не воин, берусь утверждать обратное. Смысл жизни в том и состоит, чтобы реагировать на вызовы, любить свою работу и ловить при этом кураж.

© Habrahabr.ru