On Thu, Jan 13, 2011 at 4:04 PM, Jonathan Ellis <jbel...@gmail.com> wrote: > On Thu, Jan 13, 2011 at 2:32 PM, Ryan King <r...@twitter.com> wrote: >> # Fixed schedule >> >> We should set a fixed schedule and stick to it. Anything features not >> ready at branch time won't make it and will be disabled in the stable >> branch. > > I like this idea, as long as we're willing to be flexible when > warranted. Sometimes it is less work to finish a feature, than to rip > it out.
Two things: First, I think a key part of how you make this successful (both for Chome and for continuously deployed software like large services) is that non-trivial changes almost always have to be hidden behind flags until they're ready for wide use. Second, I think this will only work well if we are somewhat strict about it. >> # Trunk-first >> >> Everyone on chrome commits to trunk first. > > I suppose that's fine if it works for them, but it's not The One True > Way. Changes that affect both stable and trunk branches should really > be applied to stable first and merged forward. Here is a good > presentation explaining why: > http://video.google.com/videoplay?docid=-577744660535947210. > > Another reason is that committing fixes to a stable branch and then > using "svn merge branch" from trunk means svn tracks everything that > has been committed to branch and not yet to trunk, and merges it in. > So it protects us somewhat against people committing a fix to trunk, > then forgetting to commit to the stable branch. I guess I don't care as much about the mechanics of this as the intent– which is to keep stable and trunk closer together. And to keep people working on a more common base. >> I think the important >> change we could make is to keep everyone closer to trunk. We spend a >> good deal of effort back-porting patches between major versions. I >> think we should make the major versions less different. This would >> mean letting them live for shorter amounts of time and possibly making >> them bugfix only. > > In theory I agree (see: policy for 0.4 and 0.5 stable releases). In > practice, users overwhelmingly wanted more than that in between major > releases. Not that users are always right, but this is an area where > I think they are worth listening to. :) Perhaps minor things are worth adding in a stable branch. I think this is an area where judgement can come into play. >> I think if we made the major release schedule more predictable >> people would be more comfortable with letting their new feature wait >> until the next major version. > > In my experience it's not the unpredictability as much as "I'm feeling > this pain Right Now and four months is too long to wait." Perhaps waiting is the biggest pain for users, but for developers unpredictability is just as big a problem. If I don't know when release N+1 is going to happen I might try to hurry to get my feature into release N. If I have confidence that release N+1 will come promptly at a scheduled time I can set my expectation appropriately. >> We should be more liberal about committing things to trunk early and >> iterating on them there (rather than iterating on them in patches). > > I agree in the sense that we were too slow to branch 0.7 to have an > open trunk to start work on. > > But I disagree in the sense that we shouldn't be committing > works-in-progress to trunk because that becomes the baseline everyone > else has to develop from. (I know at least one team with a nontrivial > patchset against trunk from the 0.7 beta1 timeframe, back when it had > the Clock struct that we committed prematurely.) So we made a mistake once. :) I think committing large changes in smaller pieces will be a net positive, even if it occasionally trips us up. For example, I think work on counters between our team and Sylvain has improved dramatically once we committed 1072. > IMO the right fix is to help the ASF make git an option; in the > meantime the best workaround is a git-based workflow with > git-jira-attacher and git-am as described in > http://spyced.blogspot.com/2009/06/patch-oriented-development-made-sane.html > and http://wiki.apache.org/cassandra/GitAndJIRA. So you're proposing that we use git to keep long-running feature branches? >> # Automate all tests >> >> I think the only way that we can keep people close to trunk and stay >> stable is to build automated tests for *everything*. All code should >> be exercised by thorough unit tests and distributed black-box tests. >> Every regression should get a test. > > Agreed. > >> Chrome has a 6 week cycle. I think ours would be more like 4 months >> for major releases. > > Four months feels about right to me, too, although for 0.7 + 1 I'd > like to make it a bit shorter (beginning of April?) since we have > several features (1072 being the most prominent) that just barely > missed 0.7. Like I said, we're going to have to figure out the right pace, but we should try and stick to it. >> Whatever we do, I think the schedule needs to be more predictable, >> which means that the contents of each release will be less predictable >> (since its "whatever's ready at the appointed time"). Like the Chrome >> presentation mentioned the idea isn't raw speed, but predictable >> release schedules. > > I agree. At the least, I think it's worth trying. Good. -ryan