Человек должен получать обратную связь от своей работы - чем быстрее тем лучше.
Лично я слишком хорошо знаком с ситуациями, когда ОС в разработке нет вообще. Реалии таковы, что менеджеры не сообщают разработчикам о дальнейших планах - иногда потому что сами плохо их понимают. Программное обеспечение не всегда тестируется. Зачастую его тестируют конечные пользователи. Зачастую ПО пишется для эксперимента, или на будущее. Подобные ситуации могут сильно снижать мотивацию.
Как разработчику понять, что то, что он сделал - будет работать?
Как узнать, хорошо он сегодня поработал, или плохо?
Работа бывает разной.
Front-end - разработчику легче, потому что он проверяет результаты своей работы непосредственно. Но даже он, при более сложных интерфейсах, может пропустить некоторые ситуации, например если интерфейс строится из виджетов, которые могут по-разному компоноваться. Даже простой верстальщик должен понимать, что его страничка будет просматриваться в другой среде - на смартфонах и других устройствах.
Backend-разработчкик не видит вообще ничего. Если он обладает хорошей памятью и воображением, и его никто не отвлекает на посторонние дела и мелкие фиксы в процессе разработки, или личные дела, он может держать небольшую систему (или отдельный модуль) в голове - и видеть, что то, что он сделал - он сделал правильно, похвалить сам себя.
Но если он работает над несколькими проектами параллельно, если над ним висят какие-то нерешённые семейные проблемы, или его периодически отвлекают - такой подход невозможен в принципе. А даже когда он возможен - проект черезчур сильно начинает зависеть от умственных способностей одного человека, что черевато неприятностями в случае типичного наёмного труда.
Если задача не примитивная или типовая, разработчику может быть недостаточно умозрительного понимания, что "он сегодня всё сделал правильно".
Как это можно решить?
Можно писать бэкенд одновременно с UI. Это даст возможность проверить результат, но не подходит для сложных систем. Если UI и бэкенд пишут два разных человека - куча времени может уйти на то, чтобы один разработчик указывал другому на его баги (сам был в такой ситуации).
Можно писать бэкенд одновременно с автотестами - одним и тем же человеком. Результат - он получает обратную связь немедленно, а также значительно расширяет спектр ситуаций, которые он может проверить.
Не буду говорить об организационной важности автотестов с т.з. стабильности, но в данном случае разработчик сразу получает обратную связь. Это даёт ему уверенность в своей работе, а главное - возможность учиться на своих ошибках.
Ведь мы знаем, что чем ближе обратная связь по времени к моменту действия, её вызвавшего, тем силнее она осознаётся.
Что ещё?
Лично мне приятно начинать новый этап работы с небольшого рефакторинга. Приятно это тем, что задача смещается: ОС состоит не в том, что создана новая фича, а в том, что все старые фичи работают так же. Это даёт возможность не решать две проблемы сразу, и уделить больше внимания качеству кода.
Автотесты также дают возможность разработчику посмотреть на свой код с другой точки зрения, как будто написанный модуль использует какая-то другая система. Я считаю, это очень важно, т.к. помогает уйти от "замыленного взгляда": лучше понять, насколько корректно и удобно организован API, увидеть пропущенные ранее недочёты в коде модуля.
И повторюсь: обратная связь - это основа любого обучения и личного роста.
Лично я слишком хорошо знаком с ситуациями, когда ОС в разработке нет вообще. Реалии таковы, что менеджеры не сообщают разработчикам о дальнейших планах - иногда потому что сами плохо их понимают. Программное обеспечение не всегда тестируется. Зачастую его тестируют конечные пользователи. Зачастую ПО пишется для эксперимента, или на будущее. Подобные ситуации могут сильно снижать мотивацию.
Как разработчику понять, что то, что он сделал - будет работать?
Как узнать, хорошо он сегодня поработал, или плохо?
Работа бывает разной.
Front-end - разработчику легче, потому что он проверяет результаты своей работы непосредственно. Но даже он, при более сложных интерфейсах, может пропустить некоторые ситуации, например если интерфейс строится из виджетов, которые могут по-разному компоноваться. Даже простой верстальщик должен понимать, что его страничка будет просматриваться в другой среде - на смартфонах и других устройствах.
Backend-разработчкик не видит вообще ничего. Если он обладает хорошей памятью и воображением, и его никто не отвлекает на посторонние дела и мелкие фиксы в процессе разработки, или личные дела, он может держать небольшую систему (или отдельный модуль) в голове - и видеть, что то, что он сделал - он сделал правильно, похвалить сам себя.
Но если он работает над несколькими проектами параллельно, если над ним висят какие-то нерешённые семейные проблемы, или его периодически отвлекают - такой подход невозможен в принципе. А даже когда он возможен - проект черезчур сильно начинает зависеть от умственных способностей одного человека, что черевато неприятностями в случае типичного наёмного труда.
Если задача не примитивная или типовая, разработчику может быть недостаточно умозрительного понимания, что "он сегодня всё сделал правильно".
Как это можно решить?
Можно писать бэкенд одновременно с UI. Это даст возможность проверить результат, но не подходит для сложных систем. Если UI и бэкенд пишут два разных человека - куча времени может уйти на то, чтобы один разработчик указывал другому на его баги (сам был в такой ситуации).
Можно писать бэкенд одновременно с автотестами - одним и тем же человеком. Результат - он получает обратную связь немедленно, а также значительно расширяет спектр ситуаций, которые он может проверить.
Не буду говорить об организационной важности автотестов с т.з. стабильности, но в данном случае разработчик сразу получает обратную связь. Это даёт ему уверенность в своей работе, а главное - возможность учиться на своих ошибках.
Ведь мы знаем, что чем ближе обратная связь по времени к моменту действия, её вызвавшего, тем силнее она осознаётся.
Что ещё?
Лично мне приятно начинать новый этап работы с небольшого рефакторинга. Приятно это тем, что задача смещается: ОС состоит не в том, что создана новая фича, а в том, что все старые фичи работают так же. Это даёт возможность не решать две проблемы сразу, и уделить больше внимания качеству кода.
Автотесты также дают возможность разработчику посмотреть на свой код с другой точки зрения, как будто написанный модуль использует какая-то другая система. Я считаю, это очень важно, т.к. помогает уйти от "замыленного взгляда": лучше понять, насколько корректно и удобно организован API, увидеть пропущенные ранее недочёты в коде модуля.
И повторюсь: обратная связь - это основа любого обучения и личного роста.