Из одной умной книжки вынес такие вот правила разработки программного продукта. Они немного шуточные. Но в каждой шутке - лишь доля шутки, иначе было бы не смешно )
Думаю, если следовать этим правилам на практике, то хуже точно не сделаем, а вот лучше - вполне возможно:
- Поскольку наши менеджеры по продуктам не знают, чего хотят, они узнают об этом от клиентов. Иногда они понимают их неправильно.
- Поскольку наши менеджеры по продуктам не знают всего о системах, они приглашают других экспертов стать заинтересованными сторонами в проекте. Заинтересованные стороны понимают их неправильно.
- Поскольку я не знаю, какую задачу решать своим кодом, я узнаю об этому наших менеджеров по продуктам. Иногда мы понимаем друг друга неправильно.
- Поскольку я допускаю ошибки при написании кода, я работаю с IDE. Среда IDE поправляет меня, когда я совершаю ошибки.
- Поскольку я допускаю ошибки в понимании существующего кода, я использую статически типизированный язык. Компилятор поправляет меня, когда я совершу ошибку.
- Поскольку я совершаю ошибки в процессе размышлений, я работаю в команде. Команда поправляет меня, когда я ошибаюсь.
- Поскольку члены команды - люди и тоже допускают ошибки, мы пишем тесты. Тесты говорят нам, когда мы совершаем ошибки.
- Поскольку у нас есть команда, которая также занимается программированием, мы интегрируем свой код с их кодом. Наш общий код не будет компилироваться, если мы ошибаемся.
- Поскольку наша команда разработки допускает ошибки, мы делаем приёмочные тесты, которые проверяют всю систему. Приёмочные тесты скажут нам, если мы ошибаемся.
- Поскольку мы допускаем ошибки при выполнении приёмочных тестов, то собираем команду вместе, чтобы обсудить их. Команда скажет нам, если мы ошибаемся.
- Поскольку мы забываем запускать тесты, то заставляем нашу сборку запускать их за нас. Сборка скажет нам, если мы ошибаемся.
- Поскольку мы не можем продумать каждый сценарий, мы привлекаем тестировщиков для изучения системы. Тестировщики скажут нам, если что-то не так.
- Поскольку мы заставили программу работать только на ноутбуке Михаила, мы развёртываем систему в реалистичной среде. Тесты системы в реалистичной среде скажут нам, если что-то идёт не так.
- Поскольку мы иногда неправильно понимаем своего менеджера по продуктам и другие заинтересованные стороны, мы показываем им систему. Заинтересованные стороны скажут нам, если мы ошибаемся.
- Поскольку наш менеджер по продуктам иногда неправильно понимает людей, которым нужна система, мы запускаем систему в производство. Люди, которым она требуется, скажут нам, если мы ошибаемся.
- Поскольку люди чаще замечают, когда что-то идёт не так, чем когда всё работает как должно, мы не просто полагаемся на мнения. Мы используем аналитику и данные. Данные подскажут нам, если мы ошибаемся.
- Поскольку рынок постоянно меняется, однажды мы окажемся неправы, даже если раньше были правы.
- Поскольку промахи дорого обходятся, мы делаем всё это так часто, как только можем. Таким образом, мы всегда ошибаемся только немного.
- Не задумывайтесь о том, чтобы сделать всё правильно. Беспокойтесь о том, как вы узнаете о проблеме и как проще будет исправить последствия, когда это случится. Потому что вы, скорее всего, ошиблись.