Из ВК

09 августа 2012

Добавлять ли нововведения в ПО

Вдруг (после прочтения статьи на kotaku) возникла мысль достойная перманентного блога.

Давайте представим что у вас есть некая программа (в данном посте под словом программа будем понимать весь спектр ПО от системного/прикладного до сервисов) с большим количеством пользователей. Она существует уже достаточно давно и успешно.

Но ни что не стоит на месте. Появляются новые технологии. Сначала они были слишком новые и сырые и казались ненужными. Потом вдруг (момент перелома ситуации когда технология переходит из стадии «для гиков» в стадию «нужна всем» отследить достаточно сложно, особенно если ты не придавал этой технологии особенного значения, потому именно «вдруг») оказывается, что ПО без этой технологии современным обществом уже вроде как и не рассматривается. Тут же оказывается? что все те поделки, возникшие на заре возникновения технологии, неожиданно стали сильными конкурентами. Думаю вы поняли ситуацию. Так вот какие ошибки совершать не стоит (как я думаю):

Плохой вариант

В общем наблюдая ситуацию с ПО (да вообще с IT) становится очевидно, что всем не угодить. Более того стараясь угодить новым клиентам, которые хотят всё самое распоследнее, скорее всего просто распугаешь старых и, за отсутствием опыта/видения в новых технологиях, новых клиентов не получишь.

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

Можно, если очень хочется, добавить их параллельно и спокойно наблюдать за миграцией. В какой-то момент, если он наступит, станет очевидно? что устаревшие части можно убирать. Если момент не наступит, ну значит устаревшие части не так уж и пло́хи и не стоит рубить с плеча…

С одной стороны это золотая середина, но у неё есть огромный побочный эффект - поддерживать такое решение в итоге становится неимоверно сложно. Мы все видим как до сих пор мучается Windows со своим DOSовским наследием.

Не плохой вариант

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

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

Думаю именно такой вариант «спасёт отца русской демократии». Когда наступает описанный в начале поста момент, мне кажется, разумнее создать параллельную версию ПО на новых технологиях. Это позволит чётко разделить денежные потоки. Умирающая/неудавшаяся версия не будет топить более удачную. Можно предложить маркетинговые акции для пользователей ваших параллельных программ, чтобы облегчить им миграцию. Может быть получится создать интерфейсы из одной программы в другую, или импорт/экспорт данных.

В итоге разные пользователи получат то что хотели. Поддержка разных технологий в разных продуктах будет проще и безопаснее.

Вывод

С моей точки зрения не стоит месить один винегрет из тёплого и мягкого, пытаясь угодить всем, а то получится блюдо на редкого гурмана. Гораздо безопаснее сделать 2 салата попроще с разными вкусами.

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

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