Система для стабилизации позвоночника legacy

Система для стабилизации позвоночника legacy thumbnail

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

Стабилизационная система на рентгене.

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

Кейджы межпозвоночных дисков поясничного отдела.

В преобладающем количестве подобные операции заключаются в достижении полного обездвиживания патологических уровней за счет прочного скрепления двух или более позвонков ригидными конструкциями. Это позволяет позвонкам с течением некоторого времени (от 3 до 6 месяцев) срастись между собой и образовать единый неподвижный костный блок. То есть, на прооперированном поле подвижность между позвонками будет заблокирована, а человек сможет нормально двигаться и ходить, не испытывая при этом боли и прочих неврологических расстройств.

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

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

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

Наименование услуги (без учета имплант-систем)Стоимость, руб.
Межтеловый спондилодез (классика)60000-103000
Инструментация спондилолистеза50000-75000
Транспедикулярная инструментация кифоза120000-165000
Коррекция сколиоза по методике Сук-Ленке158000-237000
Межпозвонковая фиксация кейджем18000-25000
Удаление опухоли/грыжи+стабилизация отдела120000-170000
Трансфораминальный поясничный межтеловый спондилодез73000-100000
Междужковый спондилодез (винтовой способ)45000-105000
Стабилизация динамическим имплантом (1-ой кат. сложности)58000-90000
Имплантация растущей спинальной системыот 160000 и выше

Системы стабилизации позвоночника жесткого типа

Жесткие, или неподвижные металлоконструкции подразумевают закрепление позвонков в постоянном фиксированном положении. Устанавливаются они из заднего доступа (со стороны спины) под контролем КТ и рентген-аппаратуры. Крепятся к позвонкам резьбовыми винтами, которые погружают в костные тела на глубину до 80%. Рекомендуют ставить подобного плана системы сугубо в безальтернативных случаях, если ни один другой вид лечения не сможет решить проблему с поврежденным отделом позвоночника.

Krypton®

Охарактеризуем самое распространенное средство неподвижной фиксации позвоночника – транспедикулярное устройство на примере системы «Криптон» (Krypton®). Это – востребованная модель ТПФ в спинальной нейрохирургии. Ее производит ведущая немецкая компания Ulrich Medical GmbH.

Спинальные хирурги не только Германии, но и всего мира высоко оценили изобретение передового производителя. В первую очередь за уникальные конструктивные особенности. По словам специалистов, систему «Криптон» отличает эргономичность, простота, безопасность в установке, что в значительной мере облегчает труд хирурга. Она высокоэффективна в декомпрессии нервных структур, устранении деформаций и нестабильности позвоночника. Подробнее об расскажем далее.

  1. Система создана для универсальной фиксации торакального и люмбального отделов позвоночника. Представляет собой «умную» комбинацию из титановых стержней и винтов, способствующих быстрому и качественному формированию артродеза.
  2. Характеризуется изначально высокими стабилизирующими свойствами, отличными критериями прочности и устойчивости к большим нагрузкам. Более того, нагрузки, которые оказывают воздействие на конструкцию, рационально распределяются между всеми ее структурообразующими элементами и стабилизированными позвонками.
  3. Главной особенностью изделия является редукционный 3-D инструментарий, фиксирующийся на винтах. Инструмент дает возможность выполнять сопоставление и/или редукцию в любом порядке очередности. К тому же, эта модель ТПФ не требует установки поперечных коннекторов, а вариабельность диапазона угла при введении винта в пластину составляет 45 градусов.
  4. Установка конструкции предполагает малоинвазивное вмешательство, а именно: минимальный доступ с достаточно четким обзором, отсутствие больших кровопотерь, аккуратность по отношению к позвоночным и околопозвоночным тканям, высокую безопасность для спинномозговых корешков и сосудистых образований.
  5. Грамотно спроектированное приспособление позволяет заметно сократить время оперативного сеанса, снизить осложнения и достичь хороших результатов уже в раннем послеоперационном периоде. После установки, как правило, в ношении корсета нет необходимости.

