On Jul 2, 2014, at 12:45 PM, Andrew Phillips <aphill...@qrmedia.com> wrote:

>> Some projects never break client code. I think that’s one extreme  that 
>> won’t serve us or our users well. To ease any pain associated  with breaking 
>> code, we do need to make it very predictable. And  making breaking changes 
>> at major release boundaries only achieves  that goal.
> 
> I think we're definitely agreed that we shouldn't make breaking changes 
> except in major releases. My comment - apologies if it wasn't stated clearly 
> - was that I'm hesitant to restrict ourselves to also *announcing* upcoming 
> breaking changes in major releases.
> 
> I agree that we certainly should avoid deprecating something in 2.9 and 
> breaking it in 3.0, but deprecating it in 2.1 and breaking it in 3.0 (with 
> requisite warnings, questions on user@) etc. seems reasonable to me in 
> general.

Basically I’m looking for a guaranteed *minimum* amount of time for users to be 
able to react to breaking changes. Considering the long release cycles in place 
at many organizations, I think 6 months is the absolute minimum.

If we had a 6 month major release cadence, announcing upcoming breaking changes 
on major release (X.0 only) would be necessary.

If we had a 9 month major release cadence, announcing upcoming breaking changes 
on major release or the two releases after (X.0, X.1, and X.2 only) would be 
possible.

> Curious to hear what others feel about that?

Me too. Perhaps it’s lazy consensus at work. :)

>> I see what you mean but wouldn’t that make backporting very  difficult if 
>> not impossible in some situations?
> 
> Could you explain? I would imagine that if we wanted to remove a piece of 
> functionality on master (and, of course, we don't *have* to do this - I'm 
> just not sure we want to ban it), we would:
> 
> 1) Push a commit that deprecates the functionality we want to remove and 
> presumably adds an alternative
> 2) Backport that commit to the current release branch
> 3) If desired, push a subsequent commit to master to remove the deprecated 
> functionality

Hmmmm…maybe this would be okay. Any new code added after (3) that used the 
alternative would still be able to be backported. I can’t think of a 
counter-example...

>> I understand now. What did you think of this alternative wording?
>> 
>> "Beta methods and classes will be promoted to non-beta status or  removed 
>> only in major releases (e.g. MAJOR.0)"
> 
> That sounds fine to me. It doesn't give any indication of *how many* major 
> releases you might have to wait, though. I'm perfectly OK of not including 
> such an indication if we feel it doesn't make sense, by the way.

I’m okay not including such an indication. I think it’s okay to take things out 
of Beta in minor releases if we feel they’re ready. It’s an addition and not a 
change so no danger of breaking anyone.

Thanks for the good discussion!

Everett

Reply via email to