Hi @HamzaHajeir! First, I suggest you read Device Firmware Update Cookbook | Interrupt. In that article, I propose a design which is robust to OTA failures but does not require a second full flash region.
If you have plenty of flash to spare, you can design a system that uses a full flash region to stage an update. It isn’t strictly necessary however.
If you’re looking for an off-the-shelf bootloader, I would recommend https://www.mcuboot.com/. While I don’t think it is perfect, it is a robust open source solution.