Переписывания могут быть очень успешными, если вы правильно их охватите. Я не знаю, соответствуют ли они вашему порогу "БОЛЬШИХ" (ТМ) проектов, но позвольте мне описать вам несколько наиболее успешных переписываний.
Проект 1
Компания, в которой я работал, имела систему печати на полочных полосах, которая использовалась для создания этикеток, которые вы видите на полках магазинов, из так называемой планограммы . Планограмма была сгенерирована в стандартном программном обеспечении, и наши инструменты читают этот документ, чтобы создать планки полки, используя шаблон для целевого магазина. Программное обеспечение для шаблонов представляло собой беспорядок с вложенными конечными автоматами, охватывающими несколько классов и 3 библиотеки DLL. Когда пришло время реализовать (тогда) патентный подход к созданию колышек, стало ясно, что текущий кодекс не может поддерживать то, что мы хотели сделать.
Решение: мы переписали переписывание только на шаблонизатор. Мы использовали правильный дизайн ОО, чтобы позаботиться о текущих требованиях, а также о новых требованиях к колышковой плате. Время на переписывание составило 1 месяц. Если бы мы полностью переписали всю цепочку инструментов, это заняло бы больше года - но нам это не нужно было делать.
Проект 2
Веб-приложение, созданное нашей командой с нуля, начинало перерастать свой первоначальный дизайн. У нашего клиента также был набор новых требований, которые сделали бы сайт намного лучше для наших пользователей, более совместимым с «Web 2.0», если хотите. В то время как мы могли бы подогнать наш существующий дизайн в рамки, которые у нас были в настоящее время, техническое обслуживание было кошмаром. Мы хорошо знали приложение, и мы знали, какие части мы должны были выдвинуть, а какие ушли, как часть новой версии.
Решение: нашей команде понадобилось 3 месяца, чтобы закончить - это было не тривиально. Конечный продукт был быстрее, более масштабируемым и более приятным для конечных пользователей. Мы превзошли ожидания наших клиентов. Тем не менее, нам пришлось разделить нашу команду так, чтобы более быстрые исправления ошибок и исправления бинтов были сделаны в существующей системе, в то время как другая половина работала над новой системой. Мы провели обширное тестирование и включили его в самом начале. Причина, по которой это сработало так хорошо, заключается в том, что мы хорошо знали это приложение и нашего клиента.
Проект 3
Я должен включить сбой здесь. Мы поддерживали клиента, который нуждался в инструменте управления информацией для использования в чрезвычайных / кризисных ситуациях. Мы унаследовали приложение Java Swing, написанное первоначальными разработчиками, не понимая Swing. Под этим я подразумеваю, что они не следовали рекомендациям Sun по работе с Swing и правильному управлению пользовательским интерфейсом, в результате вы попадете в бесконечные циклы событий и другие странные и трудные для отслеживания проблемы. В результате он был загружен ошибками, проблемами пользовательского интерфейса и т. Д. Это было очень сложное приложение. Чтобы сохранить наше здравомыслие, мы попытались переписать плохо написанное приложение Swing в хорошо написанное приложение Swing.
Решение: Мы завершили переписывание примерно через 4,5 месяца, когда мы оценили 3 месяца. Приложение работало лучше, как в пользовательском интерфейсе, так и в том, сколько данных оно может обрабатывать. Затем произошло цунами в 2004 году. Огромное количество людей, которых они должны были отслеживать, продемонстрировало, что Swing - это не та технология, которая им действительно нужна. Мы не могли идти в ногу с нашей настройкой производительности, и в итоге они отказались от инструмента в пользу мощного веб-приложения, созданного командой Oracle, которая у них была в доме. Конечно, мы могли оправдать то, что мы делали, основываясь на знаниях, которые у нас были в то время, но переписывание было недостаточно агрессивным, и мы не смогли сказать нашему клиенту, что их требования к количеству людей, которые, возможно, нужно было отслеживать, были слишком низкий.
Заключение
Иногда необходимы переписывания , и они могут быть успешно завершены, если вы планируете это правильно. Вы можете добиться большего с целевыми изменениями для отдельных частей системы, чем с целыми продажами. Наконец, то, что заставляет проект терпеть неудачу, не обязательно переписывает сам. Хотя мы никогда не можем быть ясновидящими, мы можем придумать несколько худших сценариев. Я научился проектировать свои системы для поддержки в два раза худшего сценария, который я могу себе представить. В случае с системой антикризисного управления этого было недостаточно - фактические цифры были в 20 раз хуже худшего сценария, который нам дали. Но это был не худший сценарий, о котором мы могли подумать.
- Переписывать ради переписывания не твой друг. Всегда есть много сложности, которую вы не видите, и вы обнаружите, что ужасные вещи, которые вы видите, являются инструментами обучения для вашего клиента. Всегда показывайте ваш текущий прогресс вашему клиенту через регулярные промежутки времени, чтобы они могли помочь вам поймать худшие нарушения.
- Целевые переписывания полезны для борьбы с худшими нарушениями в вашей кодовой базе. Не делайте полную переписку, если вы можете ограничить сферу и решить большинство ваших проблем.