User:Mstone/Commentaries/Releases 3: Difference between revisions

From OLPC
Jump to navigation Jump to search
mNo edit summary
Line 47: Line 47:
plan believable insane ideal predict guess stall
plan believable insane ideal predict guess stall
critical-path root-cause time budget schedule complex
critical-path root-cause time budget schedule complex

= Good Ideas =


== Objectives ==
== Objectives ==
Line 57: Line 59:
* feasibility of proposed changes.
* feasibility of proposed changes.


Module maintainers, product management, and the release team will be responsible for building and maintaining this consensus based on communal, customer, and institutional feedback. All three groups will be responsible for acting to achieve its mandates, e.g. as advisers, maintainers, and managers.
Responsible parties like module maintainers, product management, and the release team will be responsible for building and maintaining this consensus based on communal, customer, and institutional feedback. All three groups will be responsible for acting to achieve its mandates, e.g. as advisers, maintainers, and managers.

=== Schedule ===

We have learned that certain minimum amounts of time must be allocated to integration and testing. The following example schedule records some of this knowledge:

# >60 days before target date '''Steam'''. Changes can be proposed at will and ''should'' be proposed as early as possible.
# 60-30 days before target date '''Water'''. Proposals must pass muster with the release team. Release contracts should be written and integration should occur. This is ''feature-level change control''.
# 30 days before target date '''Ice'''. We branch for release and the release team produces release candidates as needed under ''package-level change control''. Developers should be focused on fixing bugs.
# <15 days before target date '''Final Test'''. Get consensus from test, QA, and engineering communities, then finish the [[USR_Checklist|Release Process Checklist]].
# Release day. '''Announcement Day'''. Once Release checklist is complete, Kim sends announcement e-mail approving release for production.

== DEVELOPMENT ==

Development consists of creating potentially releasable changes during a ''Steam'' period (no change control) and a ''Water'' period (feature-level change control).

=== Steam ===
'''Occurs:''' ''MORE than 60 days before target date''