Стабилизация поясничного отдела.

Показаниями к вживлению ригидных конструкций транспедикулярной фиксации, в том числе и Krypton®, служат практически все случаи позвоночной нестабильности:

  • выраженный листез позвонков;
  • травмы позвоночника (вывихи, переломы и пр.);
  • спинальные новообразования;
  • дегенеративные патологии, сопровождающиеся неврологическим дефицитом, например, межпозвоночные поясничные грыжи;
  • сколиотическая болезнь и кифоз;
  • несостоявшийся артродез;
  • последствия неудачно выполненных вмешательств и др.

Коррекция кифоза грудного отдела.

Абсолютными противопоказаниями являются локальная деградация костной ткани (остеопения и остеопороз), местный инфекционно-воспалительный процесс, непереносимость металлов.

Динамическая стабилизация позвоночника

Динамическая стабилизация (ДС) – вживление всевозможных модификаций протезов, которые фиксируют определенную область позвоночника, не блокируя полностью ее функциональную подвижность. Подвижные имплантаты контролируют двигательную амплитуду в стабилизированном отделе в пределах физиологической нормы. Клинические наблюдения и отзывы свидетельствуют о том, что динамическая фиксация в отличие от стандартной ТПФ дает больше перспектив на положительный исход. Почему?

VERTEX SELECT

Классический транспедикулярный метод предполагает полное обездвиживание фиксируемой зоны за счет слияния (сращения) позвонков в единую кость, что может стать причиной возникновения и ускоренного прогрессирования дегенераций смежного уровня выше или ниже стабилизированной области (встречается у 10-15% пациентов спустя 6-12 месяцев), неправильного сращения костных элементов и формирования ложного сустава. Подобные патологические признаки ведут к возвращению болевого синдрома, серьезным неврологическим нарушениям, проблемам с передвижением, образованию вторичных деформаций спины и, как следствие, к необходимости проведения повторной операции.

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

Ассортимент стабилизаторов, сохраняющих подвижность, представлен следующими вариантами приспособлений для внутренней фиксации позвоночника:

  • тотальными протезами межпозвоночного диска;
  • протезами для замены только пульпозной части диска с сохранением биологического единства фиброзного кольца;
  • имплантатами для замещения дугоотростчатых суставов;
  • подвижными устройствами межостистой стабилизации;
  • динамическими транспедикулярными системами.

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

Читайте также:  Инфекция в позвоночнике лечение

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

Отзывы об операции по стабилизации позвоночника

Пациенты, которым была проведена стабилизация поясничного отдела (моно- или многоуровневая), шейного или грудного отдела, оповещают в отзывах об определенных трудностях в процессе восстановления. Распространенная беда – это появление таких послеоперационных осложнений, как:

  • поломка, смещение имплантированного стабилизатора (стержня, пластины, винтов, кейджей и т.д.);
  • развитие местных воспалительных или инфекционных реакций;
  • усиление болей в месте установленной конструкции;
  • нарастающая мышечная слабость в руках или ногах.

3 месяца после операции.

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

  • Болевой синдром и потеря чувствительности конечностей, по сути, если и были в дооперационном периоде, после стабилизации должны иметь тенденцию к сокращению. В противном случае, их появление вполне может говорить о том, что в процессе ответственного сеанса врач поранил нерв, сосуд или даже спинной мозг при создании доступа или в ходе соединения и перфорации позвонков. Эти осложнения нередко носят необратимый характер и чреваты параличом.
  • Поломка, разболтанность, миграция компонентов имплантата сопровождаются тоже болезненными ощущениями, чувством инородного тела в спине. Причиной тому довольно часто является плохо произведенная фиксация установочной системы или же вообще ненужное назначение операции, несмотря на наличие явного противопоказания – низкая плотность костной ткани. В некоторых случаях к таким явлениям приводит неадекватная реабилитация или несоблюдение пациентом необходимых ограничений по физической активности. Исправить ситуацию реально только путем переустановки или полного извлечения устройства.
  • Инфекционные процессы в зоне операции развиваются из-за несоблюдения норм антисептики в операционной, то есть по причине занесения в рану инфекции хирургическими инструментами. Патогенез способен развиться и на почве недостаточно правильно составленного курса антибиотикотерапии, плохого ухода за раневой зоной. При глубоком распространении инфекционного процесса нужно выполнять ревизионную операцию, широкую санацию очага с применением сильного антибактериального агента.

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

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

