Когда хорошая идея становится популярной - все начинают пересказывать её "как поняли". В итоге в информационном поле от изначальной идеи остаётся настолько мало, что её перестают воспринимать всерьёз. Но когда я, изучая такие идеи, возвращаюсь к контексту их появления и исследую исходные предположения, на которых они основаны, я всегда поражаюсь их изначальной простоте и эффективности. И это закономерно, ведь если изначальная идея была бы никудышной - она бы и не стала популярной.
В этой статье я хочу рассказать о двух таких идеях: Scrum и ООП. В своё время они обе были прорывными и эффективными, но превратились в cargo-культ с десятками интерпретаций. Я же хочу рассказать вам об исходных предположениях, на которых они основаны, и контексте их появления, чтобы вы смогли использовать эти отличные идеи для своей выгоды.
Scrum
Изначальная идея
Возьмём книгу Джеффа Сазерленда "Scrum: искусство выполнять вдвое больше работы за вдвое меньшее время". Сазерленд - это один из создателей Scrum, а эта книга рассказывает историю возникновения методологии и её основные принципы. Это как раз то, что нам нужно. Будем опираться на неё.
Жизненный опыт Джеффа привёл его к следующим мыслям:
Адаптация - Эффективно выживают только те, кто умеет адаптироваться к изменениям
Ценность - Производство продукта, не имеющего подлинной ценности - это безумие
Команда - Небольшие (7±2 человека) сплочённые команды достигают результата быстрее, чем набор разрозненных специалистов
Опираясь на эти предположения мы можем сформулировать стратегию:
Проект выполняется небольшой сплочённой командой в несколько подходов. В конце каждого подхода команда поставляет клиенту готовую и ценную часть продукта. На основе результатов подхода план проекта адаптируется
Фактически - мы получили Agile
Реализовать эту стратегию можно разными способами, которые приведут нас к разным методологиям. Мы рассмотрим способ, который приведёт нас к Scrum.
"Подход" мы будем называть "спринтом". Каждый спринт выполняется по циклу Деминга-Шухарта. Почему именно по нему? Потому что создатели Scrum посчитали его подходящей адаптационной моделью. Можно было бы взять и другую модель, и тогда мы бы получили другую методологию.

Как работает цикл Деминга-Шухарта:
Сначала мы выдвигаем гипотезу: план. Мы предполагаем, что если мы будем делать что-то ка��-то, то достигнем цели (Plan)
Потом мы следуем этому плану (Do)
Когда план выполнен, тогда мы проверяем, как хорошо мы достигли поставленной цели. А если не достигли, то почему (Check)
На основании этих данных (полученных экспериментальным путём!) мы изменяем свой рабочий процесс (Act) и идём проверять его эффективность на следующем цикле
А теперь соотнесём эти 4 этапа с "ритуалами" Scrum:
"Планирование спринта" - это "Plan"
"Обзор с клиентом" - это "Check"
"Ретроспектива" - это "Act"
"Ежедневный Scrum" - это "Do". Этот этап превратили в самостоятельный маленький цикл Деминга-Шухарта, где Check/Act/Plan выполняются ежедневно в начале рабочего дня

Основа готова. Собираем команду и идём работать. Роли, backlog, user stories и т.д. - это дополнения, необходимые для плавной работы.
Что пошло не так

В изначальном варианте Scrum спринт длился 1 месяц. Ни 2 недели! Ни, тем более, 1 неделю! Месяц! Одна из целей спринта - это поставить клиенту законченную и полезную версию продукта. Если раньше, в проекте на 6 месяцев, мы занимались сначала только сбором требований (1 месяц), потом только анализом (ещё 1 месяц), и только потом реализацией (4 месяца), то по Scrum проект разбивается на 6 спринтов-месяцев, где эти 3 фазы повторяются в каждом спринте.
Подумайте, к чему приводят недельные спринты:
У вас нет времени на сбор требований и анализ. При спринте в 1 месяц вы можете заниматься подготовкой ~ 1 неделю. Вы продумываете план, критерии завершённости, архитектуру, распределяете задачи. При спринте в 1 неделю на это всё у вас есть максимум 1 день. О какой архитектуре или стратегическом планировании тут можно говорить? У вас даже нет времени пообщаться с клиентом, чтобы обновить модель предметной области
У вас нет времени на реализацию. У вас осталось 4 дня, за которые нужно успеть реализовать полноценный Epic. Вы не справляетесь, и вынуждены делить 1 Epic на несколько спринтов. Но пока весь Epic не готов - вы не можете заливать его на PROD. И тогда мы выбираем из 2 зол: либо мы делим Epic на отдельные истории, получая не консистентный UI и кашу в коде; либо релизимся раз в несколько спринтов, что противоречит заявленной стратегии (1 подход = 1 релиз). И тогда зачем вообще сокращать спринт до 1 недели?
Этап планирования становится бессмысленным. Зачем что-либо планировать, если можно сделать "как поняли", показать клиенту, а потом исправлять с его слов? Но во время планирования мы определяем критерии завершённости, которые позже используем на этапах Check и Act. Нет планирования = нет критериев завершённости = нет данных для улучшения процесса
Невозможно распараллелить работу. При планировании на 1 месяц можно создать диаграмму PERT, перетасовать её, чтобы получились несколько параллельных веток, и отдать эти ветки разработчикам. При планировании на 1 неделю это не эффективно. Как следствие на проекте уже не могут работать 7 человек. Команду сокращают до 2-3 человек, что удлиняет время работы над проектом, и не позволяет компании получить на рынке конкурентное преимущество за счёт быстрой сдачи проектов