Prior to the transition to ''Water'' (feature-level change control), there is great freedom to propose changes because resources have not been allocated toward integrating and testing the proposed changes. We allocate these resources with [[#Release Contracts|release contracts]].

=== Water ===
'''Occurs:''' ''60-30 days before target date''

When ''Steam'' transitions to ''Water'', changes requiring reallocation of integration, test, or downstream resources (i.e. requiring a new release contract) will require approval by module maintainers and the release team before being accepted. Minor changes can still be added without approval until the transition to ''Ice''. Changes requiring great coordination to deliver like string changes and UI changes will be deferred if possible.

By the end of ''Water'', developers are expected to have created release contracts for each desired change. See [http://dev.laptop.org/report/18 previous examples].

== RELEASE ==

Release consists of integrating desirable changes created during development, then executing the [[Software ECO process]] to finalize the result.

=== Ice ===
'''Occurs:''' ''30-0 days before target date''


== Release Contracts ==
When ''Water'' transitions to ''Ice'', the release team will branch the development stream twice creating <tt>updates</tt> and <tt>testing</tt> build streams.


{{:Release contracts}}
* Both the <tt>updates</tt> and <tt>testing</tt> streams will be placed under package-level change control by the release team.
* The <tt>updates</tt> stream will be used to house packages being considered by the release team for insertion into the <tt>testing</tt> stream.
* Official QA will consider builds from the <tt>testing</tt> stream. When approved by official QA, these builds can become [[Software ECO process#CANDIDATE BUILD|release candidates]] as part of the underlying [[Software ECO process]] being executed by the release team.


== Schedule ==
During this time, developers are expected to contribute in any way they can to the construction of the release. Any other work, e.g. work done on personal time, can be performed on a separate development stream.


We have learned that certain minimum amounts of time must be allocated to integration and testing. We conceptualize this requirement by thinking of the release as passing through several necessary "phases", arranged like so:
== DEPLOYMENT ==


# >60 days before target date is '''Steam'''.
Upon completion of the [[Software ECO process]], a new reference operating system is made available. However, further work must be done to adapt this component to the needs of downstream partners.
#* Changes can be proposed at will and ''should'' be proposed as early as possible.
#* There is great freedom to propose changes because resources have only been loosely allocated toward integrating and testing the proposed changes.
#* The transition to ''Water'' occurs when all release contracts are signed.
# 60-30 days before target date is '''Water'''.
#* This is ''feature-level change control'' -- changes requiring reallocation of integration, test, or downstream resources (i.e. requiring a new release contract) will now be probably be deferred.
#* Minor changes can still be added without approval until the transition to ''Ice''. Changes requiring great coordination to deliver like string changes and UI changes will be deferred if possible.
# 30 days before target date is '''Ice'''.
#* ''Ice'' begins when we branch for release so that the release team can produce release candidate builds as needed under ''package-level change control''.
#* The effect of this change control is that fixes -- often for "blockers" or "polish" -- are more selectively merged.
#* You exist ''Ice'' by executing the [[Software ECO process]] and its accompanying [[USR_Checklist|Release Process Checklist]].
# Release day. '''Announcement Day'''. Once Release checklist is complete, you're done!

Revision as of 00:18, 14 June 2009


Pencil.png NOTE: The contents of this page are not set in stone, and are subject to change!

This page is a draft in active flux ...
Please leave suggestions on the talk page.

Pencil.png

We make changes to our software for many reasons; however, we make scheduled (major) releases in order to deliver significant changes to our downstream partners. Major releases may include interface-breaking changes. They are different from unscheduled (minor) releases in that they contain larger and more thoroughly planned changes.

Framework

Scheduled software releases obviously consist of work on four broad and overlapping topics:

  1. planning: Figuring out what to do.
  2. development: Generating changes which may help to meet the new goals.
  3. release: Integrating the changes in a controlled fashion.
  4. deployment: Helping downstream partners adapt to the new release.

However, this rough breakdown offers little concrete guidance on important issues like:

  • what can we reasonably expect to do?
  • how should we divvy up the work?
  • what may go wrong?
  • how do we tell if it's going well or poorly?
  • how can we do it more, better, faster, cheaper, more clearly, etc.?

To answer these questions, I have turned to other tools: control theory, concurrent systems theory, and a limited theory of my companions' psyches.

Control theory is applicable because the goal of a software release is to hit a moving target by making many small changes subject to regular feedback.
Concurrent systems theory is applicable because it provides great vocabulary for describing how the actual work gets done and for its analysis of failure.
Finally, people (psyches) must be considered because we're trying to combine the labor of a fairly specific group of rather quirky and miscommunication-prone individuals rather than of a network of identical processors running identical software.

Observations

Here's a word-picture of the problem of making a release drawn from the framework above:

       efficiency    deadlock    progress    trade    desires  involved
  starvation      feedback     objectives     strategy    resources     ship
consensus     authority     informed     stale     wasted   confused  supported
  competition     race      disagree      risk      affordable   rebuffed
     slip      cut      broken     hacked-up     tested   engaged    burned 
       know    evidence     signoff     stuck     waiting    queue     rest
     consent      responsible    accepted      consulted     contract  sick
 production    merge      freeze      slush      candidate    criteria   vacation
       frequency     magnitude     severity     priority     window   prototype
    blocker     polish     demotivated      process     approved    workflow
 quality     performance     usability    security    correctness    interoperability
   change       integrate       assure      document      release      rebase   use
        delegate       stovepipe      drop        announce      decide      team
   plan       believable     insane       ideal    predict    guess    stall   
      critical-path    root-cause     time     budget     schedule    complex

Good Ideas

Objectives

Write an Objectives page (e.g. 8.2.0) recording a consensus on:

  • target month.
  • development goals and priorities.
  • lead customers.
  • feasibility of proposed changes.

Responsible parties like module maintainers, product management, and the release team will be responsible for building and maintaining this consensus based on communal, customer, and institutional feedback. All three groups will be responsible for acting to achieve its mandates, e.g. as advisers, maintainers, and managers.

Release Contracts

A release contract is an agreement between the release team and one or more contributors to attempt to integrate some desirable change into a release build.

Release contracts normally describe:

  • the required quality of an acceptable change,
  • a test plan for judging the quality of a proposed change, and
  • who will execute the test plan.

(Typically, violation of a release contract will result in deferral of the proposed change.)

Examples are available. See our Trac conventions for help interpreting the display.

Schedule

We have learned that certain minimum amounts of time must be allocated to integration and testing. We conceptualize this requirement by thinking of the release as passing through several necessary "phases", arranged like so:

  1. >60 days before target date is Steam.
    • Changes can be proposed at will and should be proposed as early as possible.
    • There is great freedom to propose changes because resources have only been loosely allocated toward integrating and testing the proposed changes.
    • The transition to Water occurs when all release contracts are signed.
  2. 60-30 days before target date is Water.
    • This is feature-level change control -- changes requiring reallocation of integration, test, or downstream resources (i.e. requiring a new release contract) will now be probably be deferred.
    • Minor changes can still be added without approval until the transition to Ice. Changes requiring great coordination to deliver like string changes and UI changes will be deferred if possible.
  3. 30 days before target date is Ice.
    • Ice begins when we branch for release so that the release team can produce release candidate builds as needed under package-level change control.
    • The effect of this change control is that fixes -- often for "blockers" or "polish" -- are more selectively merged.
    • You exist Ice by executing the Software ECO process and its accompanying Release Process Checklist.
  4. Release day. Announcement Day. Once Release checklist is complete, you're done!