The basics
Two kinds of OTA update.
An OTA update on an ESP32 running MicroPython replaces either your Python files or the MicroPython firmware itself. The choice decides how big each download is, and how the device recovers when an update goes wrong.
App files
Your .py or .mpy files, typically tens of kilobytes: small, quick to install, and the everyday update.
Firmware image
The whole MicroPython build, a megabyte or more, written to the spare OTA partition, with a way back if it never confirms.
Either way, three questions decide how safe and how cheap updates are: is each update signed and checked on the device; can a bad update roll itself back; and on a battery device, when does it look for updates without waking the radio more than it has to?