The boot mode is set by IO0.
Set it to 0 to boot in download mode.
Set to 1 for normal boot.
Correct.
EN (enable) pin must be always connected to VDD(3V3). Otherwise the internal regulator will be off.
Absolutely not.The EN pin needs to be correctly sequenced for reliable programming. In fact, most cases of failure to program are because EN is taken high too soon, before IO0 has been pulled low. This is why a common fix is to place a 1-10μF cap from EN to ground, so that it is kept low a bit longer.
The correct sequence to reliably enter programming mode is:
1. Take EN low.
2. Take IO0 low.
3. Take EN high.
4. Take IO0 high.
The correct circuit for EN is a pull-up resistor to 3V3, and a cap to ground. If you tie EN directly to your 3V3 supply, then you have to manually hold IO0 low (e.g. holding the BOOT button) low while powering up. If you want to be able to do the normal thing of allowing the programmer software (and interface) to reset a running ESP32 and upload new firmware, then it has to be via a pull-up resistor.
The transistors on an ESP32 dev kit or on the ESP-PROG programmer serve to convert the DTR and RTS serial handshaking lines into a sequence on EN and IO0 (and on some boards, they also have it control IO2, the other boot mode pin.) See the attached ESP32-LyraT schematic for how that variant looks.