Use source version control systems to avoid losing work due to corrupted projects.
Source Version Control Systems, like subversion, GIT and SourceSafe, help avoiding losing work due to corrupted projects. They also help tracking changes history and backing up code.
Before deploying an application, complete thorough QA load testing on the same number of lines and protocols:
Normally, development and unit tests are done on single channel/single call scenario which does not account for factors that come with multiple channels running at the same time. It is highly recommended to run load tests of the IVR application with the same number of channels of the final deployed product and the same protocol used.
Minimize dynamic object instantiation, reuse objects as much as possible:
Instantiation of objects and subsequently distroying them, including strings, requires dynamic allocation and deallocation of memory blocks. This is first a time expensive process and also may lead to high CPU spikes when the Dot Net Framework garbage collector work on cleaning disposed objects. A better application design can benefit from object reusability.
Build an installer for your IVR application:
Each application must have an install program, which is going to take care of installing all the files (binaries, voice files, config files with default values, database connections) used by the app to the right locations. This should clearly state the name and version of the application being installed. Configuration files should be accessed and modified only by the app, not manually.
Unistalling the app should remove anything installed by the app.
Time spent in applications' events to execute custom code should be minimal:
VBVoice applications are event driven; voice processing is multi-threaded but VBVoice's event handlers are executed sequentially in the main thread. Therefore, time spent in applications' events to execute custom code should be minimal, in order to maintain maximum responsivity.
Avoid control copy-paste:
Due to the special internal design of the connections between controls, Copy-paste operation on VBVoice controls is not supported. However, when there is a need to copy-paste controls, it is better to make a call-flow branch reusable with SubStart control in direct mode. Read about this mode in the SubStart Control Page.
A separate Salve using Modularity may also be considered if the branch constitutes a functional callflow that could be called by several applications.
Minimize object instantiation per call, use channelized variables:
Instantiation of objects and subsequently distroying them, including strings, requires dynamic allocation and deallocation of memory blocks. This is first a time expensive process and also may lead to high CPU spikes when the Dot Net Framework garbage collector work on cleaning disposed objects. A better design can benefit from vbvFrame's Transfer properties. Developers may also create their own channelized arrays or objects.