Секреты удачного проектирования ИС (информационной системы) на примере строительства больницы

Почему именно больница?


А почему бы и нет? Это хороший пример. Проект везде проект: плюс-минус те же стадии, та же схема управления, документооборот, работа с рисками, контроль качества и так далее. Везде есть требования и к оборудованию, и к помещениям, и к ПО. Вы спросите, какие могут быть требования к помещениям в Информационной Системе? Очень просто: расположение рабочих мест операторов, сервера — и тем и другим потребуется кондиционер. Вот уже и требования к помещениям. И вряд ли нынче кто-то сомневается, нужно ли больнице ПО. Если вы хотите идти в ногу со временем, перед вами встанет задача создать автоматизированное лечебное учреждение с электронными медицинскими картами, где врачи делают осмотр с планшетами, а, например, санитарки отмечают вымытый туалет не на листике, а в телефоне. Требований к ПО в данном случае будет предостаточно. А как только потребуется ПО, появится необходимость установить сервера, куда-то посадить админа и операторов. Все взаимосвязано.

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

Программный код внутри (но этого никто не видит)

При чем тут больница, если мы разрабатываем ПО?


А вот и нет, дорогие разработчики, руководители, аналитики, тестировщики.

Не программное обеспечение вы разрабатываете… Возьмем Android, — это ПО. А если, например, перед вами бухгалтерская система, то вы уже имеете дело не просто с ПО, а с ИНФОРМАЦИОННОЙ СИСТЕМОЙ.

Отличие очевидно. Если вы купили телефон— все просто: включаете его, запускается зеленый человечек (Android), пользуетесь. А если вы приобрели коробку с бухгалтерским ПО, то ясно, что теперь необходимы сервера, надо настроить сеть, сконфигурировать рабочие станции, обучить сотрудников, интегрировать систему с остальными ИС предприятия, погонять систему в тестовом режиме. Да и бухгалтеров надо еще как-то уговорить перейти на новый софт, далеко не все из них готовы к новациям. В общем, в любом IT-проекте 10-20% это IT, а все остальное — организационные и административные меры, ну и очень плотная, ювелирная, работа с персоналом.

Информационная система (разве это только ПО?)

И, наконец, вспомним определение системы еще из далеких 90-х годов, которое никто не отменял:
Автоматизированная система: система, состоящая из персонала и комплекса средств автоматизации его деятельности, реализующая информационную технологию выполнения установленных функций.

ГОСТ 34.003-90. Информационная технология. Комплекс стандартов на автоматизированные системы. Автоматизированные системы. Термины и определения.
То есть, ИС в первую очередь — это люди, плюс технология, помогающая автоматизировать их деятельность, и никак не наоборот.

Как спроектировать больницу


Представим, что вы строительная организация, к вам приходит заказчик и просит в таком-то месте построить больницу. Вы сразу побежите кирпичи класть или…? Если смотреть на то, как зачастую создаются Информационные Системы, то так и есть: исполнители тут же начинают «мешать бетон и закупать стеклопакеты». Мол, выйдет не так — перестроим! Будем перестраивать, пока не добьемся нужного результата.

Однако, если вы серьезная организация, то сперва предложите заказчику ПРОЕКТ строительства. Согласны? А почему с Информационной Системой не так? Может, дело не в различиях между строительством и разработкой ПО, а в том, что в случае той же больницы сначала много думают, планируют, а потом строят, а ПО сначала разрабатывают и затем думают? Не потому ли много слышно о криворуких программистах, но ничего о таких же гастарбайтерах на стройке? Строители работают по проекту, в отличие от разработчиков.

Без проекта всегда так, даже если этого не видно

Рассмотрим теперь процесс проектирования подробнее. В нем несколько стадий. Зачем же нужно проходить несколько этапов, почему за один раз не сделать? Для ясности приведу школьный пример… Сколько лет в школе изучают операцию умножения? Вы скажете — один-два месяца, и будете в корне неправы. Да, как умножать 5 на 6, проходят за неделю. Еще определенное время учат таблицу умножения. А умножение дробей, чисел со степенью, логарифмов, выражений в скобках, комплексных чисел, возведение в степень сколько изучают? Почти все школьные годы! Получается, мы одно и то же умножение изучаем каждый год под разными угл
ами.

И почему такое не изучают в первом классе?

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

