JavaRush /Курсы /Java Collections /Agile, Scrum, waterfall

Agile, Scrum, waterfall

Java Collections
8 уровень , 2 лекция
Открыта

— Итак, я хочу рассказать тебе про Agile и Scrum.

В начале 21 века представление о программировании перевернулось.

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

— Это как же?

— А вот так.

Был придуман максимально гибкий подход к управлению работой.

Основные концепции гибкой разработки:

  • люди и взаимодействие важнее процессов и инструментов;
  • работающий продукт важнее исчерпывающей документации;
  • сотрудничество с заказчиком важнее согласования условий контракта;
  • готовность к изменениям важнее следования первоначальному плану.

Принципы быстрой разработки:

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

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

Заказчик может рассказать, как он видит программу, но что-то он упускает, что-то считает самим собой разумеющимся.

Менеджер вообще должен переводить требования с языка программистов на язык заказчика и обратно.

Слишком много неопределённости.

Часто требования заказчика выглядят так: сделаете как-нибудь, потом покажите мне, если мне не понравится – переделайте.

— М-да. Как все запущено.

— Согласно новому видению, программисты больше не выпускают продукт или программу, они реализуют нужную заказчику функциональность.

— А в чем разница?

— Ну смотри, допустим, раньше на разработку программы уходил год. И только через первых полгода было уже на что посмотреть. Это как строить большой дом: сначала котлован, потом фундамент, стены, крыша, отделка и т.д.

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

Если учесть, что заказчик скорее всего сам точно не знает, чего хочет, то это очень разумный подход.

Допустим, хочет заказчик большой охотничий домик.

Построили ему маленький, он в нем пожил зиму и решил, что дом из дерева ему не нравится. Будем делать из кирпича в 4 слоя.

Пожил рядом с озером летом, а его комары заели. Он где-то слышал, что озеро – это круто, вот и хотел. А теперь ему озеро не надо. Так ведь и дом строить легче: нет озера – нет угрозы паводков, вот и можно строить дом не на сваях, а на земле, а это на 25% быстрее.

— Интересная аналогия. Неужто заказчик так часто меняет свои требования?

Agile, Scrum, waterfall - 1

— Да дело тут не в заказчике.

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

А во-вторых, разве требования заказчика – не главное? Ведь смысл всей этой работы – это сделать именно то, что заказчику нужно, а не то, что он сказал в самом начале делать.

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

Если в нем нет чего-то, что очень нужно заказчику, но про что забыли, никто это что-то делать не будет.

— Ясно. Работать по плану легче, но не все можно сделать по плану!

— Именно.

Поэтому были придуманы методики гибкой разработки.

И о самой популярно из них – Scrum — я тебе сегодня расскажу.

Основная фишка скрама – это разбиение разработки проекта на небольшие итерации – обычно 2-4 недели. Такая итерация называется «спринт».

Вначале спринта проводится «планирование спринта» — совещание часа на 3-4.

В конце проводится «демо» — демонстрация всех полностью завершенных задач.

Вот как обычно все происходит:

Перед самым первым спринтом, заказчик (или его представитель), формирует список требований – набор того, что должна уметь программа. Такие требования обычно называют «user story», а заказчика – «product owner».

Product owner переводится как владелец продукта, т.к. продукт пишется для него и он и только он определяет список требований – что надо, когда и в каком порядке.

Кроме того, product owner обычно еще назначает задачам приоритет. Сначала будут реализовываться задачи с самым высоким приоритетом. Весь список требований еще называют «product backlog» или «резерв продукта».

Когда начинается спринт, то все собираются на совещание. Ведет его обычно scrum-master: как правило это кто-то из команды. Цель совещания – отобрать задачи (user story) на текущий спринт (итерацию разработки).

Сначала каждой задаче дается коллективная приблизительная оценка в «абстрактных человеко-днях», их еще называют «story point». Затем команда решает, сколько задач она успеет сделать за этот спринт.

При этом команда сама решает, сколько задач она успеет сделать за спринт.

Допустим, product owner ожидал, что команда отберет 7 первых задач, а она отобрала всего 5, то задачи 6 и 7 переносятся на следующий спринт. Если product owner это не устраивает, он может повысить приоритет 6 и 7 задачи, чтобы их точно отобрали, но тогда из спринта выпадут какие-то другие задачи.