Источник

На самом деле, по-хорошему статью следовало бы назвать так: «Как работать с легаси-системами и сохранять психическое здоровье». Любой, кто имеет с ними дело, меня поймет. Эта статья — попытка обобщения многолетнего опыта знакомства с легаси-системами в виде набора подходов и практических советов. Примеры буду приводить из собственного опыта — в частности, работы с унаследованной Java-системой. Кстати, материалов о работе с легаси в структурированном виде почти нет — оба источника, посвященных именно ей, приведены в конце материала. И это при том, что на легаси приходится чуть ли не половина всего аутсорсинга.

Что такое legacy или унаследованная система

Picture1

Легаси — в переводе с английского «наследство», и наследственность эта тяжелая. Почти всем доводилось, придя в проект, получить код десятилетней давности, написанный кем-то другим. Это и есть унаследованный код — то есть код исто(е)рический, который часто бывает ужасен настолько, что оказывается вообще непонятно, как с ним работать. И если нам достается легаси-система, то мы, кроме старого кода, также имеем:

  • устаревшие технологии;
  • неоднородную архитектуру,
  • недостаток или даже полное отсутствие документации.

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

На самом деле, легаси-система — это не так уж страшно, и вот почему. Если система жила все эти десять лет и до сих пор работает, значит, какой-то толк от нее есть. Может быть, она приносит хорошие деньги (в отличие от вашего последнего стартапа на новейших технологиях). Кроме того, код такой системы относительно надежен, если он смог так долго выживать в продакшне. Поэтому вносить в него изменения нужно с осторожностью.

Прежде всего, нужно понять две вещи:

  1. Мы не можем неуважительно относиться к системе, которая зарабатывает миллионы, или к которой обращаются тысячи людей в день. Как бы плохо она ни была написана, этот отвратительный код дожил до продакшна и работает в режиме 24/7.
  2. Раз эта система приносит реальные деньги, работа с ней сопряжена с большой ответственностью. С самого начала ясно, что это не стартап в стол, а то, чем пользователи будут работать уже завтра. Это подразумевает и очень высокую цену ошибки, причем дело здесь не в претензиях клиента, а в реальном положении вещей.

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

Что со всем этим делать

Picture2

Для успешной работы с унаследованными системами нам придется много пользоваться приемами reverse engineering.

Прежде всего, нужно внимательно читать код, чтобы точно понимать, как именно он работает. Это обязательно — ведь достаточной документации у нас, скорее всего, не будет. Если мы не поймем хода мыслей автора, мы будем делать изменения, последствия которых окажутся не вполне предсказуемыми. Чтобы обезопасить себя от этого, нужно вникать еще и в смежный код. И при этом двигаться не только вширь, но и вглубь, докапываясь до самого нутра. Откуда вызывается метод с ошибкой? Откуда вызывается вызывающий его код? В легаси-проекте “call hierarchy” и “type hierarchy” используется чаще, чем что бы то ни было другое.

Конечно, придется проводить много времени с отладчиком — во-первых, чтобы находить ошибки, и во-вторых, чтобы понять, как все работает — потому что логика обязательно будет такой, что по-человечески прочитать ее мы не сможем. Собственно говоря, дебажить нужно будет вообще все, в том числе и open source-библиотеки. Даже если проблема где-то в Spring, значит, придется отлаживать и, возможно, пересобирать Spring, если возможности его обновить не окажется. Именно так нам неоднократно приходилось делать, причем не только со Spring.

