Rails release improvements

Hi folks,

I want to talk about the release process. Specifically, I want to talk about
how we can improve our release process.

There are a couple things I want to see in our release process:

1) Regular, periodic releases.

I had been shooting for every four weeks for the 3.0.x series. I don't think
this means we have to be held to a particular deadline. I think that if people
know that approximately every N weeks, we'll have a release, it will help
reduce upgrade friction.

Mainly what this means to me is setting expectations with the community, and
sticking to what we say.

2) Distributed responsibility

I would like to improve our Bus Factor. Today, I am the only one doing
releases. That means we have a Bus Factor of one. If I get hit, who will take
responsibility?

In order to fix this, I think we need other core team members to do releases.
In fact, I think it should be a requirement *as a core team member* to do
releases.

We require that core team members are able to work on all aspects of Rails (AR,
AS, AP, etc). If we make this requirement for the code base, we need to make
this requirement of our process.

We all need to go through the pain of the rubber actually hitting the road.
We all need to make the tough decision to release, or to face our users and
tell them why it is late.

I propose that we each take turns releasing Rails, and we publish who will be
doing which release. I think it will improve our Bus Factor, frequency and
stability of our releases, and improve our team overall.

If we can agree on these items, I will put together documentation about how to
release Rails, along with a roster of who will be releasing what. I will even
personally work with each core team member until we're all comfortable with the
process.

The status quo cannot remain. I can't be around all the time to do releases,
as frankly, it's burning me out.


+1 all around, a suggestion:
Have a release rotation that cycles through the core team/contributor list,
so everyone is in charge perhaps only once every other month (or a few
weeks). Make sure the last guy to release hounds the next guy (so you, Aaron
would be first at bat to hound who's on deck) to make sure they have their
stuff together and know how to do it properly.
-Nick

Aaron,

1) I'm totally agree on that one. Let's stick with this four weeks release cycle
for RC cut, and 48 hours for regression report.

2) You've always done a great job for the Ruby on Rails community. From what
you said, I think it make a lot of sense to rotate the release responsibility to
every core team member. I mean, it should not be *your* responsibility to do
the hard work and release the gem every time. And you shouldn't be the only
one to take the blame if the release is broken.

It would be totally worth it if you can provide everybody the process of cutting a
release. In that case, everybody will have a reference on what to do, and will
be able to cut the release, in the perfect quality as you did, in the future.

Thank you for your contribution to Rails community. I think we're all appreciate
your contribution. <3 <3 <3

- Prem

Just wanted to say thank you Aaron for putting so much of your energy into the rails community.
As a developer I know how tiresome the job can be at times and a task as large as the rails
gem release should be delegated to more than one person. As a rails developer I can’t
thank you enough.

Dave

Likewise, Aaron, you have made incredible contributions to this whole process. Increasing the bus-factor and having more folks who are able to handle a release would indeed be great.

On the release timing front, I actually think something longer than four weeks should be the default goal. Artificially limiting to four weeks may make it difficult to get larger scale feature work completed. I also think that more frequent releases won't actually benefit the users and businesses who rely on Rails. Instead, it will only make it more complex to keep in step with changes in the frameworks while ensuring existing apps still run.

Along those lines, 48 hours for regressions is entirely too short. It doesn't do the project any good to aggressively declare GM on a release only to have to spin fast subsequent updates because a major issue was not identified fast enough. I wouldn't want to see any less than a week for regression reports.

-Jury

I do agree 48 hours might be a little short timespan for regressions.

I agree an excessively aggressive release schedule would, in the
end, likely prove detrimental to ROR. I also feel that 48 hours is
inadequate to install, test and report on a new release candidate on
anything other than a purely superficial level.

On the issue of "lead dog" I leave that to the core team to settle
among themselves. I deal with several projects that all take
different approaches to that problem and most seem to work well
enough that no one of them commends itself above all the rest.
Having said that, should my opinion matter then my preference would
be for a "team" release system wherein all the "bus" people reach
consensus among themselves of when to release a candidate and when
to do a general release and no one of them takes the "heat" for
delays and regressions.

I appreciate very much all of the work that everyone concerned, past
and present, has put into this project.

Hi folks,

I want to talk about the release process. Specifically, I want to talk about
how we can improve our release process.

There are a couple things I want to see in our release process:

1) Regular, periodic releases.

Deadlines help force the issue of what's in and out of a release, too. +1.

I'm wary of putting too much importance/significance in the fixed
schedule itself, rather than the desired outcome: reasonably frequent
stable releases that are easy to upgrade to. I doubt this'll become an
issue.

2) Distributed responsibility

Happy to step back in front of the bus on these. Releases are a pretty
tedious exercise.

Thanks Aaron!

> Hi folks,
>
> I want to talk about the release process. Specifically, I want to talk about
> how we can improve our release process.
>
> There are a couple things I want to see in our release process:
>
> 1) Regular, periodic releases.

Deadlines help force the issue of what's in and out of a release, too. +1.

I'm wary of putting too much importance/significance in the fixed
schedule itself, rather than the desired outcome: reasonably frequent
stable releases that are easy to upgrade to. I doubt this'll become an
issue.

Agreed. I really don't want hard deadlines so much as I want to set
expectations with users. Maybe we can say something like "approximately
once per month".

We have to strike a good balance. If we release too frequently, people
are annoyed, but upgrades should be easier. If we release too
infrequently, releases are harder and upgrades are harder.

I guess it's important to make the distinction between setting
expectations with the community vs timeline. I don't think it really
matters what the schedule is, as long as everyone knows.

> 2) Distributed responsibility

Happy to step back in front of the bus on these. Releases are a pretty
tedious exercise.

Yay! I'll do the next releases (all releases through 3.1.0 and 3.0.10)
and document the process along the way. We can start handing releases
around after that.