What should I use to write Speech Server applications?

Recently, I have seen a few posts on other blogs asking what should one use to create speech server applications.  To review, there are four ways to write speech server applications in OCS 2007.

1) Windows Workflow Activities

2) Core API (basically managed code without Workflow activities)

3) VXML

4) SALT

For those of you who are on the fence about what to use, I will simplify the process significantly.  The answer should be - use Workflow Activities unless you have an extremely strong reason to do otherwise.  The primary reason is this will give you the best upgrade path for future versions.  If you develop with the supplied Workflow Activities, you will have the easiest upgrade path compared to the other three ways. 

Probably the only other choice that may make occasional sense is VXML, because it is better known by developers.  However, VXML does not cover applications with multiple modalities (text, voice, video, etc) very well.  Keep in mind also that creating a VXML application that will only run on Speech Server is akin to creating a pure Java solution that is only intended to run on Windows.  When you create a VXML application, under the covers it is still calling that same Core API that our workflow activities use.

There is some misconception that one needs to be intimately familiar with the Windows Workflow Foundation in order to use Speech Server.  This is not true - you can successfully create very complicated Speech Server applications with only a minimal knowledge of the Workflow Foundation as we simply do not use many of its features.  Creating Workfow applications is very simple with the designer that we provide and you still have the flexibility to use code or create your own activities whenever the supplied activities are insufficient.

In summary, when deciding how to build your speech application, your first choice should be to use the Windows Workflow activities.  Only if you have strong business needs that require you to use one of the other solutions - at the cost of increased development time and future upgrade issues, should you not use the workflow activities.