Что касается документации, не лишним будет прибегнуть к тому, что я бы назвал промышленной археологией. Очень полезно бывает откопать где-нибудь старую документацию и поговорить с теми, кто помнит, как писался доставшийся вам код. Возможно, где-то есть старый Confluence, возможно, хотя бы дамп его базы, где вы что-то, может быть, и найдете. Иногда это бывает проще, чем сидеть с дебаггером. Но нередко там окажутся только документы, не имеющие прямого отношения к коду, например, руководства по настройке серверов, которые все в принципе боятся трогать.

Читайте также:  Реабилитация после компрессионного перелома позвоночника видео

Используя эти приемы, рано или поздно вы начнете более или менее понимать код. Но чтобы ваши усилия не пошли прахом, вы должны обязательно сразу же документировать результаты своих изысканий — для этого я советую рисовать блок-схемы или диаграммы последовательности (sequence diagrams). Конечно, вам будет лень, но делать это точно нужно — через полгода без документации вы сами в этом коде будете копаться как в первый раз. А если через полгода с кодом будете работать уже не вы, ваши последователи будет очень благодарны вам за имеющуюся документацию. Кстати, зачастую для себя и для бизнеса документацию нужно готовить разную: в вашей, рассчитанной на инженеров, представители бизнеса ничего не поймут. Им потребуется что-то понятное, описывающее функционирование системы на верхнем уровне. И наконец, нужно не забывать самим пользоваться этой документацией и читать ее. Однажды, решив проблему после двух дней героической борьбы, мы обнаружили собственный документ, подробно описывающий точно такой же случай.

А руками?

Picture3

Не переписывать!

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

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

Бизнес-интересы и рефакторинг

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

Тестирование

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

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

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

DevOps и релиз

При работе с легаси-системой важно наладить все, что касается DevOps и прочих практик, напрямую не связанных с разработкой. В частности, очень хорошо совместно с девопсами на стороне заказчика прописать определенную процедуру релиза, каждый шаг которой будет строго документирован. Только тогда процесс становится предсказуемым и ясным для каждого из участников.

Релизная процедура может быть, например, следующей. Когда заканчивается разработка и пройдены две или три фазы тестирования, мы пишем письмо DevOps-команде за 36 часов до предполагаемого времени релиза. После этого созваниваемся с девопсами и обсуждаем все изменения окружений (мы сообщаем им обо всех изменениях в БД и конфигурации). На каждое изменение у нас есть документ (тикет в Jira). Затем во время релиза все причастные к этому собираются вместе, и каждый говорит, что он сейчас делает: «Мы залили базу!», «Мы перезапустили такие-то серверы!», «Мы пошли прогонять регрессионные тесты в рабочем окружении!». Если же что-то идет не так, запускается процедура отката релиза, точно описанная в изначальном документе на релиз — без такого документа мы обязательно что-нибудь забудем или напутаем (вспомните, в какое время суток обычно происходят релизы).

Организация кода

Очень важно выстроить правильную branching strategy. Основные модели бренчинга давно описаны на сайте того же Atlassian, их можно адаптировать под ваши нужды. Главное — ни в коем случае не коммитить изменения сразу в транк: должны быть stable trunk и feature branches. Я советую делать релизы из релизных веток, а не из транка. То есть у вас есть транк, от которого отходят ветки на конкретные фичи, соответствующие тикетам в Jira. Когда вы закончили разработку в спринте, вы собираете отдельную релизную ветку из готовых фич и ее сертифицируете. Если же что-то пойдет не так, из такой ветки можно будет легко устранить то, что по какой-то причине из релиза в итоге выпадает. Когда же релиз произошел, релизная ветка вливается в stable trunk.

Контроль качества кода

