Что ж, не все так просто [2]
Второй акт факапов, в своей сути, не менее занимательный.
Если игнорировать факт, что с бренд-айдентикой есть проблемы, то все выглядит неплохо на первый взгляд, потому что ну, писать VPN-клиент на бумаге - то же самое, что писать любой другой софт. Со своими нюансами, но все же.
Идея же достаточно простая: Подписка. Парсинг серверов. Подключиться. Отключиться. Всё, срез закрыт, дальше только полировка. Так казалось на старте, и, честно говоря, ещё долго - это же минимальная база, закрытая здесь и сейчас.
Как-то потом так получилось, что список фич начал сам себя достраивать, и не потому что мне так захотелось, а потому что они тянут друг друга за собой, чтоб у тебя действительно был продукт уровнем не ниже хороших рыночных предложений.
Failover - ну само собой, одна из заявленных фич на старте, сервер иногда не отвечает, нужно уметь переключаться. Но фейловер без гистерезиса - это не защита, это дергающиеся соединения. Значит нужен гистерезис (сложное слово). А гистерезис без circuit breaker означает, что ты будешь долбиться в мёртвый узел с завидным упорством, пока он не оживёт сам. Значит он нужен. А брейкер без бэкоффа тоже не имеет смысла, а то у тебя не будет списка серверов, с которыми не стоит работать. И в какой-то момент я осознал, что уследить за всем этим уже сложновато, но нужно - потому что хочу честной и прозрачной работы с серверами, которую не все даже предоставляют.
Ни один из этих пунктов я не выбирал делать. Каждый предыдущий тянул за собой следующий, потому что без него был бы враньём пользователю. Я сам себе первый пользователь, и врать самому себе в своём же софте не хочется.
Тут я устроил себе аудит, который, наверное, стоило сделать раньше - не на "работает ли", а на "не врёт ли, что работает". А потом еще один уже с нейронками. Запускаем сервера, даем всякие кастомные настройки сети, переключаем вайфай, включаем два клиента сразу и т.д. и смотрим. Ну я и посмотрел. В итоге нашёл критичный баг: приложение могло зависнуть после неудачного реконнекта и молча делать вид, что всё в порядке. А все из-за внешних фреймворков эпла, до работы с которыми было все просто и стабильно, а о переходе на него я отдельно рассказывал в посте о 42 сборках.
Наученный опытом обычного софта и мобилок, я думал, что "готово" - это когда фичи на месте, а оно оказалось, "готово" - это когда ты перестал находить способы, которыми оно тебе врёт.
И я до сих пор не знаю, нашёл ли последний, т.к. без внешних тестов этого не подтвердить одними руками.
Отловил все нужное, тыщи тестов, две версии клиента (новый на эпловом фреймворке и старый на демоне как стабильный), часть протоколов второй волны фич (влесс 2, реалити, хистерия) написана, но не проверена вживую, потому что серверов с такими протоколами у меня попросту нет под рукой. И тут вопрос, как выдать это тестерам, а это уже своя пачка проблем, т.к. версия "работает у меня" != версии "работает у всех".
А iOS всё ещё в статусе "работает на живом айфоне", но не на уровне macOS по фичам - потому что мосты для запуска одних и тех же фич на разных платформах устроены по-разному, хоть кодовая база и единая. Перетаскивать "почти уверен, что рабочие" фичи на другую платформу, пока сам ещё работаешь со старой, - не то, на что стоит тратить время. Лучше сфокусироваться на десятке фич, которые уже здесь и сейчас реализованы и тестируются на маке, а потом перегонять их "1000% готовыми" на другие платформы, где останется только подлатать.
Лучше же сначала сделать один исключительный продукт, чем разойтись на несколько нормальных, вот и получается ловушка "не буду делать другие платформы, пока не закончу с текущей", а после аудитов от ллм, которые находят, что ещё может быть не закрыто - откладывают и откладывают релиз-тест все дальше и дальше.
А когда уже разобрался с функциональностью, начинается третий класс проблем и самый мощный, но об этом в третьей и заключительной части. Потому что, что ж, не все так просто.