Я думаю, что эта проблема в значительной степени неразрешима, но можно создать некоторые точные оценки с немного большим знанием процесса, который выполняется. А в тех случаях, когда есть большие неизвестные, лучше информировать пользователей об этих неизвестных, чтобы они могли их учитывать.
Чтобы взять простой пример загрузки пакета файлов, у вас есть две известные переменные:
- Количество файлов
- Размер файлов
Для каждого файла есть постоянные издержки (время, необходимое для установления соединения, и время, необходимое для открытия файла в файловой системе). Существует также очевидное время загрузки, связанное с размером файлов. Создание функции, которая может выражать это как оставшееся время с точки зрения текущей скорости загрузки, является простым и точным, если скорость загрузки не колеблется слишком сильно. Но в этом и заключается проблема.
С точной моделью операции, которую вы выполняете, легко предсказать, сколько времени это займет, если нет внешних воздействий. И это редко возможно.
Однако вы могли бы пойти на решение, которое пытается понять и объяснить эти внешние влияния. Пользователь может оказаться полезным получать оповещения, когда скорость резко меняется, поскольку он может скорректировать свои планы в соответствии с новым ETA. Также может быть полезно объяснить, какие факторы влияют на текущую операцию. например,
Your download will complete in 6 minutes, if the download speed stays at 50k/s
Это позволяет пользователю делать некоторые обоснованные предположения, если он знает, что скорости могут измениться. И в конечном итоге приводит к меньшему количеству разочарований.