В изначальной версии Scrum каждый "ритуал" соотносится с этапом цикла Деминга-Шухарта. Ни один из них нельзя выкидывать! Отказавшись от любого из этих ритуалов вы отказываетесь от всего цикла целиком.
Без планирования у вас нет критериев завершённости, чтобы сравнить "ожидание" и "результат". Без ретроспективы вы не улучшаете производственный процесс, а значит не адаптируетесь. Ежедневному Scrum и обзору с клиентом повезло больше, их выкидывают редко. Скорее всего, потому что они позволяют менеджерам "держать руку на пульсе" и контролировать выполнение проекта. Поэтому менеджеры их защищают.
Напомню наши ценности из начала статьи: Адаптация, Ценность, Команда. Если вы выкидываете хотя бы один из ритуалов, то забудьте об Адаптации. Никаких улучшений со временем не будет.
Можно ещё много чего сказать о том, что пошло не так со Scrum. Agile методологии сложны. Это набор принципов и ценностей, которые не связанны между собой логически. А значит всегда есть соблазн что-то выкинуть или изменить, ведь трудно понять, на что это повлияет. Когда-нибудь мы, как сообщество, решим эту проблему. Но не сегодня.
А теперь, давайте окунёмся в мир инженеров.
Объектно-ориентированная парадигма
Изначальная идея
Эта история началась в Xerox PARC. Инженеры этого исследовательского центра работали над революционной идеей: оконным графическим интерфейсом.
Чтобы понимать контекст: в то время все операции производились через консоль или перфокарты. Компьютерных мышей тогда не существовало даже как концепции. Так что идею создать первый в мире интерфейс с окнами и кнопками, который управляется компьютерной мышью, можно по праву назвать революционной.
И вот компьютерная мышь придумана и собрана, концепция интерфейса с окнами, менюшками и кнопками разработана. Есть даже идея для WYSIWYG текстового редактора. Но для программирования этого "добра" существовавшие тогда языки и методологии не подходили, потому что были заточены под один ввод-вывод. Инженерам PARC нужен был способ запрограммировать элементы интерфейса так, чтобы они могли быть независимыми (как например "окна"), но при этом могли взаимодействовать между собой (кнопка внутри одного окна открывает другое и т.п.). И вот что они придумали.
Они дали каждому элементу интерфейса "почтовый ящик". Теперь каждый элемент мог отправлять другим элементам "письма", а получатель "письма" мог на них как-то отреагировать (или не отреагировать, всё зависит от получателя). Давайте называть тех, кто может получать и отправлять письма "объектами", а сами письма будем называть "сообщениями".
Пример. Вы нажимаете на "крестик", чтобы закрыть окно с приложением. Объект кнопки посылает объекту операционной системы сообщение "я кнопка закрытия приложения (id) и на меня нажали". Операционная система отправляет сообщение объекту приложения "тебя хотят закрыть". Приложение подготавливает себя к закрытию и отправляет сообщение операционной системе "я приложение (id) готово к закрытию". После чего операционная система завершает процесс. А что случится, если приложению отправили сообщение о закрытии, но от него долго не поступает ответ? Вы видите на экране сообщение "Приложение не отвечает".
Так и появилась ООП, которое мы сейчас знаем. Системы в них - это набор объектов, которые могут посылать друг другу сообщения и реагировать на эти сообщения. По своему устройству это асинхронная система, потому что ответы на сообщения не предполагались. На основе этой парадигмы реализовали язык Smalltalk, на котором и запрограммировали первый в мире компьютер с графическим интерфейсом Xerox Alto.
А потом...
А потом Xerox не поняла, что с этим изобретением делать, и положила Alto пылиться на склад. В PARC приехал Стив Джобс, увидел Alto, и Apple создала Macintosh. А под вдохновением от Macintosh появилась графическая оболочка для MS-DOS под названием Windows. А Xerox всё ещё продаёт принтеры c 7253-й строчкой по капитализации. В общем, так им и надо. Нечего было недооценивать своих инженеров.
Давайте введём определение:
Объектно-ориентированная парадигма описывает систему как набор объектов, обменивающихся друг с другом сообщениями