И наконец, code review — это, казалось бы, достаточно очевидная практика, к которой прибегают почему-то далеко не во всех проектах. Очень хорошо, если каждая часть кода проверяется более чем одним человеком. Даже в очень сильной команде в процессе code review обязательно обнаруживаются какие-то косяки, а если смотрят несколько человек, количество выявленных косяков возрастает. Иногда самое страшное находит третий или четвертый reviewer. Но во избежание как саботажа, так и излишнего фанатизма, необходимо договориться, сколько review достаточно для того, чтобы считать фичу готовой.

Для проверки можно использовать пул-реквесты (конечно, если у вас Git), далее есть Crucible и FishEye — оба прикручиваются к Jira. И наконец существует очень удобный инструмент Review Board, который работает и с SVN, и с Git. Он позволяет послать запрос на проверку кода, который соберет в себе все изменения в данном feauture branch.

Как этим управлять

Picture4

Подбор команды

Самое первое, что должен помнить Team Lead или PM при наборе людей в проект — далеко не всем разработчикам подходит работа с легаси-системами. Даже если человек пишет замечательный код, не факт, что он сможет целыми днями сидеть с дебаггером или документировать чужой код. Для работы с легаси, кроме технических навыков, требуются еще определенные личностные качества — хорошее чувство юмора, самоирония и, конечно же, терпение. На эти качества нужно обращать внимание при подборе людей в команду, а если кто-то не сошелся с легаси характерами, то не воевать с ним, а заменять. Замена человека в проекте в подобном случае не волчий билет, а облегчение и для него, и для команды.

Читайте также:  От позвоночника ноют руки и ноги

Глупые вопросы

Тимлид не должен стесняться задавать команде «глупые» вопросы и напоминать обо всех вышеперечисленных приемах работы. «Я накатил свежий код, и теперь ничего не работает!» — «А какую ветку ты взял? А базу обновил? А что в логах? А дебажил?» Несмотря на всю свою простоту такие диалоги — неотъемлемый элемент нашей работы, и в особенности с легаси-проектами. Нужно удерживать все в голове и не уставать снова и снова напоминать о каких-то очевидных и не очень очевидных вещах. Без этого, поверьте, не обойтись!

Процесс, или «Здесь так принято»

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

В работе с легаси-системами действительно важен правильно выстроенный, понятный и прозрачный процесс: Jira (или аналог) обязательно должна отражать реальное положение дел в данный момент. Все требования должны быть ясно сформулированы, а процессы четко прописаны. Вся эта Jira-бюрократия точно окупится, сильно снизив степень энтропии в проекте. Так, когда к вам придет заказчик и потребует срочно сделать новую фичу, вы сможете просто показать заполненное расписание. Тогда он легче сможет понять, что чем-то придется пожертвовать.

Что касается эстимэйта (вы же используете Planning Poker, правда?), то оценивать всегда нужно с запасом, чтобы быть готовым к сюрпризам — как мы уже говорили, влияния в незнакомом нам коде зачастую неясны, и порой может вылезать что-то совершенно неожиданное и в неожиданных местах. Так, у нас в проекте был случай, когда изменения в простом CSS сломали часть бизнес-логики: кто-то поставил в JS проверку на цвет элемента интерфейса.

Бизнес, tech debt и SWAT

При работе с легаси-системами нужно стараться противостоять потоку бизнес-требований, которые заказчик будет вам непрерывно поставлять. Заказчик не всегда осознает риски, связанные со стабильностью системы, поэтому вам придется постоянно о них напоминать. Бороться с этими рисками можно двумя способами: балансированием бизнес и стабилизационных задач в каждом спринте или отдельными стабилизационными проектами. Оптимальным кажется баланс 70 на 30, когда 30 % времени каждого спринта вы занимаетесь стабилизацией. Впрочем, заказчик скорее всего не даст вам сделать все, что вы хотите — поэтому записывайте технический долг по мере обнаружения. Из этого tech debt вы будете брать задачи на вышеупомянутые 30 %. А может, заказчик согласится на стабилизационный проект, особенно если вы покажете ему tech debt в ответ на вопрос, почему все в очередной раз упало.

