Hi,

Keep in mind it is a bug fix release every month and a feature release every 
two months.

For development that is really a two month cycle with all bug fixes being 
backported one release. As a developer if you want to get something in a 
release you have two months and you should be sizing pieces of large tasks so 
they ship at least every two months.

Ariel
> On Mar 18, 2015, at 5:58 PM, Terrance Shepherd <tscana...@gmail.com> wrote:
> 
> I like the idea but I agree that every month is a bit aggressive. I have no
> say but:
> 
> I would say 4 releases a year instead of 12. with 2 months of new features
> and 1 month of bug squashing per a release. With the 4th quarter just bugs.
> 
> I would also proposed 2 year LTS releases for the releases after the 4th
> quarter. So everyone could get a new feature release every quarter and the
> stability of super major versions for 2 years.
> 
> On Wed, Mar 18, 2015 at 2:34 PM, Dave Brosius <dbros...@mebigfatguy.com>
> wrote:
> 
>> It would seem the practical implications of this is that there would be
>> significantly more development on branches, with potentially more
>> significant delays on merging these branches. This would imply to me that
>> more Jenkins servers would need to be set up to handle auto-testing of more
>> branches, as if feature work spends more time on external branches, it is
>> then likely to be be less tested (even if by accident) as less developers
>> would be working on that branch. Only when a feature was blessed to make it
>> to the release-tracked branch, would it become exposed to the majority of
>> developers/testers, etc doing normal running/playing/testing.
>> 
>> This isn't to knock the idea in anyway, just wanted to mention what i
>> think the outcome would be.
>> 
>> dave
>> 
>> 
>> 
>>> 
>>>>> On Tue, Mar 17, 2015 at 5:06 PM, Jonathan Ellis <jbel...@gmail.com>
>>>> wrote:
>>>>>> Cassandra 2.1 was released in September, which means that if we were
>>>> on
>>>>>> track with our stated goal of six month releases, 3.0 would be done
>>>> about
>>>>>> now.  Instead, we haven't even delivered a beta.  The immediate cause
>>>>> this
>>>>>> time is blocking for 8099
>>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-8099>, but the
>>>> reality
>>>>> is
>>>>>> that nobody should really be surprised.  Something always comes up --
>>>>> we've
>>>>>> averaged about nine months since 1.0, with 2.1 taking an entire year.
>>>>>> 
>>>>>> We could make theory align with reality by acknowledging, "if nine
>>>> months
>>>>>> is our 'natural' release schedule, then so be it."  But I think we
>>>> can
>>>> do
>>>>>> better.
>>>>>> 
>>>>>> Broadly speaking, we have two constituencies with Cassandra releases:
>>>>>> 
>>>>>> First, we have the users who are building or porting an application
>>>> on
>>>>>> Cassandra.  These users want the newest features to make their job
>>>>> easier.
>>>>>> If 2.1.0 has a few bugs, it's not the end of the world.  They have
>>>> time
>>>>> to
>>>>>> wait for 2.1.x to stabilize while they write their code.  They would
>>>> like
>>>>>> to see us deliver on our six month schedule or even faster.
>>>>>> 
>>>>>> Second, we have the users who have an application in production.
>>>> These
>>>>>> users, or their bosses, want Cassandra to be as stable as possible.
>>>>>> Assuming they deploy on a stable release like 2.0.12, they don't want
>>>> to
>>>>>> touch it.  They would like to see us release *less* often.  (Because
>>>> that
>>>>>> means they have to do less upgrades while remaining in our backwards
>>>>>> compatibility window.)
>>>>>> 
>>>>>> With our current "big release every X months" model, these users'
>>>> needs
>>>>> are
>>>>>> in tension.
>>>>>> 
>>>>>> We discussed this six months ago, and ended up with this:
>>>>>> 
>>>>>> What if we tried a [four month] release cycle, BUT we would guarantee
>>>>> that
>>>>>>> you could do a rolling upgrade until we bump the supermajor version?
>>>> So
>>>>> 2.0
>>>>>>> could upgrade to 3.0 without having to go through 2.1.  (But to go
>>>> to
>>>>> 3.1
>>>>>>> or 4.0 you would have to go through 3.0.)
>>>>>>> 
>>>>>> 
>>>>>> Crucially, I added
>>>>>> 
>>>>>> Whether this is reasonable depends on how fast we can stabilize
>>>> releases.
>>>>>>> 2.1.0 will be a good test of this.
>>>>>>> 
>>>>>> 
>>>>>> Unfortunately, even after DataStax hired half a dozen full-time test
>>>>>> engineers, 2.1.0 continued the proud tradition of being unready for
>>>>>> production use, with "wait for .5 before upgrading" once again
>>>> looking
>>>>> like
>>>>>> a good guideline.
>>>>>> 
>>>>>> I’m starting to think that the entire model of “write a bunch of new
>>>>>> features all at once and then try to stabilize it for release” is
>>>> broken.
>>>>>> We’ve been trying that for years and empirically speaking the
>>>> evidence
>>>> is
>>>>>> that it just doesn’t work, either from a stability standpoint or even
>>>>> just
>>>>>> shipping on time.
>>>>>> 
>>>>>> A big reason that it takes us so long to stabilize new releases now
>>>> is
>>>>>> that, because our major release cycle is so long, it’s super tempting
>>>> to
>>>>>> slip in “just one” new feature into bugfix releases, and I’m as
>>>> guilty
>>>> of
>>>>>> that as anyone.
>>>>>> 
>>>>>> For similar reasons, it’s difficult to do a meaningful freeze with
>>>> big
>>>>>> feature releases.  A look at 3.0 shows why: we have 8099 coming, but
>>>> we
>>>>>> also have significant work done (but not finished) on 6230, 7970,
>>>> 6696,
>>>>> and
>>>>>> 6477, all of which are meaningful improvements that address
>>>> demonstrated
>>>>>> user pain.  So if we keep doing what we’ve been doing, our choices
>>>> are
>>>> to
>>>>>> either delay 3.0 further while we finish and stabilize these, or we
>>>> wait
>>>>>> nine months to a year for the next release.  Either way, one of our
>>>>>> constituencies gets disappointed.
>>>>>> 
>>>>>> So, I’d like to try something different.  I think we were on the
>>>> right
>>>>>> track with shorter releases with more compatibility.  But I’d like to
>>>>> throw
>>>>>> in a twist.  Intel cuts down on risk with a “tick-tock” schedule for
>>>> new
>>>>>> architectures and process shrinks instead of trying to do both at
>>>> once.
>>>>> We
>>>>>> can do something similar here:
>>>>>> 
>>>>>> One month releases.  Period.  If it’s not done, it can wait.
>>>>>> *Every other release only accepts bug fixes.*
>>>>>> 
>>>>>> By itself, one-month releases are going to dramatically reduce the
>>>>>> complexity of testing and debugging new releases -- and bugs that do
>>>> slip
>>>>>> past us will only affect a smaller percentage of users, avoiding the
>>>> “big
>>>>>> release has a bunch of bugs no one has seen before and pretty much
>>>>> everyone
>>>>>> is hit by something” scenario.  But by adding in the second rule, I
>>>> think
>>>>>> we have a real chance to make a quantum leap here: stable,
>>>>> production-ready
>>>>>> releases every two months.
>>>>>> 
>>>>>> So here is my proposal for 3.0:
>>>>>> 
>>>>>> We’re just about ready to start serious review of 8099.  When that’s
>>>>> done,
>>>>>> we branch 3.0 and cut a beta and then release candidates.  Whatever
>>>> isn’t
>>>>>> done by then, has to wait; unlike prior betas, we will only accept
>>>> bug
>>>>>> fixes into 3.0 after branching.
>>>>>> 
>>>>>> One month after 3.0, we will ship 3.1 (with new features).  At the
>>>> same
>>>>>> time, we will branch 3.2.  New features in trunk will go into 3.3.
>>>> The
>>>>> 3.2
>>>>>> branch will only get bug fixes.  We will maintain backwards
>>>> compatibility
>>>>>> for all of 3.x; eventually (no less than a year) we will pick a
>>>> release
>>>>> to
>>>>>> be 4.0, and drop deprecated features and old backwards
>>>> compatibilities.
>>>>>> Otherwise there will be nothing special about the 4.0 designation.
>>>> (Note
>>>>>> that with an “odd releases have new features, even releases only have
>>>> bug
>>>>>> fixes” policy, 4.0 will actually be *more* stable than 3.11.)
>>>>>> 
>>>>>> Larger features can continue to be developed in separate branches,
>>>> the
>>>>> way
>>>>>> 8099 is being worked on today, and committed to trunk when ready.  So
>>>>> this
>>>>>> is not saying that we are limited only to features we can build in a
>>>>> single
>>>>>> month.
>>>>>> 
>>>>>> Some things will have to change with our dev process, for the better.
>>>> In
>>>>>> particular, with one month to commit new features, we don’t have room
>>>> for
>>>>>> committing sloppy work and stabilizing it later.  Trunk has to be
>>>> stable
>>>>> at
>>>>>> all times.  I asked Ariel Weisberg to put together his thoughts
>>>>> separately
>>>>>> on what worked for his team at VoltDB, and how we can apply that to
>>>>>> Cassandra -- see his email from Friday <http://bit.ly/1MHaOKX>.
>>>> (TLDR:
>>>>>> Redefine “done” to include automated tests.  Infrastructure to run
>>>> tests
>>>>>> against github branches before merging to trunk.  A new test harness
>>>> for
>>>>>> long-running regression tests.)
>>>>>> 
>>>>>> I’m optimistic that as we improve our process this way, our even
>>>> releases
>>>>>> will become increasingly stable.  If so, we can skip sub-minor
>>>> releases
>>>>>> (3.2.x) entirely, and focus on keeping the release train moving.  In
>>>> the
>>>>>> meantime, we will continue delivering 2.1.x stability releases.
>>>>>> 
>>>>>> This won’t be an entirely smooth transition.  In particular, you will
>>>>> have
>>>>>> noticed that 3.1 will get more than a month’s worth of new features
>>>> while
>>>>>> we stabilize 3.0 as the last of the old way of doing things, so some
>>>>>> patience is in order as we try this out.  By 3.4 and 3.6 later this
>>>> year
>>>>> we
>>>>>> should have a good idea if this is working, and we can make
>>>> adjustments
>>>>> as
>>>>>> warranted.
>>>>>> 
>>>>>> --
>>>>>> Jonathan Ellis
>>>>>> Project Chair, Apache Cassandra
>>>>>> co-founder, http://www.datastax.com
>>>>>> @spyced
>>>> 
>>> 
>> 

Reply via email to