Вот некоторые выводы, которые можно из этого сделать:
ООП видит систему как "подсеть". Можете сравнить это с несколькими телефонами и ноутбуками в квартире, связанными через Bluetooth (или через wi-fi, но тогда у них есть маршрутизатор. Кстати, вы только что открыли паттерн "Mediator"). Каждый такой телефон или ноутбук - это объект. Запросы по сети между ними - это сообщения
ООП отлично справляется с моделированием передачи данных, и никак не помогает в их трансформации. Если вам нужно превратить один тип данных в другой по каким то правилам - воспользуйтесь ФП или СП. А вот если нужно смоделировать общение между узлами сети, да ещё и асинхронное, то ООП в этом пока нет равных
Лучшее применение ООП находит в программировании UI, сетевом взаимодействии и программировании конечных автоматов
Что пошло не так
Всю проблему с ООП можно описать одним предложением: "Её используют там, где не нужно, и не используют там, где нужно".
Нет смысла моделировать всю систему через объекты. Если предположить, что "Программная система - это набор UseCase'ов по передаче, трансформации и хранению данных", то ООП хорошо справляется только с "передачей". Для трансформации лучше всего подходит функциональная парадигма. Для хранения (чтение и запись) - реляционная.
Вот хороший и лёгкий пример применения ООП. Вы пишете небольшую программную систему, и она может связываться с другими программными системами (через сеть или процессы). Представьте каждую внешнюю систему как объект. Предположим, что ваше приложение взаимодействует с базой данных, сервисом для отправки SMS и облачным хранилищем файлов. Создайте для каждого из них интерфейс (абстракция):
interface Database
{
public function saveUser(User $user): void;
public function getUser(UserId $id): ?User;
}
interface SmsService
{
public function send(Phone $number, string $text): void;
}
interface AmazonStorage
{
public function put(File $file): void;
public function get(FileId $id): ?File;
}
Потом создайте 2 реализации: одну для тестов, а другую для PROD (полиморфизм). Внутри реализации для PROD объект будет хранить адрес сервиса и credentials, самостоятельно настраивая и отправляя запросы по сети (инкапсуляция).
Пример с UI (крестик для закрытия окна) вы уже видели выше. Если вы пишете интерфейсы на JS, то там посылки сообщений используются почти для всего. Чаще они делаются через замыкание, но их можно превратить в объекты:
// Посылка сообщения `open` объекту `modal` при клике на кнопку
button.addEventListener('click', modal.open);
"Когда у вас в руках молоток - все вокруг становится похоже на гвоздь". Помните, что ООП - это про посылку сообщений. Используйте его для настраивания взаимодействия между изолированными программными модулями. А трансформацию данных оставьте ФП. Связка из этих двух парадигм - лучшее решение при создании приложений.
P.S. И прошу, не надо больше кошек, собак и машин. Вам нужны все данные из этих объектов, и по итогу вы просто делаете getters и setters для каждого поля. Для моделирования предметных областей лучше всего подойдёт ФП. Методологию можете прочитать в книге "Domain Modelling Made Functional" (Scott Wlaschin).
Итог
Даже хорошие идеи со временем могут преобразиться в худшую сторону. Понимание логики, стоящей за идеей, позволит вам понять её суть и использовать в свою пользу.
В этой статье мы рассмотрели 2 такие идеи:
Scrum - это Agile методология (Адаптивность, Ценность, Команда), которая реализована через цикл Деминга-Шухарта
ООП - это парадигма, которая рассматривает систему как набор объектов, обменивающихся сообщениями
Комментарии (156)