Сначала мы поняли, какую проблему должны решить с помощью Информационной Системы. Затем определили круг решаемых задач, поняли, ЧТО должна делать система, какие действия должен выполнять персонал. Потом определили, КАК система должна выполнять определенные ранее задачи. Эти этапы можно перескочить, только придется возвращаться обратно и все переделывать: семь раз отмерить и один раз отрезать получается гораздо быстрее, чем наоборот, да и материала уйдет меньше.

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

Видно хорошо, но только малую часть

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

Теперь наконец-то перейдем к рассмотрению стадий проектирования.

1. Составление общих требований


Итак, допустим вы — проектант. К вам приходит заказчик, «посланный» ответственными строителями. Заказчик, естественно, просит вас разработать проект больницы. Вы бежите к кульману и… Ну ладно, это уже древность — запускаете ArchiCAD и чертите.

Но конечно речь не о вас. Вы — профессионал и начинаете задавать кучу «глупых» вопросов. И самый главный из них — зачем нужно строить больницу. Какова цель строительства. Если цель не понятна, то вы не сможете ответить на вопрос, большая это должна быть больница или маленькая, какого профиля, чем оснащенная. К сожалению, заказчики зачастую говорят очень много всего интересного, кроме главного, — какова их цель. Вот это надо «вытащить» из него в первую очередь. И задать вопрос должны вы. Сам заказчик — не специалист, у него есть идея, и на этом он видит свою роль выполненной. Он не понимает, какой путь необходимо пройти для реализации его идеи. Как правило, заказчик ждет старого доброго чуда — прийти на берег моря, закинуть невод (заплатить деньги), выловить рыбку, и она исполнит его желание… А случается как в анекдоте про богатого мужика, который поймав золотую рыбку, попросил выполнить одно желание: «Хочу, чтобы у меня все было!» — «Нет проблем, — ответила рыбка, — у тебя все было...»

Чтобы вникнуть в цель проекта, недостаточно составить пару предложений со стандартным набором фраз. Цель проекта обычно определяется на основе противопоставления: описывают существующую информационную модель (например, сидят люди в архиве и бумажки перебирают), затем — ее недостатки (из-за отсутствия автоматизации в архиве задействовано 10 человек, что явно избыточно, другие отделы не могут неделями получить из архива нужную им информацию и т.д.) и предлагают решение (внедрить ПО, которое позволит осуществлять в автоматизированном режиме ряд операций, операции надо перечислить). В случае, если на рынок выводится совершенно новый вид сервиса, то требуется изучить существующий рынок и «покритиковать» имеющиеся там инструменты, затем предложить решение.

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

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

2. Выбор концепции системы


На данном этапе необходимо выбрать общие технические решения, с помощью которых могут быть выполнены требования, составленные на предыдущем этапе. Будет ли это веб-приложение или нативное, толстый клиент или тонкий, централизованная база или распределенная, реляционная СУБД или noSQL, монолит или микросервисы, Java или Python. Часто данные вопросы забывают обсудить вовремя, а потом оказывается, что кто-то из программистов самостоятельно выбрал определенный инструмент, а в конце концов данное решение не позволяет достичь поставленной цели.

3. Разработка Технического Задания


Составили общие требования к больнице, выбрали концепцию. «Ну, — скажет заказчик, — теперь все понятно, можно чертить». А можно ли? Требования-то общие, их надо детализировать. Например, на первом этапе вы определили, что должна иметься лаборатория по анализу крови. Но какое там будет оборудование, сколько оно потребляет электроэнергии, сжатого воздуха (а вдруг?), нужны ли кварцевые лампы для дезинфекции, лабораторные столы, вентиляция? Без этого проектировать тяжеловато будет. Это, во-первых. А во-вторых, необходимо прописать план строительства больницы, подготовки и ввода ее в эксплуатацию.

Для Информационной Системы разработка ТЗ (Технического задания) — центральная часть проекта. Техническое задание описывает:

  1. ЧТО должна делать система.
  2. Какова должна быть общая структура системы.
  3. Как создать систему.

То есть, ТЗ содержит функциональные и нефункциональные требования, а также требования к этапам разработки, сдаче-приемке, документации. Также в ТЗ должны быть кратко описаны процессы, которые мы собственно автоматизируем.

