Боюсь, что эта тема здесь очень быстро полетит в корзину....
От себя могу кое-что сказать:
1) В последнее время для себя уяснил - You can't build a perfect software. Вот и все. Не нужно переделывать, если результат тебя удовлетворяет. Конечно, важно сама возможность переделки, но никто не заставляет делать лишней работы, если на это нет никаких деловых предпосылок.
2) Такая деятельность, как TDD переворачивает процесс кодирования с ног на голову. Ты начинаешь кодировать, дизайн постепенно формируется, а у тебя всегда есть полностью рабочий вариант. Контекст меньше, поэтому твой головной ЦПУ загружен меньше. Можно в любой момент остановиться на каком-либо результате с уверенностью, что потом ты всегда это сможешь улучшить, но потом. Поэтому остается всегда и на чтение книг, и на поиграться, и на девушку
