avl (avl) wrote,
avl
avl

Categories:

8. Небоскребы не масштабируются!

(В оригинале Skyscrapers aren't scalable)

Программистов часто сравнивают со строителями небоскребов, плотин или дорог. И в некоторых аспектах это сравнение вполне адекватное.

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

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

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

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

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

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

Может показаться, что «ранний релиз» является противоположностью «инкрементальной разработке». Однако на самом деле они отлично работают вместе. Ранний релиз отдельных компонент означает, что каждый компонент может развиваться дальше независимо. А фактически это заставит вас выработать такие вещи, как непрерывная готовность во время разработки и версионирование протоколов.

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

Автор оригинала: Michael Nygard

Перевод мой. Если вы решите использовать его полностью или частично, не забудьте указать ссылку на мой живой журнал!
Tags: 97_things_architect_should_know, Программирование, Развитие
Subscribe

  • Один день на яхте

    Давно, очень давно хотелось оказаться на яхте. И вот наконец удалось реализовать мечту, пока что на 1 день. Главное — что оказалось, что никого из…

  • Подарок на 8 марта :)

    Фирма удивила, подарив 8 марта ВСЕМ сотрудникам смарт-часы от неизвестного производителя с нанесенным своим логотипом :) Да, в Словении 8 марта -…

  • Подводная лодка

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

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments