This must be defined before anything else can begin. Any changes to these requirements should be viewed as enhancements or additional projects, and not part of the original scope. If designed from the beginning as being modular, additional features as well as fixes to existing features will be much simpler. New features are simply new modules, and problems can be easily isolated. All communication between modules should be done in the simplest way possible.
Simplicity enhances maintainability, performance, and integration.
Secret methods of communication and deviation from standards only create a system that is not maintainable because the troubleshooting is close to impossible. Use the right tool for the job. Use the tool that fits the job. You may have to go to bat for your tool, just be ready to support your decision. Bugs are NOT acceptable.