При описании функций системы (а это центральная часть ТЗ) следует понимать — мы приводим требования к тому, ЧТО должна делать система, а не КАК. Для вас должна быть важнее широта охвата, а не глубина. Например, на первой стадии (составление общих требований) мы выявили необходимость наличия функции блокировки входа пользователя. В ТЗ указали, что учетная запись блокируется при неиспользовании в течение 90 дней или после 6-и неудачных попыток входа, доступ может быть ограничен администратором на определенный срок, при попытке входа заблокированного пользователя необходимо выводить сообщение и т.д. А в техническом проекте (забежим вперед), мы с вами нарисуем макет карточки пользователя с флажком блокировки и датой разблокировки, составим сценарий входа в систему, в котором производится проверка на блокировку, автоматическая разблокировка по истечении установленного срока, блокировка в случае неудачных попыток входа; определим, что выполняется на стороне клиента, а что — сервера.

Хочется развенчать несколько мифов, связанных с разработкой технического задания.

Миф первый: В ТЗ содержатся требования только к исполнителю.

Нет, ТЗ — это то, как создать систему, и в техзадании есть разделы, в которых можно описать распределение ответственности.

Миф второй: В Техническом задании часто очень много «воды».

Действительно, нередко ТЗ содержит общие сведения о системе, но они нужны. Например, мы обсуждали-обсуждали требования к системе, в результате одна команда поняла, что нужно разработать приложение под Windows, а другая — для браузера. Одна думала, что система называется так, а другая — по-другому. Вроде бы очевидные вещи, но они должны пониматься одинаково всеми членами команды и всеми привлеченными специалистами.

Миф третий: Требования к персоналу, серверам, каналам связи, режимам работы администраторов являются лишними, так как находятся в сфере ответственности заказчика.

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

Подробнее составление ТЗ мы рассматриваем в отдельной статье Разработка Технического задания по ГОСТ 34 легко и просто.

4. Разработка технического проекта


Итак, двигаемся дальше. Вот перед вами (мы же допустили, что вы — проектант) Техническое Задание на строительство больницы с огромным перечнем требований. Сидите вы, смотрите грустно на 100 страниц ТЗ, и не знаете, с чего начать. Потом картина постепенно начинает проясняться. Думаете: ага, нам нужно столько-то метров под палаты, столько-то под кухню, столько-то на зону отдыха, лабораторию, сестринские и так далее и тому подобное. Затем на свет появляется множество набросков, эскизов, вариантов, вы переделываете, меняете помещения местами, короче, ищете оптимальные соотношения. Потом переходите к деталям — чертежи, чертежи, чертежи: стены, двери, окна, кабель-каналы, проводка, трубы, вентиляция, межэтажные перекрытия, материалы стен, отделка… и прочее, и прочее, и прочее. В общем, подробно-подробно, насколько это возможно, очерчиваете то, как должна выглядеть и функционировать больница после завершения строительства.

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

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

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

5. Разработка рабочей документации


Логичный вопрос — какая такая рабочая документация для больницы? Неужто инструкция по уборке коридора?! Шутки шутками, а противопожарную систему надо обслуживать? Надо. А лифты? А компьютерные сети? А водопровод? «Ну, это к проекту больницы не относится!» — скажете вы. Да, отчасти это так. Однако больница сдается заказчику как единое целое, и все системы должны иметь соответствующую эксплуатационную документацию. И чтобы сдача была быстрой, успешной, вы составите перечень требований, напротив которых можно ставить галочку, если все в порядке.

Наличие руководств пользователя и администратора для ИС — это стандарт, с этим все понятно. А вот о процессе сдачи-приемки системы заказчику часто задумываются в последний момент. И напрасно. Для этого существует прекрасный документ «Программа и методика испытаний», тоже обычно относящийся к рабочим документам. Он представляет собой своего рода чек-лист, содержащий описание проверочных процедур. Если данный документ составлен заранее (а сценарий, как основу, можно из техпроекта позаимствовать), то у разработчиков будет четкий критерий приемки их работ. Вам не понадобится собственным или аутсорсинговым программистам доказывать свою правоту — есть сценарий, он должен отрабатываться. И с заказчиком проблем не будет — фантазия уже ограничена документом.

А где же здесь место для Agile?


Одни люди двумя руками за Agile (или иные «гибкие» методы разработки), другие резко против. У автора же статьи свое мнение: Agile очень хорош, но к месту. А используют его обычно не по назначению.

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

Заказчик думает: и сколько меня еще будут по кругу за нос водить?

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

