Best Practices - What is supported and not.

The issue of supportability comes up a lot.  I would like cover it in this blog post. When we get cases from customers we look at the servers, software and APIs involved.  In addition, the development scenarios and configurations are taken into considerations.

A lot of customers run outdated versions of Exchange and Outlook - such as RTM Exchange even though they would need to be at SP3 to be supported... I guess they don't care about the many years of fixes and improvements which MS did for Exchange 2010 and would rather troubleshoot issues which might have had fixes released years ago. Some want to test with the oldest versions of things their code runs against but don't understand that they should also test with the latest bits if they run into an issue and end up fighting an issue which has already been fixed and end up opening a support case when patching to the latest updates (even ones years old) might have resolved the issue.

I sometimes even see customers doing things which they should not - such as using Extended MAPI under .NET, changing traffic to Exchange using an ISAPI component running in an Exchange worker process and have seen  some go much further and inject their code into Exchanges processes in order to alter its behavior.  When we run into issues such as these there is nothing we really can do other then explain that the code needs to be changed to use a supported API or method. In some cases products are built and deployed for many years without an issue... then it happens.... MS releases fixes or changes and their application breaks... so, they troubleshoot and open a support case for help.  The problem is that in many/most cases there is nothing we can really help with as they were relying on something which should never have built an application to use.  Some ISVs end up in a very bad place having built apps which they had been selling to find out that their code won't work any more and there is no way to get it to work since they had chosen to take a risk in writing code in a way which MS would not provide support. When I talk to customers who do this they knew they were taking a risk from the start.  

For customer's with a Premier software agreement we have a path to request functionality be added in so that customer software can be written against it and be supported - this is called a Design Change Request (DCR). With a DCR there is a shot on getting the interfaces or changes they want.  However, such things need to be filed early on since such changes usually take a lot of time since planning and  development for MS products can be a very long process. The bar for accepting a change request is usually pretty high. 

There are a lot of things which MS documents to an extreme. However, not everything is documented publically... yeah proprietary stuff. Well, most all software companies do. Some developers decide to take it upon themselves to reverse engineer code they don't own and then don't resist the temptation to hook into an app in a way it was never intended to, was never deigned to and never tested  for.  So, when their application has issues they get pretty excited though they had made the choice to go down that path themselves.

Lets define what unsupported means:

What Does "Unsupported" Mean?
https://blogs.msdn.com/b/pcreehan/archive/2007/05/04/what-does-unsupported-mean.aspx

Microsoft Support Lifecycle:

Microsoft Support Lifecycle Policy FAQ
https://support.microsoft.com/en-us/gp/lifepolicy

Windows lifecycle fact sheet
https://windows.microsoft.com/en-us/windows/lifecycle

Microsoft Support Lifecycle
https://support.microsoft.com/en-us/lifecycle#gp/gp_lifecycle_servicepacksupport

Microsoft Support Lifecycle Database:

Microsoft Support Lifecycle - Exchange
https://support.microsoft.com/en-us/lifecycle/search?sort=PN&alpha=Microsoft%20Exchange%20server&Filter=FilterNO

Microsoft Support Lifecycle - Outlook
https://support.microsoft.com/en-us/lifecycle/search?sort=PN&alpha=Outlook&Filter=FilterNO 

Microsoft Support Lifecycle - Internet Explorer
https://support.microsoft.com/en-us/lifecycle/search?sort=PN&alpha=Internet%20Explorer&Filter=FilterNO

Microsoft Support Lifecycle - .NET
https://support.microsoft.com/en-us/lifecycle/search?sort=PN&alpha=Microsoft%20.NET%20Framework%20&Filter=FilterNO

Microsoft Support Lifecycle - Visual Studio
https://support.microsoft.com/en-us/lifecycle/search?sort=PN&alpha=Visual%20Studio&Filter=FilterNO

Support policies - software:

Support policy for Microsoft software that runs on non-Microsoft hardware virtualization software
https://support.microsoft.com/en-us/kb/897615/

Stay up-to-date with Internet Explorer
https://blogs.msdn.com/b/ie/archive/2014/08/07/stay-up-to-date-with-internet-explorer.aspx

Support policies - Development:

Developer support limitations for public protocols 
https://support.microsoft.com/en-us/kb/2269506/en-us

"Enhancing Exchange" via unsupported methods.
https://blogs.msdn.com/b/webdav_101/archive/2013/06/13/quot-enhancing-exchange-quot-via-unsupported-methods.aspx 

OWA Single-sign-on support
https://blogs.msdn.com/b/webdav_101/archive/2012/08/07/owa-single-sign-on-support.aspx

Using ISAPI Extensions to change-out OWA Credential is not supported
https://blogs.msdn.com/b/webdav_101/archive/2007/05/04/using-isapi-extensions-to-change-out-owa-credential-is-not-supported.aspx

Microsoft does not support using ISAPI extensions or filters to modify Outlook Web Access credentials on a server that is running Exchange Server
https://support.microsoft.com/kb/938609

Microsoft support policy for the customization of Outlook Web Access for Exchange
https://support.microsoft.com/kb/327178

Building VCALENDAR content without an Microsoft API is not supported by MS.
https://blogs.msdn.com/b/webdav_101/archive/2008/02/26/building-vcalendar-and-ical-is-not-supported-by-ms.aspx

HOWTO: Read unmounted Exchange EDB files.
https://blogs.msdn.com/b/webdav_101/archive/2008/09/03/howto-read-unmounted-exchange-edb-files.aspx

What's not supported with WebDAV?
https://blogs.msdn.com/b/webdav_101/archive/2008/05/01/whats-not-supported-with-webdav.aspx

Drag and Drop with Outlook
https://blogs.msdn.com/b/webdav_101/archive/2008/04/01/drag-and-drop-with-outlook.aspx

FYI: Why are MAPI and CDO 1.21 not supported in managed (.NET) code?
https://blogs.msdn.com/b/mstehle/archive/2007/10/03/fyi-why-are-mapi-and-cdo-1-21-not-supported-in-managed-net-code.aspx

Save The Date - End of Exchange 2010, Windows 7 and 2008 Mainstream Support – T Minus 6 Months
https://blogs.technet.com/b/rmilne/archive/2014/07/24/save-the-date-_2d00_-end-of-exchange-2010_2c00_-windows-7-and-2008-mainstream-support-_1320_-t-minus-6-months.aspx

Support Ending for the .NET Framework 4, 4.5 and 4.5.1
https://blogs.msdn.com/b/dotnet/archive/2015/12/09/support-ending-for-the-net-framework-4-4-5-and-4-5-1.aspx

.NET Framework Versions and Dependencies
https://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

Please Note:

Microsoft Developer Support does not write or maintain customer production code.
https://blogs.msdn.com/b/webdav_101/archive/2011/09/29/microsoft-developer-support-does-not-write-or-maintain-customer-production-code.aspx

Also see:

About: Messaging APIs
https://blogs.msdn.com/b/webdav_101/archive/2015/08/07/about-messaging-apis.aspx