Для экстренных случаев я советую иметь SWAT — «группы специального назначения», которые смогут быстро решать непредвиденные проблемы в любое время суток. Ведь если система вдруг завалится, заказчик тут же начнет вам звонить и в 2 часа ночи, и в 4 утра — это мы проверили на своем опыте. Поэтому хорошо бывает договориться, кто в какое время дежурит на случай таких происшествий. Это должны быть быстро соображающие люди, которые могут сидеть допоздна, соответственно, чаще всего, не семейные. Но основная их задача — это все-таки, брейнсторминг днем. В этом есть особый инженерный кайф — в стрессовой ситуации оперативно находить ошибки в чужом коде, понимая, что спасаешь мир в рамках отдельно взятой системы.

Примеры оптимизации

А теперь вкратце расскажу о способах оптимизации, которыми мы пользовались в разное время.

Во-первых, нужно уйти от традиции ежедневных перезапусков, если так было принято в проекте. Однако делать это нужно, конечно, с осторожностью — продолжать проверять логи и следить за всем, что может привести к падению системы, и бороться с этим. У нас была система, которые перезапускалась каждую ночь, т. к. не могла прожить и двух суток из-за memory и других leaks — теперь же она совершенно стабильно работает от релиза до релиза две-три недели (за редкими исключениями, о которых мы обычно узнаем в 4 утра).

А вот хороший пример того, как делать не нужно. У нас была система, несколько компонентов которой периодически отваливались. Тогда со стороны заказчика пришел девопс и написал скрипты, которые по логам анализируют активность этих компонентов, и, если в логе три минуты нет записей, эти службы перезапускаются. Это, конечно, сработало, но такие вещи должны однажды плохо кончиться.

Очень важный момент — проход по всем логам и составление отдельного эпика. Бывают, конечно, заказчики, которые долго не дают доступа к продакшн-логу. У нас, например, так продолжалось полгода, после чего случился переломный момент, когда нас самих попросили посмотреть логи продакшна. Просмотр затянулся на всю ночь. В системе, работавшей, как считалось, штатно и стабильно, нормальные логи попадались лишь иногда — в основном же записи были со сдвигом вправо и начинались с “at”. Это были сплошные стектрейсы, и их набиралось на десятки мегабайт в сутки. Конечно, мы завели эпик в Jira и создали тикеты на отдельные exceptions. Затем нам пришлось несколько месяцев выбивать время на стабилизационный проект. В итоге мы исправили множество ошибок, о которых никто не догадывался, и сделали логи информативными. Теперь любой стектрейс в них — действительно признак нештатной ситуации.

Еще советую обращать внимание на третьесторонние зависимости как на front-end (Google Tag Manager, Adobe Tag Manager и т. п.), так и на back-end. Например, если у нас на странице есть JavaScript со сторонних ресурсов, нужно посмотреть, завернуты ли эти скрипты в try..catch блоки. У нас были случаи, когда сайт падал из-за того, что ломался какой-то скрипт на стороне. Также важно предусматривать возможность недоступности любых внешних ресурсов.

Ну и последнее: следите за всем, за чем только можно, и грамотно агрегируйте логи. Ведь у вас может быть 12 продакшн-серверов, и вас могут попросить их логи посмотреть, что точно нужно делать не через tail. Мы использовали ELK — связку Elastic search – Logstash – Kibana. Очень полезен мониторинг: мы навесили Java Melody на все серверы и получили огромное количество новой информации, на основании которой многое исправили, осчастливив заказчика.

Полезные ссылки

  • Victor Polischuk — Legacy Projects. How To Win The Race — это доклад на русском о работе с унаследованными системами, основанный на конкретных примерах из опыта докладчика.
  • Michael Feathers. Working Effectively with Legacy Code — это книга по теме, которую я, честно говоря, не читал. В основном она про рефакторинг. В открытом доступе есть обширная презентация автора с тем же названием, по которой вы сможете понять, стоит ли вам покупать эту книгу.

Источник