Также scrum master может предложить разбить часть задач на более мелкие и расставить им различные приоритеты, чтобы product owner оказался максимально довольным.

В этом и есть смысл совещания – задачи можно менять и разбивать, можно менять им приоритеты и т.д. Это именно та работа, которая не была видна в самом начале, но которая приносит очень много пользы.

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

— Да, как-то так.

Список задач, отобранных для спринта, называют sprint backlog или резерв спринта.

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

— Командная работа. Уважаю!

— Для лучшей наглядности, обычно предлагают отображать текущее состояние спринта на специальной доске:

Agile, Scrum, waterfall - 2

Обрати внимание на три колонки слева.

На стикерах пишутся краткие названия задач. А стикеры переклеиваются в другую колонку в зависимости от статуса (В планах, В процессе, Готово)

Справа ты видишь «диаграмму сгорания». Там по дням отображается список несделанных задач. В идеале за время спринта количество неготовых задач падает до нуля.

Когда спринт завершается, scrum-master проводит demo, на котором демонстрируется список всего, что полностью сделано.

Затем проводится «разбор полетов» — совещание тоже на пару часов. На нем обычно пытаются выяснить, что было сделано хорошо, а что (и как) можно было сделать лучше.

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

В середине спринта, иногда еще проводят «вычесывание» — совещание посвященное планированию следующего спринта. На нем обычно уточняют приоритеты задач, а так же можно разбить некоторые задачи на части и/или добавить новые задачи в product backlog – резерв продукта.

В принципе у меня все – это обзорная лекция, и на пальцах ее не объяснить, но вот тут ты можешь почитать пару хороших статей на эту тему:

http://scrum.org.ua/wp-content/uploads/2008/12/scrum_xp-from-the-trenches-rus-final.pdf

http://ru.wikipedia.org/wiki/SCRUM