octoMax
24.10.2025 13:44А чем Scrum отличается (ну кроме лексики) от утренней планерки у директора металлургического комбината (ну или любой другой конторы)? Я первый раз на такой "скрам" попал в 7 лет, когда садик уже закончился, а школа не началась. Целый месяц на таких скрамах сидел. По сути никакого отличия кроме "я вчера писал код для фичи А, а сегодня буду переписывать, так как продакт передумал" VS "я вчера ..ля как последний ...к ...ля работал над этими ...ми деталями к заказ-наряду, а сегодня утром выясняется, что они ...й не .... и вообще надо делать было другое"
Скрам это тупо маркетинговая обертка над банальной планеркой
lifespirit
24.10.2025 13:44В целом не отличается ничем, но, как обычно, есть ньюанс. Если вы не завод а, например, огромная ИТ корпорация, и вы пытаетесь выпустить нечто на рынок, то для многих (очень многих) людей оказывается откровением что:
не нужно составлять планы "как я буду год строить платформу" тратя кучу времени и ресурсов на планирование чего-то что никогда не случится.
Команда из 5-7 человек из разных отделов, закрепленная за проектом эффективнее чем "если тебе нужна виртуалка напиши заявку в отдел виртуализации и жди согласования всех менеджеров 2 недели", "если тебе нужен репозиторий заведи заявку и жди со��ласования 20 ИБшников целый месяц".
У продукта должен быть цикл проверки состоятельности с реальным решением его дальнейшей судьбы не раз в 5 лет.
Лично я думаю что в целом scrum - естественный враг бюрократии. И в результате его превратили в непонятно что пытаясь продать максимально бюрократизированным кампаниям.

JBFW
24.10.2025 13:44Тут еще тот нюанс, что слово "команда из 5-7 человек" не надо понимать слишком буквально: речь идет именно о том, что если для задачи надо всего 5 чел - то и надо взять команду в 5 чел чтобы они ее делали, а не растягивать по всем инстанциям.
Командой, не всем колхозом.Но люди склонны абсолютизировать, и начинают "собирать команду", когда достаточно одного Васи Пупкина. "У нас же написано - команда должна быть!!!"

releyshic
24.10.2025 13:44" "если тебе нужна виртуалка напиши заявку в отдел виртуализации и жди согласования всех менеджеров 2 недели", всё гораздо проще должно быть МенеджерСогласований.Согласовать(отделВиртуализации, списокМенеджеров);

MrShnaider Автор
24.10.2025 13:44Наверно, вы имели ввиду: чем отличается "Ежедневный Scrum" (он же stand-up встреча) от планёрки. Потому что Scrum - это методология организации деятельности, и это далеко не только stand-up'ы. По своей сути - не отличается. Stand-up это действительно планёрка (за исключением нюансов, связанных с PDCA-циклом).
Но в вашем комментарии я заметил боль: "На планёрке мы рассказываем о том, что будем переделывать, потому что заказчик передумал". Такие ситуации говорят о нездоровом рабочем процессе. И часто означают некомпетентность менеджеров: линейного (бригадира) и проектного (начальника цеха).
Деятельность исполнителей должна иметь смысл. Попадая в ситуацию, в которой их заставили делать ненужную работу, они чувствуют себя "дураками", а свою деятельность перестают считать полезной. При этом они сами ничего не могут с этим сделать, что вызывает у них ещё больше негативных эмоций.
Если говорить про Scrum, то это решается "планированием спринт��". Когда заказчик согласился с "критериями завершённости" спринта, тогда программисты идут работать, и план на спринт больше никто не изменяет. Приоритеты никто не трогает и люди спокойно работают в течении всего выделенного времени (а это, как и написано в статье, от 2 недель до 1 месяца)
Если у вас часто происходят такие ситуации со сменой приоритетов, то вашим менеджерам нужно больше компетенций. Ну или вам, чтобы им это объяснить.

themen2
24.10.2025 13:44200%. Но попробуй, сделай замечание такое менеджерам. Они сразу же обидятся и скажут тебе, что ты не гибкий... У работника нету власти, кроме как уйти

