Романов Борис@ganouver
Архитектор
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Registered
- Activity
Specialization
Менеджер проекта, Архитектор программного обеспечения
Git
ООП
UML
ArchiMate
Моделирование
Архитектор
Ну, если доводить до крайности, то примерно так :). Отмечу только, что решение проблем не исключает постановки и достижения целей. Можно, к примеру, поставить бизнес-цель "заработать миллиард". Но, поскольку просто так миллиард никто не отдаст, нужно будет найти того, кто готов заплатить этот миллиард, понять за что он готов его заплатить, и предложить ему достойное решение. Ну, или найти миллиард людей, готовых заплатить за что-то по рублю и сделать одно решение для них всех. Но это уже ближе к бизнес-моделям, а не аналитическим.
Мой опыт говорит, что не бывает задачи без проблемы, которую она решает. Если есть задача, значит у кого-то что-то болит настолько, что он готов потратить ресурсы (и немалые: разработка - дорогое удовольствие) на уменьшение или устранение этой боли. И задача бизнеса чаще всего заключается в том, чтобы предложить этому "кому-то" какое-то решение, получив за это деньги. На которые и создается программное решение.
Стрелочки на рисунке 4 показывают не движение, а направление ответов на вопрос "зачем?".
Изменение в системе делаем зачем? - чтобы определенным образом изменить её поведение.
А поведение меняем зачем? - чтобы сценарии нужные выполнялись.
А сценарии такие нам нужны зачем? - чтобы решить определенные проблемы и достичь заявленных целей.
Без такой трассировки часто случается, что когда дело доходит до изменения системы, то уже забывается зачем все это делалось. И формально вроде все задачи выполнены, а цели не достигнуты. Явная трассировка помогает помнить, что, метафорически выражаясь, мы крутим педали не чтобы выдать определенный RPS оборотов колеса, а чтобы оказаться дома до того, как начнется гроза. И когда молния жалит в мокрое место, то уже не важно, что колеса крутились так, как было написано в джире.
Оно и так, по-моему, в виде статьи малость перегружено получилось, если сюда еще и архитектуру добавить - будет вообще нечитаемо. Про архитектурные модели я рассказывал на Archdays в 2022-м, кажется, а тут решил сфокусироваться именно на моделях "вокруг" архитектуры. А в C4 верхний уровень для этого как раз и предназначен.
"Колонка" на карте историй примерно соответствует кейсу, а строка - глубине реализации/проработки группы кейсов в очередной поставке. Соответственно, каждая UserStory - это одно содержательное, качественное, наблюдаемое и проверяемое изменение системы.
С точки зрения артефактов - простор для фантазии полный. Идеально, когда все в одной системе, перевязано ссылками и можно от одного прийти к другому, но я кроме Sparx EA подобных инструментов не видел.
Поэтому на практике это отдельная диаграмма юзкейсов (я рисовал в PlantUML, Archi, Draw.IO, в конце-концов, просто выписывал в виде списка), в которой юзкейсы как-то идентифицированны. Эту диаграмму полезно выкладывать в общий репозиторий для чтения и ознакомления всех заинтересованных. И отдельная карта историй, заголовки колонок которой коррелируют с названиями/идентификаторами юзкейсов. Читаемость и понятность важнее формализма. В последнее время в качестве артефакта для карты историй использую простую табличку в Confluence, где на месте UserStory поначалу (на этапе моделирования) просто краткое тезисное описание, которое по мере согласования/утверждения скоупа инкремента заменяется ссылкой на соответствующую Story в джире.
p.s. Я с безответственными и безынициативными работать так и не научился :)
Однозначного ответа на этот вопрос нет. Большинству разработчиков комфортнее работать в условиях, когда все решения уже приняты заранее и при случае можно свалить ответственность на тех, кто ставил задачу, дескать сами виноваты. Но встречаются и такие, которые хотят проявить инициативу, но им не дают, потому что ответственность за принятые решения несет кто-то другой. То, что кажется разработчику лучше, удобнее и полезнее, совершенно не обязательно окажется приемлемо для конечного заказчика.
На мой взгляд, без инициативы невозможен профессиональный рост. Но, как следствие связи инициативы и ответственности, рост происходит тогда, когда вместе с проявлением инициативы вы берете на себя и ответственность за то, что делаете. Безответственная инициатива обычно приносит больше вреда чем пользы.
Скажите, пожалуйста, какого размера была команда на этапе «Think IT», кто в неё входил?
2. Да, проект состоит из одного (довольно большого) репозитория. На нескольких организовать управляемый процесс довольно трудно :(
3. Каждая задача до завершения ведется в отдельной ветке и вливается в один из стволов (dev || release) только после завершения и предварительного тестирования на стенде разработчика. Я не стал пока про это писать, чтобы не усложнять. Таких веток в работе в идеальном случае — по количеству разработчиков, но иногда какие-то ProofOfConcept могут жить подольше. Могут двое работать в одной feature-ветке, например делая согласованные изменения на фронтенде и бэкенде. Вообще, стараемся делать так, чтобы эти ветки не висели долго. Делим задачи так, чтобы они делались за несколько дней и вливались в ствол. Старые ветки периодически чистим.
4. Для поддержки старых версий есть два варианта. Первый — очень-очень осторожно сделать маленький-маленький хотфикс с последующим Sanity тестированием. Редкий кейс, стараемся избегать. Предпочитаем исправить обнаруженный баг в текущем релизе и обычным порядком выставить обновление.
К сожалению, мне этот пост попался на глаза только сейчас. Полгода назад, когда всё только начиналось, я не знал слов «Эволюционное управление» и действовал скорее интуитивно. Однако, модель управления, которая в итоге получилась, очень напоминает, то что описано в статье.
Такая модель — точно не серебряная пуля. Типовые проекты делаются по другому. Если вы точно знаете что хотите получить и влияние неопределённости на ваши планы минимально — все эти танцы неуместны.
Совсем другая картина — когда ни вы, ни ваши заказчики точно не знаете что должно получиться в итоге, и имеете душевные силы признаться в этом себе и друг другу. Вот тут начинает в полный рост влиять используемый способ уменьшения неопределённостей. Я пришел к эволюционной идее после книг Талеба, он тоже рассказывает про «постепенное прилаживание», я адаптировал его идеи на программный код и управление требованиями.
Вредно, если кратко — потому что борьба с ветряными мельницами непродуктивна. Если все засинхронизировать, все планы будут прозрачно перетекать и обновляться, то возникнет ложное ощущение того, что все под контролем. А в управлении проектом, повторюсь, задачи разработки — они даже не на втором плане по важности. Отсутствие такой прозрачной автоматизации в мелочах порождает необходимость немножко поработать головой и руками. Мозг не умеет работать с большим количеством мелких артефактов, приходится их обобщать. А это помогает расширить угол зрения.
Microsoft при первом релизе TFS запилили примитивную интеграцию TFS с Project, этим мало кто воспользовался — они и не стали развивать. Ничего личного. Просто бизнес.
Даже программы мы давно уже не пишутся ассемблере, для этого используются языки высокого уровня, которые, конечно, не дают возможностей управления на уровне регистров, но внятно говорят машине чего мы от неё хотим.
Так вот, к чему это я. Модель проекта, с которой работает менеджер и модель задач, с которой работают разработчики — это разные вещи и между ними не всегда возможна автоматическая синхронизация. Дажа, я бы сказал, она вредна. Проект включает в себя много факторов, и программирование — это только малая часть, далеко не всегда самая трудоемкая. А «интерфейс между слоями» — это совместная работа менеджера проекта, тимлида, аналитика и других заинтересованных лиц. Потому что слоёв не два, а гораздо больше.
мух от котлетуправление производством от управления проектами. Тогда снимается львиная доля проблем и сложностей.можно подумать, до этого все его специально делали плохо.