Недавно инспектировал код одного приложения и выписал список вопросов разработчикам с ответами.
Приложение основано на клиент серверном взаимодействии, с регистрацией и обновлением некоторых данных.
- У нас же API 14 и выше? Ну и что, я знаю и использую support-library, где только могу.
- В support-library есть ActionBar (молчим уже про API 14)? Ну и что, я знаю ActionBarSherlock.
- Взаимодействие с web-командой по поводу улучшения API? Только время тратить, сделаем на том, что есть.
- Проверить работу API использую RestClient или сниффер? Зачем, я в дебаггере посмотрю.
- Взаимодействие с дизайнерами для соблюдения гайдов и улучшения UX? Они же 1 час в день доступны, мы не сможем общаться.
- Типизация? Не слышал. Храним все в строках, когда надо преобразуем в нужные типы используя *.parse*.
- База данных? Зачем? Сохраним все в SharedPrefs в JSON.
- Повторное использование кода? Нафиг. Быстро копипастим и дальше кодить.
- Кеширование данных? В топку, у нас же всегда есть подключенный интернет.
- Отображение прогресса загрузки? В макетах нет.
- Отображение ошибок загрузки? Да откуда там ошибки?
- В API не выводятся ошибки? Так мы их и не отображаем.
- Отключение интернета? Так не бывает.
- Сервис для обновления данных пользователя? Так они и так в фоне обновляются AsyncTask-ами.
- Зачем нужны AndroidAnnotations? Отличная тема! Надо использовать везде, где только можно! Все в Background, что бы ANR не было.
- Очистка пользовательских данных при выходе из учетной записи? А что, кто-то выходить будет?
- Проверять, что поля нет в JSON, не учитывать новые поля? Зачем, API же не меняется.
- ShapeDrawable? Так фоны же дизайнер нарезал? Ну и что, что там белый прямоугольник.
- А как же размер приложения? В 10Мб уложимся.
- Fragments? Зачем? У нас же только телефоны.
- Локализация? Да, вроде как приложение на испанском, но они же знают английский? Захардкодим сообщения, все и так поймут.
- Форматирование строк? Это еще зачем? Умножим на 10, приведем к int-у и поделим на 10. Все будет ок!
- А если нужен будет другой формат? Умножим на 100.
- Формат дат? Захардкодим. Испанский же!
- Повторное использование layout-ов, include? Долго! Лучше CTRL+c, CTRL+v
- Тесты на разных разрешениях? У меня нет столько устройств.
- Эмулятор? Эмулятор тормозит.
- x86? Ну… это же надо разбираться, а времени-то нет.
- ExpandableListView? Сложно и долго! Заинфлянчу ручками.
- ProgressBar? Так по макетам он зеленый! Сделаем layout и ручками ширину выставим.
- Что-то где-то крешится? Ок, try-catch поставим, зачем нам об этом знать.
- А как тут понять, что можно свайпить? Так в макетах было.
- MagicNumbers? ???
- Вынести константы в одно место? Нет смысла, они же только один раз используются.
- А вот эта константа в двух местах же есть? Это исключение, она не будет меняться.
- Тут может быть много элементов. ArrayAdapter не сожрет всю память? Если сожрет, увеличим кучу.
- Как насчет аналитики? Чего?
- Как насчет сбора информации о крешах? Они будет видны в Google Play.
- Как насчет сбора информации о крешах на этапе тестирования? Научитесь пользоваться adb logcat.
- А если мы привлечем к тестированию еще каких-то людей? Научите и их.
Не экономьте, ищите нормальных людей, но и не забывайте о правильной постановке задачи (DoD наше все).
Иногда лучше немного переплатить и потратить чуть больше времени, но спать по ночам спокойно, зная, что за работой профессионалы.
Всем желаю быстро, хорошо и дешево!
Автор: dyap