thethee
24.10.2025 13:44С менеджерами можно и нужно спорить. Иногда не хватает веса аргументов, можно привести в пример эту статью, тут довольно хорошо показано каким скрам должен был быть и почему, в чем его плюсы. И месячные спринты намного стабильнее и гибче недельных и двух-недельных на самом деле. Не потому что в них больше времени чтобы "влететь" с задачей во время разработки, а потому что в них есть целая первая неделя на проработку и анализ требований. В это время уже всякие багфиксы/техдолг выполняются, пока идёт итерация с конечным заказчиком ПО, и вместо того чтобы переделывать полу-написанный код, заказчик приходит с вполне конкретными хотелками.
Это не всегда работает, потому что недели может быть мало, но в здоровом процессе, все что не успели проработать за первую неделю улетает на следующий месяц. Это не так долго на самом деле, как может показаться. Тем более что у аналитиков за это время будет больше времени подготовить и причесать хотелки, и в следующий спринт/релиз это будет выполнено даже качественнее, чем в этот.
Но так мало кто работает. Все хотят быстрее циклы, чтобы якобы быстрее улучшаться, но времени на улучшения просто не остаётся. И релизы начинают по несколько спринтов идти, и даже сдвигаются из-за бардака в постановке задач, и в итоге двухнедельные делают только хуже
Недельные ещё хуже, в недельные только мелкие задачи помещаются и там приходится декомпозировать и всякие feature-флаги использовать, что тоже плохо в некоторых случаях, т.к. контекст меняется слишком часто. Вместо того чтобы 2 недели потратить на задачу целиком (с обсуждениями и аналитикой), 2 дня тратится на кусок, он скрывается, потом в следующий спринт опять 2-3 дня на кусочек, но надо восстановить контекст чё там в этой задаче, а самое плохое, это то что параллельно аналитики/заказчик/архитектор что-то передумали, т.к. времени на аналитику не выделено, а заказчик хочет фичу как можно раньше и даже этот уже написанный кусок можно стирать и писать заново.
И на самом деле фича формально берется в работу раньше (код пишется раньше), но получается либо хуже, либо дольше, либо и то и другое.

Alex_Dan
24.10.2025 13:44" Деятельность исполнителей должна иметь смысл. Попадая в ситуацию, в которой их заставили делать ненужную работу, они чувствуют себя "дураками", а свою деятельность перестают считать полезной. При этом они сами ничего не могут с этим сделать, что вызывает у них ещё больше негативных эмоций."
Низкий поклон, так и есть!
Ndochp
24.10.2025 13:44Эх, как же раздражают эти разработчики, которые хотят ТЗ до запятой, и чтобы код ушел сразу в прод и потом копировался из версии в версию. А то что для этого надо, чтобы на твой трехдневный код аналитик месяц пахал - их не волнует.
Дешевле же в человекочасах написать, показать и выкинуть 90%, потом написать оставшиеся 90% - и на это уйдет 2 спринта до прода, вместо трех только на аналитику.

hedgehog1
24.10.2025 13:44тогда программисты идут работать, и план на спринт больше никто не изменяет. Приоритеты никто не трогает и люди спокойно работают
Так только в фантастике бывает. Ну и у всех этих философов, которые книжки про методологии пишут.
Про нападки на ООП, даже писат�� лень, опять какие-то самопиарщики с дефицитом внимания, пытаются его на себя обратить.

rpc1
24.10.2025 13:44Для этого есть “ретро”, где обсуждаются эти моменты. Вопросы частой смены приоритетов должны обсуждаться именно здесь.

miksoft
24.10.2025 13:44Обсудили. И что это дает, кроме расхода времени и психологическую самопомощь?

rpc1
24.10.2025 13:44Если ретро у вас просто формальный ритуал, по результатам которого не принимаются никакие действия решающие проблемы, то нафиг он не сдался и надо ставить вопрос о целесообразности проведения ретроспективных митингов.

mvv-rus
24.10.2025 13:44Деятельность исполнителей должна иметь смысл.
Если пллатят зарплату, хорошую - то уже имеет. Ибо смысл деятельности исполнителей - чисто в получении ими денег в обмен на свой труд, на затраченные время и усилия. Стоит это принять и перестать заморачиваться ерундой, которая все равно лично вас не касается - и жить станет проще и приятнее.
А результат деятельности наемных работников им по-любому не принадлежит.

SvyatoslavS
24.10.2025 13:44Первое проект, второе - циклический процесс. Проект имеет начало и конец (получение готового продукта), процесс (на некотором временном промежутке) начала и конца не имеет и выдает продукт постоянно. В скраме разбили большой проект на кусочки с получением какой-то части конечного продукта в конце каждого спринта. Смысл в том что "за время пути собачка могла подрасти". Т.е. пока продукт реализуется по методологии водопада, требования заказчика и физический мир могут измениться. Или аналитики ошиблись, но понятно это становится только при начале эксплуатации программы. Скрам позволяет корректировать цели и методики не после получения конечного продукта, а по пути, после реализации некоторого еще не полного, но уже полезного заказчику ПО.
SvetlanaDen
Для меня актуальная тема — напоминает о том, что за модными терминами часто теряется суть изначально гениальных идей. Особенно развенчание мифов вокруг Scrum приятно видеть.
SanchoB
только вот изначальное гениальное идея не кому нужно было а вот это извращение...