Lesson number 1: Do not make running the menu scene the only way to access complete game functionality
Our implementation of the menu system did just that: it call the gameplay level scene when the user pressed play, and ensured that all scripts referred to the correct scene while it was playing. The end user's perspective on the build was unaffected by the consequences of this design error. Where the problems began was when I started editing the main gameplay scene after the menu implementation.
Some things were the same when you pressed play while editing the main gameplay scene, but some were not. Playing this scene in the editor resulting in minor bugs that did not stop gameplay and still allowed the designer to productively edit and play the scene in the Unity3D Editor. Or so we thought. Ultimately, there were some important bugs disguised as minor bugs that were preventing the enemy AI behaviours from responding to inspector and even hand-coded changes.
The specific issue was that while loops seemed to failing to stop even when their conditions were set appropriately. This meant enemy attacks would last forever and never do damage! It also meant that values I was tweaking in the inspector were not actually resulting in changes, so the damage values were way off when I eventually did play the scene from the menu. ALL OF THIS seemed to due to an unimportant error message which linked to a line of code in the Health class. It merely stated that the health bar was not initialized, the known (and previously thought acceptable) bug that was a side-effect of our menu implementation.
Lesson number 2: Do not make the HUD element (i.e. health bar) the primary reference for health or other values
Display elements should always refer to abstract values in the code. For example, it is not a good idea to make the health bar script contain the code that modifies health. That is the mistake we made, and it created a lot of latent problems that ended up destroying our productivity for a few days. The reason to rely on abstraction is because it has less requirements to run effectively. In our case, the HUD elements could only run properly when the menu scene was run and would not function when the main gameplay scene was run from the editor. This problem could also have been caused if the health bar had errors due to assets for the HUD reaching beyond system requirements or not being properly accessed for other reasons.
In Unity3D, it is best practice to allow designers the ability to play and test from any scene. Especially for small teams!