Все видели тетрис, поэтому это очень удобная метафора для описания разных реальностей. Расскажу о работе программистов.
Один программист. В стакан падают фигурки-требования. На дне стакана лежит "мусор" - недозаполненные ряды кубиков. Это код, над которым программист работает. Завершённые ряды из стакана исчезают. Иногда программист допускает баг с неожиданными побочными эффектами - тогда вместо завершённого ряда на дне образуется ещё несколько рядов мусора. У программиста есть кнопка "рефакторинг" - если нажать на неё, то можно переставлять мусорные ряды вверх-вниз, авось по-новому станет удобнее. Пока программист рефакторит мусор, фигурки продолжают падать. Скорость падения увеличивается не с количеством уложенных рядов, а по мере приближения к очередному дедлайну, потом уменьшается снова.
Это редкий по нынешним временам идеал. Над серьёзными проектами работают команды.
Выглядит это так:
Рабочая группа. Два-три-четыре программиста в локальной сети. Каждый видит не только свой стакан, но и стаканы соседей, рядышком. Чтобы заполненный ряд исчез, его нужно заполнить не в одном стакане, а во всех сразу.
Неожиданные баги. Когда программист допускает баг, мусор вылезает в любом из стаканов. Если над проектом работают несколько групп, мусор может вылезти и в стаканах другой группы.
Рабочая группа с плохой коммуникацией. Всё, как в предыдущем случае, но каждый видит только свой стакан, поэтому невозможно предугадать, когда же исчезнут заполненные ряды и откуда берётся мусор.
Рабочая группа с общим кодом. Перегородок между стаканами соседей нету. Вместо них каждый видит один и тот же общий стакан двойной-тройной-четверной ширины, в который падают две-три-четыре фигурки одновременно. Каждый старается уложить свою фигурку поудобнее. Программисты порой мешают друг другу и путаются, где чья фигурка.
Парная разработка. За каждым компьютером сидят двое. Один двигает фигурки, другой тычет пальцем в экран и даёт советы. Время от времени второй не выдерживает, вырывает у первого клавиатуру, и они меняются ролями.
Ведущий программист. Параллельно с укладыванием собственных фигурок переключается на стаканы простых программистов и показывает, как надо заполнять ряды.
Тестер. Ему в стакан падают собранные ряды, он пробует их разломать. Если получается, забрасывает полученный мусор обратно в стаканы программистам.
Менеджер проекта. У него бездонный стакан-конвейер, в который быстро и пачками сыплются фигурки от заказчика. Менеджер фигурки не крутит и не укладывает. Он видит стаканы всех подчинённых сразу и распределяет фигурки по стаканам. Поскольку подчинённых много, то картинки стаканов маленькие, нечёткие и обновляются с задержкой. Менеджер видит только примерное количество мусора в стакане каждого и не знает, кому какие фигурки сейчас были бы удобнее.
Системный аналитик-архитектор. Получает от заказчика большие куски неправильной формы, режет их на подходящие фигурки и сыпет на конвейер менеджеру.
Перераздача обязанностей. Когда число и состав программистов в команде меняются, наличный мусор из стаканов собирают, перемешивают и в случайном порядке рассыпают по новым стаканам. Плюс ещё по нескольку рядов мусора каждому.
Производители средств разработки. Время от времени выпускают фигурки новых цветов и новой формы, а также стаканы новой ширины. Старые ряды в них не помещаются, а старые фигурки не стыкуются с новыми, поэтому программисты на время играют в несколько разных стаканов одновременно, а также разгребают новый неудобный мусор. Потом старые стаканы убирают, и программисты восклицают: "Как стало хорошо!"
Заказчик. Ему нет дела до тетриса - он играет в военную стратегию. Нетерпеливо кликает по фабрике, требуя новых бетонных полосок для дороги и крепостной стены. Фабрика отвечает индикатором прогресса и непонятными жалобами на нехватку прямых палок по четыре и избыток левых зюк. Заказчик закрывает окошко с бесполезными значками и кликает снова. Противник вот-вот прорвётся к столице!
Клиент заказчика. Он смотрит киношку, фэнтезийный боевик о битве за столицу. Простите, сейчас не смотрит. Он отошёл от телевизора в туалет, потом переключится на футбол, так что исход битвы никто уже не увидит. Потом допьёт пиво и ляжет спать - завтра с утра ему опять надо на работу, играть в тетрис...