It must be a truism by now, almost certainly proclaimed by Arthur C Clarke, that Any sufficiently advanced software has breaking changes in a major release. Ours, regrettably perhaps, is no exception.
In this post, I’d like to emphasize the protocols we have for breaking changes and releases. I am embarrassed to say that we have, to put it mildly, not been very diligent at following them of late, for which I apologize on behalf of DevExpress. Rest assured that over the past few months we have been putting into place some stronger policies with our dev teams about how we expose breaking changes, how we try to avoid them, and how we publicize them.
In essence: breaking changes will be limited to major versions only, as much as we are able. That’s point one. We are essentially saying: here’s a new release with some great new features but in order to provide them we had to refactor the infrastructure (our data classes are a strong example of what I mean), change the API, or modify the behavior somewhere. Changes due to some API being modified or retired or refactored will trigger “deprecated” warnings in your code for at least one major release, preferably two. So, as an example, if the
ShowMe property is being deprecated for a new
Show() method in v16.1, then the property should be marked as obsolete in v16.1 and v16.2 (and still work as before) and will disappear in v17.1. We recognize that some customers do not automatically upgrade to a major version straightaway (probably due to breaking changes, sigh), but need some time to evaluate and test whether the upgrade is worth applying or not. I personally do not recommend skipping more than one major version. (In brief: Turn on warnings! Test, test, and test again!)
As part of this effort, we are revamping how we report breaking changes. Prior to this, I’m afraid we could be a little too terse with the descriptions in our breaking changes list. This was bad in a couple of ways: first, it sometimes wasn’t at all obvious how to fix your code, and second, it increased the workload on our support team as the inevitable questions came in. So, from now on, you should see more complete details in our entries for the breaking changes page.
I’ll expand on this by stating that we should formally publicize the changes somehow, rather than just sweeping them under the metaphorical carpet in a page that is hard to find. This could either be by email (although I would guess that the majority of recipients would not read it or even complain about spam) or as a blog post like this. Personally speaking, I would rather a blog post: it’s stays up and can be found in the future, it can be updated to expose more details if needed, it’s more conversational.
Point two is that we recognize that bug fixes we provide in minor releases may also break code. A bug fix is, in and of itself, a breaking change, albeit a revision to repair unwanted behavior. However, we shall do our utmost in those situations to (a) minimize the impact and breadth of these required changes, and (b) to publicize them to our customers. Our overall aim is to make updating to the next minor release as uneventful as possible; after all, the biggest reason to update is to fix bugs that you may (or may not yet) have encountered.
Point three is that undocumented classes, interfaces, methods, and properties are fair game. Please try not to use undocumented identifiers in your code. Assume they will change at a moment’s notice. If the support team supply a workaround that uses undocumented identifiers, we shall be putting a strong warning in the post that the workaround may break when the official fix is provided.
Without further ado, here is the full list of breaking changes for Universal v16.1. You will see some that are API changes and that will possibly break your code, and some that are behavioral in nature (for example, the iOS theme in ASP.NET has changed) and should please your users. Note that this list is still being updated as far as details go – although we’ve released the beta, the release is still a week or so away – but you should not see any new changes being reported.
I and my fellow members of the management team are interested in hearing your views on breaking changes. If you have feedback or comments, please comment here (we shall all see it) or email me at firstname.lastname@example.org and I will circulate the responses among the team. As always, thank you for choosing DevExpress.