Best Practice with relays is to use them so that the coil is energized for the minimal amount of time. Getting this right is dependent on the application and is sometimes a criteria that cannot be rationally met.
Here's an example: You want to control a relay that turns a light (or LED) On for 5 minutes out of every hour. Here you would use the Normally Open contacts because the relay coil will only need to be energized 5 minutes out of every hour. If you used the Normally Closed contacts, you would have to keep the coil energized for 55 minutes to keep the light Off, then de-energize the coil for 5 minutes to turn the light On. Completely the opposite situation of what you want. You don't want the coil remaining energized, producing heat, wasting power, running down its expected operational life, etc. any more than the application dictates.
On the other hand, if you wanted to keep the light On for 55 minutes and turn it off for 5 minutes out of every hour, then you would use the Normally Closed contacts, because in this situation this results in the minimum overall energization time for the coil.
This also applies to solenoids. Energize them as little as possible based on the application and how you utilize the mechanical action of the solenoid.
As for the ESP8266. I don't know this specific processor, but I can speak in general about the situation and concern you present. Yes, it's possible to energize the relay momentarily, or steadily, on power up with just about any microprocessor. Here's the "good practice" rule:
When the microprocessor is held in a continuous reset state, e.g. by holding down a manual reset switch, all of the outputs should go to their "safe state" as defined by the specific application.
Here's an example. You have a system in which one of the micro's outputs controls a high power heating element. When the micro is held in reset, you wouldn't want that heating element to remain in an activated state, for various hypothetical reasons. To accomplish this objective you must design the heater drive circuit to de-energize the heater element when the processor is held in it's reset state. The output of the micro controlling the driver circuit for the heater might be electrically high or electrically low during reset, that depends on the micro you are using. You can usually get this info from the micro's data sheet. You need to design your driver circuit such that the reset state output of the micro pin makes the heater element turn off (de-energize). Often this will involve adding an inverter (e.g. 74HCT04) to the GPIO output pin to flip it around to the harmless logic level while the processor is held in the reset state. Depends on your specific processor and your driver circuitry characteristics.
Many processors have GPIO pins that revert to inputs when the processor is held in reset. Often these inputs are floating. (This is the case with most Atmel Arduino processors.) That is, the micro does not pull them electrically high or electrically low. This is a bad situation for GPIO pins you will later configure as outputs under program control - you never know which way your driver circuit will tend to drift towards - high or low. So, you have to force the pin to the right polarity by adding a pull-up or a pull-down resistor. The resistor has to be sized (resistance chosen) such that it can adequately drive the driver circuit in the absence of drive from the processor, yet not interfere with the processor's GPIO output capabilities in normal running operation.
If you cover the long-term reset situation described above, you will also be covering the short term reset situations that typically occur on system power-up and sometimes for other reasons ( e.g. short term power outages).
It's as simple as that!