Here is the easiest way I've found to quickly and easily debug my initialization modules:
1. In your Initialization module, add this line where you would like the debugger to break
2. Using Visual Studio's Debug > Attach to Process menu, attach to all of the w3wp processes. This makes sure that you are still attached to the process running the initialization even when you restart the site in the next step.
3. In IIS, restart the website you'd like to initialize
Another use case for InitComplete is if you need to access the Start page of your site or any other site specific properties. These are only available after the site has been initialized.
One "gotcha" to keep in mind, is that you must have the wild card site binding in order for the initialization module to properly find your Start Page. Otherwise,
ContentReference.StartPagereturns an empty content reference.
Do you know of any other tips when developing initialization modules? Let me know in the comments!