Смотрите, какой веселый эксперимент нашел. Ребята решили проверить, можно ли заменить какую-то платную внутреннюю корпоративную систему на самодельную реализацию, написанную с агентами за два дня. На вход взяли подробную документацию, описанные юзкейсы, руководства и демки.
На выходе, ожидаемо, получили довольно убедительно выглядящий прототип, который, тем не менее, разваливался в большом количестве сценариев, отличных от описанного в документации дефолтного – часть фичей оказались стабами, никакой нагрузки система не выдерживала, а важные эдж кейсы не были учтены.
Несмотря на этот довольно ожидаемый итог, мне очень понравился один вывод из этого эксперимента:
Сложная система обладает эмерджентными свойствами. Это свойства, которые возникают на стыке компонентов, а не внутри них.
Суть в том, что вот такие эмерджентные свойства никогда не описаны в документации, и чаще всего не описаны в тестах. В лучшем случае они существуют в головах разработчиков и тестировщиков, а чаще не существуют вообще нигде. И чем сложнее система, чем больше в ней взаимосвязей, тем больше там таких эмеджентных свойств. Именно это делает задачу клонирования чужих продуктов или даже переписывания собственных с одного языка на другой такими сложными.