2010-02-17 9 views
4

В настоящее время наша команда из 11 человек работает над проектом на платформе asp.net. Сроки выполнения проекта составляют 8 месяцев, и мы уже сделали 4 месяца. Теперь, работая над новыми функциями, мы обнаруживаем, что в архитектуре системы есть некоторые недостатки, из-за которых мы сталкиваемся с множеством проблем. Теперь, кого искать для решения этого ... руководителя команды или менеджера проекта ... Вы когда-нибудь сталкивались с этим сценарием? Что лучше всего делать тогда.Что делать, если обнаруживать недостатки в архитектуре программного обеспечения

ответ

2

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

Далее все 11 членов команды тоже могут обсудить это между собой и поделиться друг с другом мнениями .. не только о проблеме ... но и о возможном решении. В итоге вы можете использовать все доступные решения для TL и PM. Весь этот процесс в конечном итоге поможет восстановить проект из этих проблем среднего развития.

Хорошая ссылка на то, что нужно сделать, это this

+1

Очень хорошая ссылка ... спасибо HotTester. – 2010-02-17 06:59:37

1

поднять вопрос к менеджеру проекта. Представьте список вариантов с максимально возможной оценкой времени для завершения каждого с объективным списком плюсов и минусов.

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

+1

Thats true, и PM всегда предпочитает это, если вы придете с некоторыми решениями, а не просто с проблемой. – Russell

+0

+1 за то, что PM всегда предпочитает его, если вы придете с некоторыми решениями, а не только с проблемой – balalakshmi

1

Для чего вы говорите, у вас есть Technical Debt.

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

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

Помните, что в качестве реального долга он будет поддерживать растущие интересы, пока вы его не погасите.

Удачи вам!

+0

Действительно ли это технический долг? В моем понимании технический долг подразумевает разумное решение принять сокращения для краткосрочной выгоды (будь то мудрый или нет). Не кажется справедливым ссылаться на технический долг, поскольку проблема здесь ... счастлива, что ее исправили. –

+0

Вы правы, и я тоже :). Есть 4 категории технического долга, вот статья fowler http://martinfowler.com/bliki/TechnicalDebtQuadrant.html. Вы обнаружите, что одна часть квадранта: «Теперь мы знаем, как мы должны были это сделать», в основном это то, о чем должно знать ОО :) –

+0

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

0

Я бы начал с получения консенсуса по всей команде о проблемах и способах их решения. Спросите себя: каково общее влияние? Это полный контрольно-пропускной пункт? Существуют ли способы решения проблем без существенных изменений? Это может быть не слишком серьезно, и, обсуждая проблемы, вы можете договориться о быстром разрешении.

3

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

Реальные проекты имеют «перезагрузки». Это не означает, что вы выбрасываете всю свою существующую работу. Это означает, что вы найдете новую оболочку, чтобы она соответствовала деталям этой работы. Это намного проще, если ваша работа - так далеко - состоит из хорошо понятых самосогласованных небольших компонентов, слабо связанных друг с другом. Вот почему люди так работают, потому что они знают по опыту, что им придется переделывать вещи. Почти все функции, добавленные к языкам программирования на протяжении десятилетий, объясняются тем, что мы знаем, что каждый фрагмент кода, который мы пишем, может быть изменен - ​​он может выжить, но, вероятно, придется справиться с множеством незнакомых сред на путешествие в отпуск.

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

Что это значит? Это означает, что «архитектурные» части проекта не более стабильны, чем «маленькие детали». Вы должны иметь возможность изменять архитектуру. Вначале у вас недостаточно информации, чтобы принимать какое-либо постоянное решение.

Основная проблема заключается в том, что у вас есть проект на восемь месяцев. Реальные восьмимесячные проекты (те, которые преуспевают вовремя) на самом деле, если вы внимательно посмотрите, много более коротких проектов: 16 двухнедельных проектов идеально.

Вам необходимо поставить все цели проекта (до сих пор) в большой список в приоритетном порядке. Напишите каждое требование функции с точки зрения пользователя. «Пользователь должен быть в состоянии бла-бла-бла», такого рода вещи. Избегайте говорить о технических проблемах текущего дизайна. Подумайте о том, как пользователь будет иметь дело с отсутствием какого-либо продукта (или того, что они в настоящее время используют), и поговорить о том, как их опыт будет улучшен с помощью определенной функции.

Важным является порядок приоритетов. Цель состоит в том, чтобы иметь возможность сказать: у нас есть только время, чтобы отправить первые 10 предметов. Это лучше, чем 9 предметов, что в свою очередь лучше 8 и т. Д. Но даже с 8 элементами это было бы лучше, чем ничего, потому что каждый элемент является особенностью, которая сама по себе улучшит опыт пользователя.

Этот список называется отставанием.

Если вы сравниваете свою работу с отставанием, вы, как правило, обнаружите, что работаете с низкоприоритетными вещами, потому что, по вашему мнению, вам понадобится это позже. Старайтесь не делать этого с этого момента. Низкий приоритет - низкий приоритет. Что делать, если появляются новые запросы с более высоким приоритетом между датой отправки и отправкой? Они почти наверняка будут! Несмотря на то, что некоторые люди будут требовать («Это будет абсолютно бесполезно без функции A!»), Вы, вероятно, могли бы поставлять ни одну из функций A, ни функцию B. Но если вам нужно было выбрать один, вы бы пошли с функцией A. И вы вполне может потребоваться отправить без функции B из-за нехватки времени. Поэтому не ставьте под угрозу A ради того, чтобы быть «готовым» для добавления B позже. Только подготовитесь заранее, если это будет стоить вам почти ничего - оставьте места, где вы можете добавить вещи, сделать все возможное, но не если это замедлит вас сейчас.

Затем приступайте к работе над новой версией продукта (запрещающей работу, проделанную до сих пор там, где это имеет смысл), которая заботится о первых элементах списка - минимальном минимуме. Не тратьте больше недели на это. Неделя составляет 6,25% от оставшегося времени, поэтому на самом деле это довольно дорого. Но в конце этого вы имеете представление о том, что вы готовы к отправке до сих пор. Это единственный способ измерить ваш прогресс с этого момента.

Остальная часть вашего проекта состоит из:

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

  2. Превращение отзывов пользователей в новые «истории» для перехода «на отставание».Это, конечно, связано с их приоритетом.

Вы можете сделать это снова и снова, в коротких итераций, пока не закончится время (вы, вероятно, есть время, чтобы сделать шесть-восемь повторений). В конце каждой итерации у вас есть что-то для доставки, которое «лучше» (имеет более высокоприоритетные функции, содержит больше отзывов), чем то, что было у вас в конце предыдущей итерации. Это прогресс.

Каждый выпуск в конце итерации имеет две цели: показать прогресс и, конечно же, сделать сообщество пользователей более счастливым, но также получить больше отзывов, чтобы узнать новую информацию. Каждая версия - это решение и зонд. Этот двойной характер продолжается после первого публичного выпуска. Публичный релиз - это глубокий космический зонд, который вы отправляете в солнечную систему для отправки фотографий странных новых миров (в виде следов стека исключений).

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

Люди будут реагировать на этот подход, заявив, что он будет ужасно «неэффективным». Эффективность - относительный термин. Проекты, которые не работают таким образом, всегда заканчивают работу таким образом, в конце концов. Но «в конце» очень поздно. Обычно существует безумная паника за дополнительные N месяцев после первоначального срока, когда проект продолжает выпускать повторяющиеся версии продукта, которые все «почти правы» или «почти сделаны», в сумасшедшей самообманутой пародии на итеративное развитие.

К счастью, вы можете начать думать и работать таким образом в любое время. Лучше начать на полпути к первоначальному сроку, чем вскоре после него.

+0

+1 для очень хорошего объяснения. Итак, вы предлагаете использовать прототип? – HotTester

+0

«Прототип» подразумевает нечто, построенное исключительно для обнаружения информации (зонд). Релизы конца итерации являются реальными продуктами, которые обеспечивают чистое улучшение для пользователей. Если руководство решает сократить расписание или группировку или набор функций, выпуск окончательного спринта, возможно, является окончательной версией. Основное ограничение: для сжатого программного обеспечения, даже самая первая итерация должна включать простые инструкции по установке. Ваш босс должен быть в состоянии заставить его работать на своем ноутбуке. (Создание виртуальной машины - обман, если только вы не планируете отправляться в конце). –

+0

Требуется ли от команды дополнительные усилия? Или это может быть связано с увеличением ресурсов, то есть с 11 до 13-14 ... Далее в этом сценарии, где уже 4 месяца прошло 8 месяцев, этот подход практичен? – 2010-02-17 08:11:56

Смежные вопросы