Комментарии (32)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Oleh Velychko Уровень 47 Expert
28 февраля 2024
Сначала хотел скипнуть прочтение книги, а прочитал с удовольствием. Конечно не за 2-3 часа, если обдумывать прочитанное ) Книга не про программирование, но ценность для программиста нас несёт весомую: хоть становится понятно как работа устроена. А не то что "вы тут учитесь прогать, а заводской автобус вас довезет до ворот как научитесь, и там разбирайтесь" )
milniy87 Уровень 41
4 июля 2023
интересно а как теперь разрабатывают?
Нейросеть Уровень 41
6 сентября 2023
Да так же как в лекции
Константин Уровень 51
3 марта 2023
"Обычно за 2-3 спринта можно выявить основные проблемы, которые мешают команде работать эффективнее, и устранить их." Теперь мы знаем, что из-за скрама увольняют джуна.
28 апреля 2024
🤣🤣🤣мне тоже страшно стало
Василий Чи Уровень 51
28 января 2023
Где waterfall — что за wtf? Одна скрамота..)
Ilia lenskii Уровень 32
26 сентября 2022
Про scrum... Если бы это было в начале книги - Scrum ... Заметки с передовой, то я бы её бросил, но к сожалению, этот перл почти в самом конце книги. Что там написано в первоисточнике, не буду чекать, не интересно. Будучи в унике, разрабатывали проект с применением доктрины и принципов RUP (Rational Unified Process) и далее на работе более 10 лет продолжаем его применять. К чему это... Scrum это производная от RUP для небольших проектов 5-9 чел, когда RUP это подход к разработки корпоративного уровня.
Ilia lenskii Уровень 32
26 сентября 2022
Далее к написанному выше, про актуальность скрама в нынешних пандемийных реалиях и вынужденной миграции целых стран...
Justinian Уровень 41 Master
5 июня 2025
И SCRUM и RUP относятся к разработке корпоративного уровня. У них разные сферы применения, разные методологии по сути и решают разные задачи разными способами. Я бы сравнил Скрам как леговое авто/грузовик, а RUP как большой самосвал от 40+ т. Но не забываем про гибриды, Скрамбаны, Рупскрамы и тд. Главное не методология как идея сама по себе. Мы отталкиваемся от задач, скрам возник из-за неспособности тяжелых методологий обеспечивать разработку в развивающихся с космической скоростью ИТ-компаниях когда бизнес контекст стремительно меняется и нужны короткие циклы, документирование и регулирование вторично по отношению к необходимости как можно быстрее получить продакт инкремент и доставить новую фичу клиентам, пока этого не сделали конкуренты или тренды не ушли в другое место. Много юзкейсов, но когда нужно 1000, 10000, или 1000000 разработчиков покрыть динамически меняющиеся требования компании, то скрам отлично подходит для декомпозиции проектов и команд. С RUP не работал, но это просто еще один инструмент. Не бывает хороших или плохих инструментов. Есть более уместные по контексту или нет. Значение СКРАМ и эджайла, помимо того что это стандарт де-факто для ИТ отрасли в том, чтобы продемонстрировать адаптацию инженеров под условия. Что мы не рабы парадигм, инструментов, паттернов. Когда бородатые дядьки увидели, что.контекст поменялся, взрывообразный рост ИТ компаний, продуктов, рынка и эффективность работы программистов пошла вниз, сформировали новый подход под новый контекст. Это то, что программисты постоянно делают в рамках работы. Когда мы видим что какой-то инструмент, подход более не приносит пользы, тормозит систему, мы не используем инструмент ради инструмента. Мы адаптируемся, анализируем, учитываем контекст и выбираем наиболее уместное в данном контексте решение. Если надо отбросить старое и сформировать новый подход, не проблема. Проблема, контекст, инструмент, уместность. Вместо хороший, плохой, крутой, новый, старый
Сергей Смарт Уровень 51
20 сентября 2022
Ох уж эти заказчики, как дети малые)
LuneFox Уровень 41 Expert
8 марта 2022
Стыд и скрам.
Vladrip Уровень 41
17 октября 2021
♂️Scrum master♂️
Уровень 1
20 января 2021
— Итак, я хочу рассказать тебе про Agile и Scrum. Но расскажу только про скрам...
Anna Avilova Уровень 51
27 апреля 2022
я так понимаю, что принцип гибкости (Agile), подразумевается априори при применении принципов Scrum... а вот про Waterfall, заявленный в названии лекции, хотелось бы хоть пару слов услышать ))) ... ну, к этому уровню, думаю, уже все привыкли
Нейросеть Уровень 41
6 сентября 2023
Ну да, SCRUM как разновидность Agile
Pavlo Buidenkov Уровень 41
29 мая 2020
как жаль что на практике в разработке ПО многие забывают, что отцами-создателями Agile (Kent Beck, Martin Fowler, Robert T. Martin ...) была четко освещена важность юнит тестов кода и важность TDD (Test Driven Development). Если природа Agile проекта это постоянная изменяемость, то юнит тесты и хороший QA это как подушка безопасности, если этого нет, то проект который чуть сложнее простого CRUD просто обречен на провал. Разработчики просто прогорают в таких конторах и увольняются. Эта картинка с побитым менеджером и есть пример что происходит на практике если тебе 3-infinity раза за твой 2-x недельный спринт менеджер прийдет и скажет что что-то нужно поменять. Без юнит тестов ты можешь даже потерять уже сделанную работу и привнести новые баги. Юнит тестами конечно все баги не отловишь и тут нужен хороший QA желательно автоматизированный. на заметочку: валидатор javarush написан чуть более чем полностью с использованием JUnit. Создатель JUnit - Kent Beck он же один из евангелистов Agile и TDD. Это ни о чем не говорит? Создание таких крутых проeктов как javarush это "не поле перейти", и тут нужны знание best practices как в архитектуре так и в простых вещах как Unit Testing ... совет на будущее как отличить хорошую компанию/команду от плохой: (сначала самому выучить TDD и BDD методологии разработки, отдельно архитектуру проектов (гугли System Design Primer)) на интервью спросить: 1. пишут ли они в команде юнит тесты (TDD в идеале) 2. Как осуществляется QA (BDD в идеале) 3. как много внимания уделяют рефакторингу кода. 4. как они реагируют на feedback от заказчика (тут scrum, все дела должно быть адекватно сформулировано) 5. как они осуществляют логирование и сбор логов если клиент жалуется на ошибки в продукте 6. вообще спросить какие инструменты разработки они используют (Git, CI/CD tools, Harbour, Docker, Sonarqube ... если не используют Git то вообще зашквар! бегите оттуда!) Если ответы не внятные то вам точно не хотелось бы работать в такой компании.
Ilia lenskii Уровень 32
22 сентября 2022
" CRUD просто обречен на провал..." дальше не читал. Надеюсь вы уже нашли себе работу и на практике поняли что написали фигню.