Прошлое
Хочется начать с личной истории. Почему? Да просто потому, что она у меня есть!
На заре моей карьеры я работал в одной компании.
Её названия я не могу назвать здесь. Могу лишь сказать, что оно начиналось на «мира-» и оканчивалось на «-тех». Эта компания меня вырастила: взяла как полу-разработчика и дорастила до менеджера. Я ей очень благодарен.
Но речь не об этом.
Перед тем как я оттуда ушел, где-то за год-полтора до этого, мы начала внедрять CMMI. Уровень три. Внедрять не просто, а весьма тяжеловесно. В это же время компания нашего основного заказчика внедряла второй уровень. Так что оказалось, что мой проект и ряд соседних проектов внедряли третий и второй уровни одновременно. Три плюс два иногда больше пяти.
Я ушёл.
Но, перед тем как уйти, я распечатал на корпоративном принтере две книги.
Когда впоследствии я стал миллионером, я купил их на амазоне. Вот одна их них: Agile Software Development Элистера Коуберна (Alistair Cockburn).
Я лежал в своей квартире на матрасе (тогда у меня ещё не было диванов) и читал эту книгу.
Она изменила мою жизнь. Я понял: «Вот оно! Вот ответ на вопросы, которые я даже не знал как задать». Эта книга изменила меня. Agile изменил мою жизнь. Я стал тем, кто я есть сейчас.
Шесть лет спустя, сида на том же самом месте, где я когда-то лежа читал книгу Элистера, я получаю имейл. Имейл от самого Элистера Коуберна: он принимает наше приглашение и едет в Киев.
Тот самый Элистер Коуберн едет в Киев. Вау!
Настоящее
Как-то я вдруг понял один интересный филологический момент. По-русски «настоящее» — это синоним слов «правдивый», «реальный». По-английски же «present» — синоним слова «gift», что означает подарок.
Не знаю к чему это, просто любопытно. Относиться к настоящему как к подарку вместо чего-то реального. Как минимум, это интересно.
Так вот. Agile изменил не только мою жизнь. Он изменил индустрию.
Давайте рассмотрим один из старых аналитических примеров.
Есть такая компания Standish Group, которая опрашивает сотни, тысячи софтверных компаний, собирает различную статистику по проектам, продуктам, а потом интегрирует её и продает этим же компаниям. Хорошая бизнес модель.
Их статистика утверждает, что, если у нас исходно был миллион гривен и план на год, то в 1994 году мы потратили бы 2.7 миллиона и завалили бы шесть проектов из семи. В 2004 — ушло бы всего 1.7 миллиона и два из трех проектов были бы неуспешны. Мы, похоже, намного улучшились.
Как говорит мой друг Робин Даймонд (Robin Dymond): «We suck less».
Семнадцать крепких белых американцев в 2001 году после трех дней споров подписали Agile-манифест. Они пришли к четырём простым высказываниям о ценностях. Двенадцать принципов, в которых намного больше сути Agile, они написали уже позже.
За всё это время было написано бесконечное число книг и статей об Agile. Хотя тех, что на самом деле поменяли индустрию, немного. Когда вы оказываетесь в крутом книжном магазине, мой вам совет — оставляйте дома кошельки и кредитки. Это невыносимо.
Манифест дал рост новым движениям.
Отдельного внимания стоят Software и Business Craftsmanship.
Первое — это движении, целью которого является восстановление внимания на ремесленничество и профессионализме программирования.
Business Craftsmanship — про выход ценностей Agile и накопленного нами опыта вне разработки софта.
Кроме движений появляются новые стили.
Сейчас многие говорят о Specification by Example. Это интересная практика.
Так много всего случилось за все эти годы. Мы стали более успешными. Дали рост новым движениям.
Наступило светлое будущее. А?
Мое лично мнение таково: если Agile и стал мейнстримом в Украине, то всё же не таким уж и большим.
Будущее
Говоря о будущем, хочется поговорить о сотовых телефонах.
Давайте вспомним, какими они были на заре капитализма в Украине. Вот у меня, кстати, есть один такой аппарат. Он не такой уж и большой, как ни странно. Я думал, они были больше. Он почти помещается в кармане.
Помните, как было раньше. «Алло, братан, я те тут по сотовому звоню, типа!». Ну или «Алло, типа, набери меня на сотовый-на!». Ну, или как-то так.
Сегодня мобильные есть у каждого. Это означает, что они стали нормой. Сегодня не говорят слово «мобильный», сегодня это подразумевают. Когда я оставляю свой номер телефона, подразумевается, что это мой мобильный.
У меня к вам вопрос – стал ли Agile нормой?
У меня на этот счет есть теория. Называется «серый маргинал и статус кво».
Пока мы говорим «Agile» — мы подразумеваем, что есть «другой» способ существования. Что может быть «не-Agile». То есть, пока мы называем конференции «Agile что-то там» или книги «Agile что-то там», мы маргинализируем Agile. Вытесняем его. Подразумеваем некоторый status quo, которому противостоит Agile.
Давайте вспомним конец восьмидесятых. Все говорили об объектах. Инкапсуляция, полиморфизм и прочие термины. Но главное — объекты. Меня спрашивал друг в восьмом классе, пишу ли уже я с объектами. Я отвечал, что вот поставлю Турбо Паскаль 7 вместо 5 и начну.
В конце девяностых все бредили Rational Unified. Все говорили про моделирание, роли и фазы и что-то там еще.
Когда перестали говорить? Когда все внедрили у себя RUP, и он стал status quo.
Вы слышали, чтоб Apple или Google говорили о своем процессе? Я, если и слышал, про Скрам в Гугле, то только из уст Джеффа Сазерленда (Jeff Sutherland) – который, будучи консультантом, подпиаривает себя. Похоже, молчание о процессе – признах успеха.
Но давайте же послушаем, что про все это думает гуру Майк Кон (Mike Cohn). Майк — автор трёх классных книг по Agile. Он научился генерировать классный контент. Не спрашивайте меня как. Часть следующей книги содержит немного из предыдущей, но, тем не менее, книги суперские. Всем, у кого на работе есть принтер, советую почитать.
Итак, вот что незадолго до меня сказал Майк Кон:
«Я хочу, чтоб ушли все бренды. No Scrum. No XP.
Меня сегодня никто не спрашивает пишу ли я код на руби с использованием ООП.
Я надеюсь, мы перестанем вообще использовать слово “Agile” – а просто делать его».
Вот как. Его, как мы видим, никто не спрашивает, пишет ли он на ООП. Он, правда, не является подписчиком Agile-манифеста и, возможно, отчасти из-за этого хочет, что мы перестали использовать слово «Agile». Но вряд ли только поэтому.
Майк прав. Моя теория серого маргинала подтверждается.
Agile — это бренд сам по себе. Но и в нём самом есть подбренды.
Какой, например?
Правильный ответ – канбан. Я и правда считаю, что Канбан — это не про аджайл на самом деле. Ведь канбаном можно делать водопадный проект.
Внутри Agile ещё есть бренды. Они отмирают потихоньку. Все больше и больше говорят про Скрам, забывая XP. Но эти трения ещё есть.
Я говорил про три вещи: прошлое, настоящее и будущее.
Хочется теперь сказать про проекцию этих фактов на сегодняшнюю ситуацию.
Как говорят «сегодня — это вчерашнее завтра». Мы творцы будущего. И пока мы не перестанем говорить про аджайл, он будет в оппозиции.
Но я считаю, что ещё рано остановиться и не говорить об аджайл. С одной стороны нам стоит остановиться и перестать маргинализировать, с другой — рано. Я себе сегодня противоречу.
Но что сегодня status quo? Если раньше это был водопад, то сегодня это нечто другое. Сегодня status quo – ЛЖЕ-AGILE.
Это когда этикетка есть, а начинки нет. Многие компании используют этот успешный бренд. Видели объявления типа «ищется Agile Java Developer». Вот это я как раз и имею в виду.
Я считаю своей миссией говорить про Agile. Громко.
Говорят, что нет серебряной пули.
Её может и нет. Но, исходя из своего опыта, я готов утверждать, что есть супер клей. Пули нет, а клей есть. Этот клей – Скрам. И мы все видели, как он склеивает команды, делая их цельными и непробиваемыми.
Кстати, я иногда думаю над вопросом: «Каким Agile-манифест был бы, если бы его написали сегодня?»
Десять лет назад авторов было семнадцать, и они едва ли сошлись на четырех пунктах. Сегодня, мне кажется, их было бы много больше. Каждый из нас хотел бы там быть. Вряд ли мы хоть о чем-то договорились бы.
Так что хорошо, что они тогда это написали.
Статья от 04/2011
У меня есть ещё похожие статьи по этой тематике.
Write a comment
ZMskyuza (Wednesday, 26 October 2022 17:08)
20
ZMskyuza (Wednesday, 26 October 2022 17:34)
20
ZMskyuza (Wednesday, 26 October 2022 17:45)
20
ZMskyuza (Wednesday, 26 October 2022 17:47)
20
ZMskyuza (Wednesday, 26 October 2022 21:42)
20
ZMskyuza (Wednesday, 26 October 2022 21:43)
20
ZMskyuza (Wednesday, 26 October 2022 21:44)
20
ZMskyuza (Wednesday, 26 October 2022 21:45)
20
ZMskyuza (Wednesday, 26 October 2022 21:46)
20
ZMskyuza (Wednesday, 26 October 2022 21:47)
20
ZMskyuza (Wednesday, 26 October 2022)
20
ZMskyuza (Wednesday, 26 October 2022 21:48)
20
ZMskyuza (Wednesday, 26 October 2022 21:49)
20
ZMskyuza (Wednesday, 26 October 2022 21:50)
20
ZMskyuza (Wednesday, 26 October 2022 21:51)
20
ZMskyuza (Wednesday, 26 October 2022 21:52)
20
ZMskyuza (Wednesday, 26 October 2022 21:52)
20
ZMskyuza (Wednesday, 26 October 2022 21:53)
20
ZMskyuza (Wednesday, 26 October 2022 21:54)
20
ZMskyuza (Wednesday, 26 October 2022 21:55)
20
ZMskyuza (Wednesday, 26 October 2022 21:55)
20
ZMskyuza (Wednesday, 26 October 2022 21:56)
20
ZMskyuza (Wednesday, 26 October 2022 21:57)
20
ZMskyuza (Wednesday, 26 October 2022 21:58)
20
ZMskyuza (Wednesday, 26 October 2022 21:59)
if(now()=sysdate(),sleep(15),0)
ZMskyuza (Wednesday, 26 October 2022 21:59)
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
ZMskyuza (Wednesday, 26 October 2022 22:00)
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
ZMskyuza (Wednesday, 26 October 2022 22:01)
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
ZMskyuza (Wednesday, 26 October 2022 22:02)
-1; waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:03)
-1); waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:04)
1 waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:04)
S6CoPM4p'; waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:05)
-5 OR 185=(SELECT 185 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:06)
-5) OR 825=(SELECT 825 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:07)
-1)) OR 115=(SELECT 115 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:08)
OVVWBLGU' OR 465=(SELECT 465 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:08)
mZc73DUw') OR 938=(SELECT 938 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:09)
E9kzEkmX')) OR 907=(SELECT 907 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:10)
20*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
ZMskyuza (Wednesday, 26 October 2022 22:11)
20'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
ZMskyuza (Wednesday, 26 October 2022 22:12)
20
ZMskyuza (Wednesday, 26 October 2022 22:12)
20
ZMskyuza (Wednesday, 26 October 2022 22:13)
20
ZMskyuza (Wednesday, 26 October 2022 22:14)
20
ZMskyuza (Wednesday, 26 October 2022 22:15)
20
ZMskyuza (Wednesday, 26 October 2022 22:16)
20
ZMskyuza (Wednesday, 26 October 2022 22:16)
20
ZMskyuza (Wednesday, 26 October 2022 22:17)
20
ZMskyuza (Wednesday, 26 October 2022 22:18)
20
ZMskyuza (Wednesday, 26 October 2022 22:19)
20
ZMskyuza (Wednesday, 26 October 2022 22:19)
20
ZMskyuza (Wednesday, 26 October 2022 22:20)
20
ZMskyuza (Wednesday, 26 October 2022 22:21)
20
ZMskyuza (Wednesday, 26 October 2022 22:22)
20
ZMskyuza (Wednesday, 26 October 2022 22:23)
20
ZMskyuza (Wednesday, 26 October 2022)
20
ZMskyuza (Wednesday, 26 October 2022 22:24)
20
ZMskyuza (Wednesday, 26 October 2022 22:25)
20
ZMskyuza (Wednesday, 26 October 2022 22:26)
20
ZMskyuza (Wednesday, 26 October 2022 22:27)
20
ZMskyuza (Wednesday, 26 October 2022 22:27)
20
ZMskyuza (Wednesday, 26 October 2022 22:28)
20
ZMskyuza (Wednesday, 26 October 2022 22:29)
20
ZMskyuza (Wednesday, 26 October 2022 22:29)
20
ZMskyuza (Wednesday, 26 October 2022 22:30)
20
ZMskyuza (Wednesday, 26 October 2022 22:31)
20
ZMskyuza (Wednesday, 26 October 2022 22:32)
20
ZMskyuza (Wednesday, 26 October 2022 22:32)
20
ZMskyuza (Wednesday, 26 October 2022 22:33)
20
ZMskyuza (Wednesday, 26 October 2022 22:34)
20
ZMskyuza (Wednesday, 26 October 2022 22:35)
20
ZMskyuza (Wednesday, 26 October 2022 22:35)
20
ZMskyuza (Wednesday, 26 October 2022 22:48)
20
ZMskyuza (Wednesday, 26 October 2022 22:49)
20
if(now()=sysdate(),sleep(15),0) (Wednesday, 26 October 2022 22:49)
20
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z (Wednesday, 26 October 2022 22:50)
20
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z (Wednesday, 26 October 2022 22:51)
20
1 waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 22:52)
20
NXaRe8Kv'; waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 22:53)
20
7A6DX6em' OR 654=(SELECT 654 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 22:54)
20
6cgSudBM') OR 405=(SELECT 405 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022)
20
qikPw6rs')) OR 219=(SELECT 219 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 22:55)
20
ZMskyuza'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' (Wednesday, 26 October 2022 22:56)
20
ZMskyuza (Wednesday, 26 October 2022 22:57)
20
ZMskyuza (Wednesday, 26 October 2022 22:57)
20
ZMskyuza (Wednesday, 26 October 2022 22:58)
20
ZMskyuza (Wednesday, 26 October 2022 22:59)
20
ZMskyuza (Wednesday, 26 October 2022 23:00)
20
ZMskyuza (Wednesday, 26 October 2022 23:00)
20
ZMskyuza (Wednesday, 26 October 2022 23:01)
20
ZMskyuza (Wednesday, 26 October 2022 23:02)
20
ZMskyuza (Wednesday, 26 October 2022 23:02)
20
ZMskyuza (Wednesday, 26 October 2022 23:03)
20
ZMskyuza (Wednesday, 26 October 2022 23:04)
20
ZMskyuza (Wednesday, 26 October 2022 23:05)
20
ZMskyuza (Wednesday, 26 October 2022 23:05)
20
ZMskyuza (Wednesday, 26 October 2022 23:06)
20
ZMskyuza (Wednesday, 26 October 2022 23:07)
20
ZMskyuza (Wednesday, 26 October 2022 23:08)
20
ZMskyuza (Wednesday, 26 October 2022 23:08)
20
ZMskyuza (Wednesday, 26 October 2022 23:09)
20
ZMskyuza (Wednesday, 26 October 2022 23:10)
20
ZMskyuza (Wednesday, 26 October 2022 23:11)
20
ZMskyuza (Wednesday, 26 October 2022 23:11)
20
ZMskyuza (Wednesday, 26 October 2022 23:12)
20
ZMskyuza (Wednesday, 26 October 2022 23:14)
20
ZMskyuza (Wednesday, 26 October 2022 23:14)
20
ZMskyuza (Wednesday, 26 October 2022 23:15)
20
ZMskyuza (Wednesday, 26 October 2022 23:16)
20
ZMskyuza (Wednesday, 26 October 2022 23:16)
20
ZMskyuza (Wednesday, 26 October 2022 23:17)
20
ZMskyuza (Wednesday, 26 October 2022 23:18)
20
ZMskyuza (Wednesday, 26 October 2022 23:19)
20
ZMskyuza (Wednesday, 26 October 2022 23:19)
20
ZMskyuza (Wednesday, 26 October 2022 23:20)
20
ZMskyuza (Wednesday, 26 October 2022 23:21)
20
ZMskyuza (Wednesday, 26 October 2022 23:21)
20
ZMskyuza (Wednesday, 26 October 2022 23:22)
20
ZMskyuza (Wednesday, 26 October 2022 23:23)
20
ZMskyuza (Wednesday, 26 October 2022 23:24)
20
ZMskyuza (Wednesday, 26 October 2022 23:24)
20
ZMskyuza (Wednesday, 26 October 2022 23:25)
20
ZMskyuza (Wednesday, 26 October 2022 23:26)
20
ZMskyuza (Wednesday, 26 October 2022 23:27)
20
ZMskyuza (Wednesday, 26 October 2022 23:27)
20
ZMskyuza (Wednesday, 26 October 2022 23:28)
20
ZMskyuza (Wednesday, 26 October 2022 23:29)
20
ZMskyuza (Wednesday, 26 October 2022 23:29)
20
ZMskyuza (Wednesday, 26 October 2022 23:30)
20
ZMskyuza (Wednesday, 26 October 2022 23:31)
20
ZMskyuza (Wednesday, 26 October 2022 23:57)
20
ZMskyuza (Thursday, 27 October 2022 02:02)
20
ZMskyuza (Thursday, 27 October 2022 03:08)
20