# Планируйте свой следующий коммит

(Автор оригинала - Know Your Next Commit)

Я спросил у трех программистов, что они делают в настоящий момент. Один ответил «Я делаю рефакторинг вот этих методов», второй сказал «Я добавляю новые параметры в этот web action», третий ответил «Я работаю над этим требованием пользователя».

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

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

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

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

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

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

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

Автор оригинала - [Dan Bergh Johnsson](http://programmer.97things.oreilly.com/wiki/index.php/Dan_Bergh_Johnsson)