В-третьих, в большом проекте могут присутствовать этапы, где требуется именно ОКР, и тогда Agile в помощь. Никто не мешает на уровне оперативного планирования пользоваться спринтами. Наоборот, очень удобная технология: планировать на неделю или две и постоянно контролировать результат. На стратегическом уровне — каскадное планирование, на тактическом — итеративное. И никаких противоречий!

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

Где узнать подробнее о проектировании информационных систем?


Книжек на эту тему много. Толстых и не очень. Но книжка — это всегда ЧУЖОЙ опыт. А у вас другой характер, отличная ситуация и проект. Есть такая система ТРИЗ — теория решения изобретательских задач. Ее автор, Альтшуллер, пытается объяснить шаги, которые нужно предпринять, чтобы изобрести что-либо. Получается? Как правило, нет. Принципы излагаются интересные, полезные, но единого шаблона по изобретению не выходит. Каждый человек думает и творит по-своему, да и невозможно этому научить, можно только научиться. Чужой опыт использовать надо, глупо не использовать, но он должен быть пережит (переработан) вами, переложен на ВАШЕ мышление. Скопировать чудо не удастся.

Если вы хотите научиться проектированию, предлагаю взять за основу ГОСТы 34-й серии. Это настоящий шедевр, результат работы целых НИИ. В ходе разработки данных стандартов были изучены десятки (если не сотни) сложнейших проектов по автоматизации самых различных систем. Аккумулирован колоссальный опыт.

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

Читайте продолжение: Некоторые заметки по проектированию информационных систем.

Читайте другие статьи автора:

Поделиться публикацией

