There's still a few open loops in this thread that I'd like to keep pushing
on.

I admit I've been pretty adamant that there's real value for a) users,
operators, and ourselves, having an intuitive understanding of our
recommended upgrade paths by versions, and b) a method to reduce the CI
testing load, but it's also clear that the status quo isn't quite right yet
for all of us.

The topics I believe at hand are…

* Online versus Offline compatibility
* Testing resources required to community support many upgrade paths
* When deprecated cognitive load and tech debt does become too much
* What are we currently doing with Major vs Minor versions
* And, who are the people doing the work in these areas

I'm avoiding the marketing aspect of major versions.  I think we need to
sort out and work forward from these technical issues first, but that might
just be my opinion 🤷


=Online versus Offline compatibility

There's a push to avoid unnecessarily breaking online and offline
compatibility.   While offline compatibility has been deemed more
important, we should also aim to be online compatible forever.  This raised
the tension point that no major, or any other, version should be a license
to break compatibility or remove deprecated stuff –  we have leaned too
eagerly in this direction in 4.0 and 5.0.


=Testing resources required to community support many upgrade paths
=When deprecated cognitive load and tech debt does become too much

But we are fallible, there are bugs, accidental compatibility issues, a
build up of tech debt (cognitive load on compatibility paths), and limited
community resources to how much we can CI test, and limited doc
contributors.

I'm not keen on us recommending upgrade paths that we are not running
through CI.  Neither having to rely upon downstream users and vendors
saying opaquely what is recommended.

This isn't an either-or situation.  Let's target online compatibility in
the project, while being conservative in what we message publicly.  For
example "these are our recommended upgrade paths, other paths may work but
you're on your own – do your homework".

Then, in the project when tech debt does become too much*, or there's
unintentionally breakage or a bug, we have possibilities at hand to make
fixes a little more feasible.  And this should always be done with
consensus on the ML, and where breakages are restricted to non-recommended
upgrade paths.

*) I hope that removing tech debt (cognitive load) in the code is always
considered a valid discussion, and that we should keep in mind a codebase
that is also accessible to engineers that are not full-time employed to
work on C*.


=What are we currently doing with Major vs Minor versions

There is no desire for semver purity.  The point is if/how we might take
advantage of the major and minor distinction.  Some see it as an
opportunity for marketing.  Some see it as an opportunity to reduce our
workload and cognitive load while making life a bit easier for operators.
And others see it as meaningless and should just be removed.

It has been suggested that our upgrade paths be restricted to those
versions we currently maintain.  The problem with that is many operators
find themselves outside of these versions, and want to know what paths are
recommended or possible to get back onto a maintained version.  We cannot
assume they can make a single jump back onto a maintained version, and
leaving them out in the cold is an unfortunate f** *** to them, IMHO.  A
little empathy for our users goes a long way.

Documentation on our (recommended or strict) upgrade path should also be
available, but we don't see anyone really stepping on much on the docs
front.  Again, I don't think it's appropriate to leave it to vendors to be
documenting this for us.  The rule that we have "only upgrade between
adjacent major versions" has effectively/inadvertently been in place since
3.0 (and maybe 2.0 ?), and it is an intuitive and simple rule that avoids
us having to document much.

In an ideal world where we got good at always and forever maintaining
online compatibility, and had unlimited CI resources, we could remove the
need for this application of the distinction.

It's worth noting that our definition of compatibility can include both
hard and soft concerns.  Hard is like 3.x to 5.x simply does not work
because internode messaging incompatibility.  Soft concerns can be the jdk
version (we recommend the jdk upgrade happens separately to a major
upgrade), or like TCM where there's enough of an operational warning flag
that we would rather operators extra carefully check everything that must
be manually done.

=Who are the people doing the work in these areas

My argument has focused on the opportunity to reduce documentation
requirements, to make it that bit more intuitive for operators, and to
minimise the CI resources requirement while ensuring what we say we do we
test.  I'm probably beating the dead horse here but I have had many
conversations with operators, with support, and also working on code inside
the project, which has benefitted from having a simple intuitive rule we
can rely upon.

So… IMHO anyone who wants to use major versions instead for marketing
purposes should be providing alternative suggestions that address the
raised issues, or stepping up to do the documentation, or donating the
extra CI resources needed.  I'm so not keen on seeing it be undocumented
and yolo, "hey, go read the jiras, STFW…` – but maybe that is what the
vendors want ?  I'm being a bit facicuous here, but the project is a
meritocracy that depends on people stepping up, I got my share of
frustration here.

Totally open to suggestions and new ideas, I'm not fixed on the status quo,
just keen to move it forward, working forward from the concerns and PoVs…


If pushed to make a call (prematurely) now, under the existing status quo,
my thinking is…

 - Patience with bumping to 6.0, we are still a few months away from any
release
 - Bump to 6.0 when we drop jdk11, if we agree TCM is a soft upgrade
incompatibility
 - Continue to recommend that 4.x to 6.0 upgrades are not community
maintained nor tested
 - Start enforcing unnecessarily breaking compatibility. Intentional
breakage and removals must always be ml approved
 - Accept for now that community CI testing is limited to our messaged
recommended upgrade paths
    - add additional upgrade paths if enough resources are available and
agreed upon
    - if/when enough resources are donated discuss extending CI to test all
upgrade paths for all currently maintained versions

Reply via email to