Общие методы в некоторой степени здравый смысл, важно знать, что они не требуют большого технического опыта.
Отправной точкой при планировании является определение точной проблемы, которая должна быть решена и которая имеет четкие и недвусмысленные требования. Если у вас его нет, ваши оценки будут неверными. Документирование этого в какой-либо спецификации функций до того, как кто-либо начнет писать код, будет означать, что любые вопросы, которые необходимо задать, будут заданы до начала кодирования. Это удивительно эффективная экономия времени. Возвращение назад и уточнение требований нарушают работу программиста, а ожидание ответов может заблокировать прогресс.
После того как вы определили требование, вам нужно определить рабочие задачи, связанные с его решением. Это классическое упражнение «разделяй и властвуй» - любая задача, которая может быть разбита дальше, должна быть разбита дальше.
В более крупной команде вы можете использовать оценочный покер, чтобы получить оценку, основанную на опыте всех участников. Это не так хорошо работает в небольшой команде, но все же полезно получить независимую оценку от ваших разработчиков и, возможно, включить такую же оценку от себя самого - ваш недостаток специальных знаний может быть полезен здесь, потому что, объясняя вам, что с их точки зрения, задача разработчиков, вероятно, лучше поймет проблему.
С меньшей командой это может помочь получить оценку наилучшего / ожидаемого / наихудшего случая для каждой задачи, которая дает вам диапазон значений, но если вы получаете много оценок превышения, вы можете склоняться к худшему случаю до тех пор, пока ваши разработчики научиться оценивать точнее.
В небольшом магазине разработчики часто оказываются удвоенными в качестве системных администраторов, группы поддержки и даже тестеров (хотя из всего, что они могут делать, тестирование - это то, что вам следует избегать любой ценой), поэтому вам необходимо учитывать это. Выясните, сколько времени ваши разработчики фактически тратят на работу над новыми функциями, и учтите это. Если задача оценивается в 2 дня, но ваши разработчики могут работать над новой разработкой только 60% времени, вам понадобится 4 дня для ее завершения. Вы могли бы также помочь с этим, управляя конвейером других задач, которые они должны обрабатывать, так что несрочные задачи администрирования или поддержки могут несколько объединяться вместе, а не обрабатываться на разовой основе. Многие программисты (конечно, в том числе и я в этом) не являются хорошими временными менеджерами, так что все, что вы можете сделать, чтобы помочь в этом отношении, поможет. Однозадачность всегда проще для программистов, чем многозадачность. Блокировка времени в течение дня также может помочь в этом.
Ведите учет - каждый раз, когда у вас есть сеанс планирования, запишите оценки и фактические данные. Затем вы можете использовать это а) в качестве руководства для определения того, насколько сильно завышаются их оценки во время планирования, и б), чтобы помочь им улучшить свои навыки оценки. В конце каждой итерации (или любого другого эквивалентного вам) вся команда должна проанализировать проделанную работу и выяснить, почему она заняла больше времени, чем ожидалось, чтобы ее можно было включить в будущие оценки. Это должно быть безупречной задачей - у вас, похоже, здесь правильное отношение, но этот ответ может быть уже какое-то время, поэтому я сделаю замечание. Если кто-то говорит: «Я сделал здесь ошибку», вы можете превратить это в «что вы могли бы сделать лучше», но если говорить людям, что они слишком медлительны или ошибаются, то это только усугубит ситуацию.
Я не знаю ни одной серебряной пули для такого рода проблем, но самый важный фактор - это общение, которое на самом деле легче для небольшой команды, и использование обратной связи для совершенствования ваших коллективных навыков.