Привет
Мы уже 1.5 года очень плотно работаем с Android, в основном НЕ на Java app уровне, а на системном - то есть развитие самой ОС и ядра; 2 года назад делали аналогичный проект дял ChromeOS на ARM. Смею Вас завертить, что и Chrome, и Android содержит такое количество crapcode что мы до сих пор воспринимаем относительную стабильность их работы как чудо. Как Google разрабатывет Android, я думаю, рассказывать не надо, смотрим здесь например
http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html :) Ещё посмотреть на количество не-bugfix изменений в релизной ветке JB уже собственно после выхода релиза. Ещё можно посмотреть на количество комитов в Android со словом hack.
К чему это я. Chrome - отнюдь не контрпример, а вовсе наоборот. Так же как и Андроид. Оба вышли на рынок со сложной конкурентной ситуацией, и захватывали его отнюдь не идеальностью кода.
Теперь ещё. Вот Amazon пилит новый Kindle Fire. И успеть к "чёрной пятнице" - это для них настолько важно, что можно жертвовать фичами, красивостями, свистелками и #@$&елками направо и налево. Главное - выпустить продукт, обладающий каким-то Differentiator.
Далее. Все помнят выход превого iPhone? без многозадачности и всего того, что в других телефонах было уже давно сделано. Да, конечно Apple могли подождать ещё годика 3, доделать всё как следует и не париться с этой идиотской маркетинговой чернухой про "многозадачность = зло", но вроде как Epic Win и без того, правда?
Ещё интересный кейс. Давайте представим себе тестировщика-перфекциониста (как дополнение к девелоперу-перфекционисту). Он-то уже точно никогда не закончит тестирование - а вдруг там ещё есть проблемы? Не все же возможные тесты написаны. MTBF 100000 часов - это мало, вдруг пользователь этому будет не рад?
Bottomline
1. Вся красивая архитектура софта и тд - пользователю глубоко безразлична. Это всего лишь способ уменьшить количество [потенциальных] проблем в дальнейшем развитии продукта. А, да, ещё это в некоторой степени fun и даёт нам чувство завершенности. Дайте девелоперу пример - IDE в котором он работает. Пусть расскажет какая в нём прекрасная внутренняя архитектура и насколько она важна для его повседневной работы (в сравнении с фичами и производительностью этого самого IDE).
2. Хорошо, когда инженеры (девелоперы и тестировщики) знают что можно улучшать, и хотят улучшать продукт. Плохо когда они не понимают что действительно важно, а что не очень. Очень плохо, когда некому правильно расставить приоритеты и осмысленно отсекать ненужное.
3. На самом деле это всё вопросы качества продукта. А качество != идеал, и все в команде должны это понимать. И кто-то должен убедиться в том, что команда в курсе.
Артём
P.S. Сорри за несколько сумбурный пост