Комментарии 30

    0

    Спасибо

      +1
      Если в гибких методологиях результат виден «по факту».
      То при водопаде, результат виден только в конце.
      Я не спорю, что нужен этап проектирования.
      Но разработать «все и сразу» это дорого.
      В большинстве случаев «дешевле», заставлять программистов переделывать, пока не будет достигнут приемлемый результат.
      И да. Заказчики иногда путают прототип и реальное приложение.
        0
        Опять же, все зависит от масштабов. Для строительства баньки на участке проект не нужен, а многоквартирный дом — другое дело. Разработать простое мобильное приложение с 5-ю экранами можно и путем проб и ошибок, но если у вас в системе нужно реализовать несколько десятков взаимосвязанных объектов и сложную логику, то методом «научного тыка» будет долго и дорого. И результат быстро будет не увидеть, как ни крути.
          +1
          Так вся проблема, что «на берегу» все выглядит как «строительство баньки».
          А когда заказчику намекаешь, что тут может будет «многоквартирный дом», и в начале нужно хотя бы собрать требования, начинают уверять, что тут даже не «банька», а вообще «собачья конура». Ну а потом…
            0
            Вот для этого я и стараюсь сначала «продать» разработку ТЗ, а потом все уточняется. В процессе согласования ТЗ заказчик вовлекается в процесс и начинает понимать, что ему все-таки нужно и что это стоит. Это прием такой: вы типа риски снижаете, чуток платите, зато можете с ТЗ пойти куда угодно и получить оценку.
              0
              Какое ТЗ, и так все очевидно :-)
                +1
                — Но вы же утвердили техническое задание?!
                — Техническое задание? Мы думали, ТЗ — это «точка зрения», и у нас их несколько…
                  0
                  Ага, и еще: «Мы же это говорили уже тыщу раз». Вот поэтому составляю после каждого разговора протокол, где излагаются решения и задачи на исполнение. Потом тыкаю протоколами.
                    0
                    Шикарно!
            +1
            К сожалению, очень часто, «проповедуя» Agile, разработчики пытаются замаскировать свое неумение разработать проект системы (либо даже не знают, что это возможно). Они действуют самым удобным для них образом: будем допиливать и допиливать за деньги заказчика.

            Agile не для ИТ, и не про ИТ. Agile для бизнеса и про бизнес.
            И это не отменяет того факта, что без умения проектировать, ничего хорошего не получится. С или без agile.

            ps
            и да, agile не универсальное решение. строить (здания) по agile не очень.

              0
              Agile не для ИТ, и не про ИТ. Agile для бизнеса и про бизнес.

              Интересная мысль, можете пояснить?
                +1

                Я могу попробовать.
                Главная выгода Agile для бизнеса:


                • быстрый выход на рынок
                • короткие фидбек циклы, что позволяет проводить быстрые эксперименты

                Потому что:


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

                В конкурентной среде (особенно такой динамичной, как в наши дни) у вотерфола почти нет шансов. Он непременно приведет к проваливанию сроков и разработке продукта, который, скорее всего, никому не нужен. Или, в лучшем случае, с огромным количеством фичей, которыми никто не пользуется.
                Главная задача ИТ в динамичном бизнесе — не разработка софта, как бы странно это не звучало. Главная задача — решение бизнес проблем более эффективно. Оптимизация текущих процессов, изобретение новых. Если вы поговорите с вашим заказчиком и выясните, что он проводит огромное количество ручных вычислений, и вы дадите ему формулку для Excel, на написание которой и обучение нужных людей вам понадобится 2 дня, но это увеличит продуктивность заказчика на 90%, то вам цены не будет!

                  0
                  По моему мнению, цитируя Ваше сообщение — «что он проводит огромное количество ручных вычислений» — этой проблемы в waterfall не может быть в принципе, если только не задаваться целью заставить проводить огромное количество ручных вычислений)
                  Такая ситуация — это плата за Agile и называть это недостатком waterfall — не совсем корректно)
                    0
                    По моему опыту, качественное ТЗ и техпроект экономят уйму времени, на разработку уходит в 2-3 раза меньше времени, т.к. разработчики кодят, а не гадают. И опять же, смотря что нужно. Если допилить пару фичей, то достаточно наброска, а не ТЗ. Если же у нас сотня объектов и сложная логика, то методом проб и ошибок 10 лет будешь двигаться. Да, первый результат покажешь очень быстро, а вот с конечным выйдет заминочка.
                    +2
                    Тут собственно говоря уже развернуто обсудили, почему agile — это про бизнес, а не про ИТ.

                    Бизнесу грубо говоря, глубоко до лампочки — scrum, waterfall, devops, etc.
                    У бизнеса основная проблема — что делать в условиях неопределенности: конкуренты, законы, потребители, глобализация, и т.д. В итоге, сказать, каков будет твой бизнес через год, два, три — вряд ли кто может. Если в этих условиях кто-то предложит бизнесу, а давай ты вложись в XXX, и через годик, другой, получишь вот такой профит. То любой зрелый бизнес понимает, что через годик, другой все переиграется, и XXX может станет не нужным.
                    Ответ, что делать в условиях неопределенности — уменьшить горизонт детального планирования, наладить сбор и анализ обратной связи, и короткими итерациями двигаться с счастью. Понятно, что и этот подход не панацея. В итоге приходится импровизировать, что собственно и есть «agile», т.е. проявлять ловкость (многие забывают, что agile это не только гибкий, но и ловкий, а применительно к бизнесу, ловкий как-то ближе). Т.е. agile — это не просто короткие итерации и прочие атрибуты, которые обычно связывают с термином «agile», а чуть шире, в целом ловкость и быстрая адаптируемость к внешним условиям.

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

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

                    Из этого ошибочно делают выводы, документация для проектирования не нужна вообще. (Документация нужна, необходимо только правильно выбрать уровень детализации) И документация никогда не нужна. (В других проектах, менее динамичных, документация запросто может быть детальной и актуальной).
                      0
                      Целиком поддерживаю! Вы читаете мои мысли, которые мне не удалось выразить в этой статье. Главное правило: не пользоваться тупо методиками, какими бы совершенными они ни были, а голову включать всегда и везде! И Один метод не исключает другого. Базовую функциональность спроектировали по вотерфолу, а замет поюзали, попробовали, поняли, что и где неудобно и чего не хватает: пошла гибкая разработка. А вот выбор, что есть базовое, с чем мы можем выйти на рынок, надо определять в каждом конкретном случае отдельно.

                      В общем, вам от меня респект и уважуха!
                  +3
                  Как для вводной статьи — неплохо, хоть и немного рывками и местами несвязно.
                  Но вот холисрач Agile vs Waterfall — это вы зря:) Далее мое имхо, на основании моего опыта ИТ архитектора:
                  В любом проекте есть 3 взаимосвязанных параметра — сроки, деньги, результаты. Вы можете зафиксировать МАКСИМУМ два из них, оставшийся параметр всегда будет меняться. Что именно будет зафиксировано — зависит от рынка/проекта (в строительстве результат фиксированный, в разработке софта — результат часто «плавает») и заказчика (госуха — бюджет практически всегда фиксированный, да и сроки тоже). Нюанс в том, что находясь в начале проекта (если мы говорим действительно про большой проект, а не про «поход за пивом»), бывает очень сложно оценить, что именно, за сколько денег, и когда получим. И когда кто-то говорит клиенту «Я зафиксировал все три параметра» — это, мягко говоря, неправда. Обычно оказывается, что какой-то из параметров определен с зазором, позволяющим маневрировать «по ходу пьесы», но клиент этого просто не видит (нечеткое ТЗ, сроки и деньги с запасом :)).
                  Какую методологию выбрать — зависит именно от параметров и факторов, описанных выше:
                  • Если требуемый результат с большой вероятностью известен (строительство нового корпуса больницы, например), то Watefall — ваше все. Результат жестко зафиксирован, ну а сроки и деньги — как получится. Из минусов — результат будет виден в конце, и если вместо больницы получилась новая элитная многоэтажка — «ну извините, не сносить же теперь?».
                  • Если нужно разработать что-то новое, или «сделайте мне красиво!», ну или «к сентябрю хоть что-то должно быть!» — Agile наше все. На каждой итерации клиент видит какой-то результат, и может вносить коррективы (та самая пресловутая гибкость). Но срок (или деньги, ли и то и другое) подошел к концу — и «баста, карасики, приплыли!», клиент имеет то что имеет.

                  З.Ы. Я не касаюсь сейчас недобросовестности исполнителей, часто-густо прячущих за Agile свою некомпетенцию или нежелание что-то делать (самая частая фраза которую слышу «у нас ТЗ/документации нет, мы работаем по Agile!»). Тут поможет только понимание методологии, чтобы говорить с исполнителями на одном языке и понимать, где они пытаются обмануть. Ну или умение бить, не оставляя следов:)
                    0
                    Полностью согласен. Хочу уточнить. Во-первых, в рамках статьи и невозможно описать все. Ее цель — именно быть «вводной» и заставить людей задуматься. Правда, очень мало разработчиков видя смысл в тщательном проектировании. Во-вторых, и в вотерфоле требования меняются, без этого редко обходится. Но зато есть ТЗ, в котором все зафиксировано. Хочешь больше: пожалуйста допник. Хорошее ТЗ мне всегда очень помогает. И когда мы его с заказчиком согласовываем, заказчик уже погружается в проект и начинает формулировать нормально, что он хочет. Уже тем сам процесс составления ТЗ полезен. Вовлечь заказчика — дорогого стоит.
                      +1
                      Но зато есть ТЗ, в котором все зафиксировано

                      Не уверен что такие существуют в природе:) Самое большое и тщательно прописанное ТЗ (на финансовый инструмент), которое я видел, разрабатывалось и согласовывалось настолько долго, что устарело к моменту подписания (технологии и подходы к решению поменялись). Поэтому после подписания все участники концессии выдохнули, мысленно перекрестились, и больше старались про это ТЗ не вспоминать:)
                      Имхо, чем более творческий результат нужно получить, тем тяжелее на него написать ТЗ (особенно если не совсем понятно, что же в конце должно получиться, ну или цель уточняется по мере приближения к ней). Ну а чем тщательней прописано ТЗ, тем дольше оно согласовывается, и тем больше отрывается от реальности, умирая под горами канцелярита, который не понимают ни клиент, ни исполнитель (либо понимают каждый по-своему). Но заказчик да, вовлечен по самое не балуйся — правки, комментарии к правкам, замечания на коментарии к правкам, правки к замечаниям на коментарии к правкам…
                        0
                        Имхо, чем более творческий результат нужно получить, тем тяжелее на него написать ТЗ

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

                        А по поводу сложности написания ТЗ, все зависит от составителя. Для средней системы я обычно пишу за 2 недели, 2-3 недели согласовываю. Но здесь главное — заказчик рассказывает идею, а как она будет реализована, определяю я и согласовываю. Для этого надо понимать сам бизнес, как это должно быть реализовано. От заказчика ждать этого нецелесообразно. В этом-то собака и порылась. Ну и бывают заказчики-формалисты, особенно в госах.
                          0

                          Если там всё задание пишется за 25 человекодней, то понятно, почему waterfall работает. На таких небольших объёмах будет работать всё при минимальном здравомыслии участников и каком-нибудь отлаженном процессе. WF обычно встаёт колом, если в согласовании задействовано 5+ подразделений (30-50+ более-менее активных участников) и объём самой постановки за сотню чд. Это субъективно нижняя планка, когда нельзя выехать на 1-2-3 суперэкспертах, которые могут охватить весь проект.


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

                            +2
                            Ну собсно выше ответили — 2 недели на ТЗ и один эксперт — это маленькое ТЗ:) Попробуйте поучаствовать в проекте, когда есть пяток экспертов — писателей ТЗ, и несколько согласующих сторон (часто преследущих совершенно разные цели) — и узрейте весь ад Waterfall. Про просранные сроки я даже не говорю, это практически само собой разумеющееся. Но обязательно найдется кто-то, кто подписал ТЗ не читая, а на финальной приемке скажет «все это фигня, я не это имел в виду и вообще, я хочу шесть невидимых розовых линий». Собсно, после такого и понимаешь, что Agile очень даже неплох, если им аккуратно пользоваться, а User story mapping — очень класный довесок к традиционному ТЗ. Главное — клиента не пугать модными словечками:)
                            0
                            Никто не обнимет необъятное. (с) К.Прутков

                            Чем больше проект, тем труднее написать полное качественное ТЗ сразу, до начала написания кода.
                            Поэтому при всем желании, надо «есть слона по частям».
                            Т.е. делить проект на модули, которые могут выполняться параллельно, причем даже в том случае, если для «смежных» модулей ТЗ не готово.

                            При этом естественно система будет «не оптимальной», т.к. как минимум нужно закладывать «гибкость».
                              0
                              Конечно, сложные системы разбиваются на подсистемы, каждая из которых может по своей методике разрабатываться и разными командами. Куда без модульности? И даже в рамках одной небольшой системы делишь все на функциональные блоки. В этом-то и состоит задача аналитиков и проектировщиков: разгрести кучу-малу требований и разбить их на блоки, очереди разработки и т.д.
                        +1
                        Интересно, спасибо!
                          0
                          Спасибо за статью!

                          Особенно хорошо написано про Agile)
                            0
                            Скажите пожалуйста, каким образом ваша схема описывает разработку информационной системы поисковика Google? А facebook? А чего-то менее масштабного, например, uber?

                            Есть у меня такое странное ощущение, что ваши схемы годятся только для больниц, домов престарелых и других замшелых учреждений, которым надо «внедрять ИТ». А тем, кто с помощью компьютеров деньги зарабатывает, ваши схемы, как мёртвому припарка?
                              0
                              Есть у меня такое странное ощущение, что ваши схемы годятся только для больниц, домов престарелых и других замшелых учреждений, которым надо «внедрять ИТ». А тем, кто с помощью компьютеров деньги зарабатывает, ваши схемы, как мёртвому припарка?

                              Если говорить про бизнес, то ведь сначала готовится пилот, MVP, а потом идут доработки. Базовую разработку лучше делать проектным методом. Мелкие и даже средние доработки — это всегда гибкие технологии, без вариантов, нечего там проектировать. Добавление каких-то крупных функциональных блоков лучше делать проектом, чтобы сначала все изучить, а потом кодить, иначе все посыпаться может.

                              Если сравнить с разработкой «железа», то сначала самолет проектируют, затем создают один или несколько опытных образцов и по результатам их сборки, испытаний, «допиливают». Более того, бывает во время строительства корабля вносятся такие изменения, что приходится прорезать несколько палуб, чтобы заменить какой-то крупный агрегат, установленные в трюме.

                              В общем, один метод не отменяет другого. Надо уметь владеть и тем, и тем. К сожалению, среди «проповедников» Agile много людей, которые не владеют проектным методом, поэтому его и хают. Для освоения проектного метода требуется 10-20 лет по факту (ИМХО), надо не только изучить сам подход на 3-4 длительных проектах, но и знать несколько предметных бизнес-областей изнутри (продажи, маркетинг, производство, склад, транспорт, бухгалтерия и т.д.) Этому не научить в институте, не освоить на раз-два, это дается только опытом, на собственных многочисленных ошибках. Легче придумать, почему это не нужно (опять же ИМХО). Но гибкие методы нужны, без них никак! Только использовать их нужно по уму.
                              +1
                              Насчет одного из подходов есть отличная шутка — В семье программиста в сказке «Три поросенка», спаслись поросята, строившие дом из г#вна и палок, быстрее, чем волк его разрушал)
                                0
                                Я боюсь, вас когда-нибудь сожгут на костре.
                                Кстати, вот если надо найти инвесторов, то действительно иногда следует сварганить что-нибудь по-быстрому, показать красивую картинку… а потом все переделать.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое