Как оценить задачу программирования, если у вас нет опыта в ней [закрыто]
У меня возникли трудности с управлением, запрашивающим оценки по задачам программирования, которые используют сторонние элементы управления, с которыми у меня нет предыдущего опыта.
Я определенно понимаю, почему им нужны оценки, но я чувствую, что любая оценка, которую я даю, будет либо а) слишком короткой и заставит меня выглядеть плохо, либо б) слишком длинной и заставит меня выглядеть плохо.
какую оценку или ответ я мог бы дать руководству, чтобы снять их с моей спины, чтобы я мог продолжать делать свои работай!
15 ответов:
лучший ответ, который вы можете дать, - это попросить время, чтобы создать быстрый прототип, чтобы вы могли дать более точную оценку. Без некоторые опыт работы с инструментом или проблема, любая оценка, которую вы даете, по сути, бессмысленно.
в стороне, очень редко возникает проблема с слишком длинной оценкой. Возникают непредвиденные проблемы, меняются приоритеты, "обновляются"требования. Даже если вы не используете все время, которые вы просили, у вас будет больше время тестирования, или может выпустить "рано".
Я всегда был слишком оптимистичен в своих оценках, и это может поставить много стресса в вашей жизни, особенно когда вы молодой программист без опыта и уверенности в себе, чтобы сказать боссам неудобные истины.
Я открою тебе секрет. Даже если вы были экспертом с этой технологией, Ваша оценка, вероятно, будет очень неточной. Это Природа зверя, когда он делает что-то, что по своей сути является задачей R&D. К сожалению, руководство часто пытается применить производственную модель и требует точных оценок. Чтобы проиллюстрировать мою точку зрения, рассмотрим трудность точной оценки следующих двух усилий:
A) изготовьте другие зонтики 11K которые точно такие же как 2K вы сбили в прошлом месяце. Б) разработать новый вид зонтика и построить на первого.
разработка программного обеспечения-это B, но они просят оценку, предполагающую A.
лучшее, что вы можете сделать, это разбить задачу на самые маленькие кусочки (не более 1/2 дня каждый), а затем утроить окончательное число, которое вы придумали.(Метод Спольского)
http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351
Стив Макконнелл (и другие) говорит о о конус неопределенности. В основном вы предоставляете оценку, которая выглядит примерно так:
работа займет от 3 до 9 недель, причем 4 недели являются наиболее вероятными.
по мере развития проекта вы можете уточнить свои оценки. Поскольку вы делаете больше работы и лучше понимаете необходимые усилия, вы можете уточнить свою оценку, чтобы быть более точным.
Он работал меня, но это может потребовать некоторых усилий, чтобы получить другие держатели акций в проекте, чтобы понять процесс.
вы можете рассмотреть возможность дать как оценку, так и уровень доверия, т. е. это 50/50, что это займет 3-6 месяцев или 6-9 месяцев или 75% шанс быть сделано в 9 месяцев и 90%, что вы будете сделаны в год.
еще одна вещь, которую вы, возможно, захотите рассмотреть, - это использование "мудрость толпы" подход. Пойдите и спросите 25-50 человек, сколько времени, по их мнению, это займет, и усредните их оценки. Майка Кона Планирование Покер - это, я думаю, очень похоже на это, хотя трудно планировать только с одним разработчиком.
Разбейте свою оценку на:
- известные knowns; сколько времени потребуется, чтобы сделать то, что вы знаете, как это сделать. Вы должны быть в состоянии дать этому оценку с высокой степенью достоверности.
- знаем; как думаешь, сколько времени потребуется, чтобы сделать то, что вы не знаете, как это сделать. Вы можете использовать такой метод, как dacracot, чтобы дать различные уровни уверенности в этой оценке.
- неизвестные неизвестные; этот в реальном времени черная дыра. Это те вещи, которые встают на дыбы в самый неподходящий момент и кусают вас в задницу. Укажите диапазон для оценки с обоснованием на основе ожидаемых рисков.
предлагаем скорректировать смету и некоторые вехи на этом пути. Любые неизвестные неизвестные станут известными неизвестными, известные неизвестные должны стать известными известными, когда вы получаете опыт, и оценка ваших известных известных может быть скорректирована на основе прогресса на сегодняшний день. Вы можете сделать первоначальную оценку, а затем повторно оценить, когда вы сделаете около 25%, затем снова на 50%, а затем снова на 85%. На каждом этапе ваша оценка должна начать сходиться к фактическому времени выполнения задач.
Я использую определенную систему маркировки для моих оценок... класс A, Класс B и класс C.
оценка класса C является первым, что они получают. Это открыто заявлено как плюс или минус 50% из-за неизвестных. Если они хотят, чтобы я продолжал давать им класс B, тогда мне нужны деньги на исследования.
класс B плюс или минус 25%. Иногда это достаточно хорошо, и они дают мне деньги на строительство. Если нет, то меньше денег и больше исследований.
класс а плюс или минус 10%, финал и идти или не идти. Если это будет идти, и я отклоняюсь слишком далеко от оценки, я признаюсь часто и рано.
Я думаю, что если вы удалите фразу "которые используют сторонние элементы управления, с которыми у меня нет предыдущего опыта", у вас может быть лучшее описание вашей более крупной проблемы.
Если "Agile "научил нас чему-то, это то, что, если руководство ожидает, что вы на постоянной основе будете оценивать проекты таким образом, и вы будете" выглядеть плохо", если вы скажете, что это не может быть предоставлено, потому что у вас недостаточно информации, вы на шоссе, чтобы потерпеть неудачу.
самая большая проблема будут проблемы, которые вы не контролируете, и которые вы еще даже не определили. Как часто вы оглядывались назад и говорили себе: "Ну, я нажал свою оценку прямо на кнопку - с третьей попытки, после того, как я понял это ... и что мне нужна версия ... и что dba будет в отпуске в течение недели, и что менеджер проекта будет нуждаться во мне ... в течение недели и что моя жена была беременна и ...".
Я бы очень постарался сказать: "я могу определить критическое факторы риска и придумать контрольный список результатов, чтобы проверить их в xx дней. В этот момент я дам вам еще одну дополнительную оценку."
и было бы очень хорошо, если бы вы могли предложить им: "пожалуйста, настаивайте, чтобы я никогда не пытался дать вам достоверную оценку этого типа в будущем. Уволь меня, если я попытаюсь."
(завышено, но лишь слегка.)
даже не пытайтесь оценить. Нет никакого способа, чтобы ваша оценка была правильной. Это ведь всего лишь оценка.
вместо этого я бы рекомендовал вам разделить функцию на небольшие части (не более, скажем, 1-2 дней) и попытаться доставить эти части как рабочий, полный, тестируемый и ценный код клиенту/менеджеру. Таким образом, он будет видеть для себя ваш прогресс на ежедневной основе. Это также означает, что он может на самом деле решить остановить развитие после того, как удовлетворен и считайте его завершенным, даже если он, возможно, не достиг всех целей.
ознакомьтесь с гибкими практиками "планирование выпуска "и" планирование итераций " для получения более подробной информации об этом подходе.
имейте в виду, если вы просите большую оценку времени, но делаете это вовремя, это выглядит намного лучше, чем при оценке и необходимости просить о продлении.
Я бы попытался издеваться над прототипом, чтобы у вас было лучшее представление о времени, которое это займет. Будьте честны с вашим руководством, чтобы они могли планировать непредвиденные задержки в кривой обучения.
EDIT: вы также можете увидеть, если вы можете получить более "итеративный" срок. В "прагматическом мышлении и Обучение", Энди Хант делает хороший момент, что люди являются экспертами проекта ближе к концу проекта и наименее осведомлены в самом начале. Не имеет большого смысла делать всю вашу оценку дизайна и времени в самом начале, когда все наименее осведомлены о проекте. Если вы "повторите" сроки и решите проблему кусками, у вас будет больше успеха.
много точной оценки-это самопознание. Если вы написали много кода, если вам пришлось изучить много API, вы начинаете чувствовать такие вопросы, как:
- сколько времени мне нужно, чтобы узнать новый API?
- сколько времени мне понадобится, чтобы выучить новый язык?
- сколько времени мне потребуется, чтобы изучить новый набор инструментов (компилятор/компоновщик/IDE)?
- сколько времени мне нужно, чтобы реализовать типичную задачу?
- как долго это нужно мне, чтобы проверить мою работу?
- сколько времени мне нужно, чтобы развернуть свою работу?
на протяжении всего этого, вы должны получить представление о таких вещах, как:
- сколько типичных ошибок вы создаете и как они классифицируются (т. е. легко, трудно, невозможно)
- сколько осложнений вводится (т. е. нужно рефакторинг из-за отсутствия стороннего API или багги API; нужно перепроектировать из-за непонимания возможностей; нестандартные инструменты / сборка процессы)
- сколько времени теряется из-за перебоев/внешних проблем
основываясь на всех этих вещах, вы сможете развить чувство того, как долго что-то займет, и сможете сформулировать свои предположения ("предполагая, что API вменяем...") даже перед лицом прискорбно неполной информации.
оцените, сколько времени вам нужно, чтобы узнать достаточно, чтобы сделать лучшую оценку, например: "я не знаю: я никогда не работал с этим раньше. Это, вероятно, займет меня вставьте свою оценку здесь для того, чтобы отработать что вам нужно узнать об этом который я должен был бы знать, прежде чем я могу дать вам хорошую оценку для использования этого, чтобы закончить проект."
при программировании я всегда брал то, что я действительно думал, что это займет меня и умножить это на 3, чтобы обеспечить оценку. Если я думаю, что смогу выполнить работу за 1 неделю, я говорю клиенту, что это займет 3 ... Если я думаю, что это действительно займет у меня 3 недели, я говорю клиенту 9 недель.
делая это, я настроил себя-до "под обещание, более доставить" - если вы можете успешно сделать это ваша жизнь будет намного лучше, и ваши клиенты будут очень счастливы.
в вашем случае вы конечно, вы хотите получить хотя бы некоторое представление о том, что вы погружаетесь, прежде чем давать оценку. Возможно, вам даже нужно предоставить оценку того, сколько времени потребуется для предоставления оценки. Умножаем на 3 держит клиентов счастливыми.
разбейте его на вещи, с которыми у вас есть некоторый опыт. Акт измельчения это даст вам лучшее представление о том, что вы знаете и чего вы не знаете.
Как только кусочки достаточно малы, чтобы их можно было рассматривать как отдельные определенные задачи, некоторые из них будут совершенно не поддающимися оценке. Для тех, кто либо прототип сначала, или просто оставить себе некоторое разумное количество времени, в зависимости от размера части. Если вы обнаружите, что у вас есть недостойные части больше, чем 2-4 недели работы, вернитесь к измельчению их в первую очередь.
В конце концов вы перейдете к некоторым очень странным технологическим решениям (которые, как вы думаете, должны работать, но не знаете наверняка), и много работы нужно сделать, чтобы поддержать этот материал, как только он работает. Там будет несколько бит отсутствующего дизайна, для которого лучше всего выбрать какую-то известную библиотеку или очень простой алгоритм для начальной версии.
Если вы не можете разбить задачи, то вы должны наймите кого-то с достаточным опытом, кто может (так как ваш недостаток опыта будет преследовать вас и другими способами). Если вы не можете нанять кого-то, то вы должны просто торговаться в течение случайного длительного периода (от 6 месяцев до 2 лет) и направиться прямо в грязный прототип (пока вам не удастся дать себе достаточно опыта, чтобы знать, что правильно и что неправильно). Но, если вы в конечном итоге замахиваетесь на него, важно не обманывать себя и думать, что вы делаете это правильно "путь". Прототипы были предназначенный для того, чтобы быть выброшенным. Надеюсь, как только прототип обратного отсчета будет завершен, вы будете готовы построить его по-настоящему.
Павел.
вы просто угадываете внешний номер и сразу же приступаете к оценке, сообщите им, что будущая информация может повлиять на ваши оценки, но вы будете держать их в курсе.
Как вы оцениваете, держать их в курсе--либо через документ, опубликованный в интернете или еженедельные обновления, но всегда включают в себя обновленную "предполагаемую дату окончания", и причины (если таковые имеются) для расширений.
большинство менеджеров должны понимать,что -- спрашивая даты окончания, они действительно говорят "дайте нам некоторое представление о том, как мы можем планировать наш график" и "не просто взять навсегда".
Если вы в конечном итоге расширяетесь более одного или двух раз, переоцените весь свой график на основе ваших новых знаний, которые вы сосете при оценке.
Я бы добавил к тому, что сказал RB, когда я нахожусь в этой ситуации, я оцениваю, сколько времени потребуется для инструментов, с которыми я знаком, а затем удваиваю эту оценку, чтобы построить некоторую кривую обучения.
важной частью является сообщение руководству о том, что оценка является Угадай, если они настаивают на более точной оценке или если они пытаются-Дорогой Бог -продать вы ограничение по времени (конечно, это только забрать вы 2 дня, чтобы построить звездолет Энтерпрайз, ты молодец)ПРИДЕРЖИВАЙТЕСЬ СВОЕГО ОРУЖИЯ, не ставьте под угрозу свою оценку, или тот факт, что это ненадежно.
Если управление переопределяет вас и timebox задачу, например "Ну, это должно быть сделано за 2 дня", снова сообщите им, что это их оценка, которая точно так же надежна, как и ваша собственная.
запишите все это в письменном виде.