agile, open source, distributed, and on-time inside the eclipse
Transcript of agile, open source, distributed, and on-time inside the eclipse
1
© 2005 IBM Corporation
agile, open source, distributed, and on-time
inside the eclipse development processErich GammaIBM Distinguished EngineerEclipse Project Management [email protected]
© 2005 IBM Corporation
what is eclipse (www.eclipse.org)?
an IDE and more…it’s a Java development environment (JDT)
it’s a general tools and integration platform
it’s a general application platform (RCP)
an open source communityan ecosystem to enable a total solution
including products by some major tool vendors
a foundation to advance the eclipse platform
2
© 2005 IBM Corporation
inside the eclipse development process
our process has evolved over timestay aware, adapt, change
our process has helped us to achieve:predictability
quality delivery on time
share what we have learnedinfluence “by example” – similar as the eclipse Java Development Tools
© 2005 IBM Corporation
what it isn’t…
shipping software is not about...having the right development environment
we know, we build IDEshaving the right methodology
software engineering involves all these...
...but we’ll bet on the people every time!
3
© 2005 IBM Corporation
“we ship software"
our objective is to ship softwareanything that contributes to this goal is good
anything that does not is bad
team member recognition is based on the ability to ship quality software
on time
the culture: "If you ship, then you may speak."the question: "Did they ever ship anything?"the insult: "They never ship anything!"
© 2005 IBM Corporation
eclipse practices
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
4
© 2005 IBM Corporation
project rhythm
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
© 2005 IBM Corporation
eclipse release cycles
1.0Nov 2001
2.0.1Sep 2002
2.0June 2002
2.0.3Mar 2003
2.0.2Nov 2002
2.1.1June 2003
2.1Mar 2003
2.1.2Oct 2003
2.1.3Feb 2004 3.0
June 2004
3.0.1Nov 2004
3.0.2Mar 2005 3.1
June 2005
5
© 2005 IBM Corporation
milestones first
break down release cycle into milestoneswe currently use 6 weeks
each milestone is a miniature development cycle
plan, execute, test, retrospectiveteams refer to the release plan when creating milestone plans
assign plan items to a milestonemilestone plans are public
result of a milestonemilestone builds: good enough to be used by the community
at the end of each milestone we do a retrospective
what went well, what did not?
milestones reduce stress!
before/after
t
quality
ready to ship
2.0 3.0
“hanging rope”
© 2005 IBM Corporation
continuous integration
fully automated build processbuild quality verified by automatic unit tests staged builds
nightly buildsdiscover integration problems between components
(weekly) integration buildsall automatic unit tests must be successfulgood enough for our own use
milestone buildsgood enough for the community to use
reality: build failures occurrebuild to create acceptable integration, milestone builds.
6
© 2005 IBM Corporation
always beta
each build is a release candidate; we expect it to workresults of the build process and the automatic tests
indicate where we are
as tool makers we use our own toolscomponent team – use the latest code daily
project team – use integration builds (weekly)
community – use milestone builds
continuously Consume Our Own Output
© 2005 IBM Corporation
it is a community thing
software development (Open Source even more) is a “community thing”an active community is the major asset of an OS project
OS project gives and takes:OS developer gives:
listen to feedback and reactdemonstrate continuous progress transparent development
OS developer takes:answer user questions so that developers do not have to do itreport defects and feature requestsvalidate technology by writing plug-inssubmit patches and enhancements
Give and take isn’t always balancedcommunity isn’t shy and is demanding
7
© 2005 IBM Corporation
community involvement
requires transparencycommunity needs to know what is going on to participate
requires open participationwe value the contributions of the community
we are the community
problem: no one knew what was in a milestone, so there was no incentive to move to milestone builds
so we received minimal feedbackmore stale defect reports
quality suffered
solution: publish new and noteworthyadvertise what we have been doing
© 2005 IBM Corporation
testing
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
8
© 2005 IBM Corporation
testing
innovate with confidencecontinuous incremental design
> 20,000 JUnit teststightly integrated into the build process
tests run after each build (nightly, integration, milestone)
integration builds are only green when all tests pass
test kindscorrectness tests
assert correct behaviorperformance tests
assert no performance regressionsbased on a database of
previous test run measurementsresource tests, leak tests
assert no resource consumption regressions
Defects Testing
Kent Beck – JUnit handbook
© 2005 IBM Corporation
test report
9
© 2005 IBM Corporation
performance testing
performance tests are an ongoing part of Eclipse 3.1keep closer tabs on performance changes during development
JUnit performance test
public class MyPerformanceTestCase extends PeformanceTestCase { public void testMyOperation() { startMeasuring(); for (int i= 0; i < 10; i++) {
toMeasure(); }stopMeasuring(); commitMeasurements(); assertPerformance();
} }
© 2005 IBM Corporation
performance test report
10
© 2005 IBM Corporation
before (M5) – after (M7)
© 2005 IBM Corporation
eclipse practices
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
11
© 2005 IBM Corporation
endgame
endgame endurancewe are only effective for so long
distribute quality/polish effort throughout the release
shared responsibility and commitmentwe all sign off
© 2005 IBM Corporation
where are in the middle of the 3.1 end game
Q1Q42005
M6
Q2Q3
M7 3.1M5M4M3M2M13.0 M6M5M4M3M2M1
ICSE2005
M7
12
© 2005 IBM Corporation
3.1 endgame
convergence process applied before releasesequence of test-fix passes
it is a community event!
© 2005 IBM Corporation
endgame convergence
with each pass the costs for fixing are increasedhigher burden to work on fix for a problem
higher burden to release a fix for a problem
focus on higher priority problems
# fixed bugs 608301
85 fix passtest pass
time
447
May 21 May 28 June 11 June 20 June 25
eclipse 3.0 Release
13
© 2005 IBM Corporation
signing-off
"An enthusiastic GO from PDE" - Cherie "The best build of the year!" - Dejan"An Eclipse build that the whole family can enjoy" - Wassim
Your PDE team.
© 2005 IBM Corporation
decompression
recover from release retrospective of the last cycle
learn from the last cycleachievementsfailures
“stay aware, adapt, change”
define retrospective actions
start to plan the next release and cycle
14
© 2005 IBM Corporation
where the time goes
release cycle 12-16 monthsmilestones - 9 months
endgame – 1-2 months
decompression – 1 month milestones
endgame
decompression
© 2005 IBM Corporation
planning
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
15
© 2005 IBM Corporation
early planning
release themes establish big picturecommunity input
requirements council new source of input
component teams define component plans
PMC collates initial project plan draft tradeoff: requirements vs. available resources
committed, proposed, deferred
plan initially spells outthemes
milestones
compatibility (contract, binary, source, workspace)
© 2005 IBM Corporation
the plan is alive
the project plan is updated quarterly to reflectprogress on items
new items
input from the community
becomes final at the end of the release
before: static plansaccurate at one point in time only
but no early feedback: non-existent until late in the cycle.
16
© 2005 IBM Corporation
ongoing risk assessment
address high risk items and items with many dependencies early
maintain schedule by dropping items (if necessary)we will drop proposed items
we hate to drop committed items
prefer fewer completed items than more items in progress
high risk items are sandboxed to reduce risk to other itemsprefer to serialize highest risk items (to minimize integration pain)
© 2005 IBM Corporation
collective ownership
PMC meets at least once a week
all component leads and the PMC meet for a weekly planning callstatusplanningidentification of cross-component issuesmeeting notes posted to the developer mailing lists
dynamic teams are established for solving cross-component issuesone cross-component issue per dynamic teammembers are key developers from all effected componentsfind, implement, and roll-out solution of the assigned cross component issuerepresented in the weekly planning calls
17
© 2005 IBM Corporation
built to last
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
© 2005 IBM Corporation
built to last
deliver on time, every timedecisions in this release impact what we can do next release
must preserve architectural integrity
deliver quality innovation with continuityneed to have a solid foundation
scalableperformantstable
18
© 2005 IBM Corporation
how buildings last
Site
• Stewart Brand: how buildings learn– what happens after they're built
• stuff: furniture • services: electrical, plumbing (7-15y)• structure: foundation, load bearing walls (30-300y)• site: geographical setting (forever)
• layers:
• evolve at different rates during the life of a building• shear against each other as they change at different rates• an adaptive building must allow slippage
a building that lasts is adaptive and can change over timelasts for generations without total rebuilding
© 2005 IBM Corporation
structure foundation
the eclipse plug-in architectureeverything is a plug-in
simple and consistent
19
everything is a plug-in• plug-in
– set of contributions– smallest unit of eclipse functionality– declares its pre-requisites
Plug-in
Plug-in
Plug-in
• extension point – named entity for collecting contributions
everything is a plug-In
Plug-in
Plug-in
Plug-in
20
• extension– a contribution
everything is a plug-in
Plug-in
Plug-in
Plug-in
• the platform run-time is making the connection
everything is a plug-in
Plug-in
Plug-in
Plug-in
21
© 2005 IBM Corporation
services plumbing: APIs
APIs matterdefine consistent, concise API
define API conventions (*.internal.* in eclipse)don’t expose the implementation
develop implementation and client at the same time
define APIs for stabilitybinary compatibility is highest priority
we would rather provide less API than desired (and augment) than provide the wrong (or unnecessary) API and need to support it indefinitely
© 2005 IBM Corporation
component centric
component centric developmenta team is responsible for one or more component
dependencies through APIsensures high velocity development inside a componenteclipse 3.1 provides tools support to check for API access violations
as you typedefine producer/consumer relationships among components
tension among components is healthy for coming up withgood component interfaces/APIs
22
© 2005 IBM Corporation
APIs first
APIs don’t just happen; we need to design them
specifications with precisely defined behaviorwhat you can assume (and what you cannot)
it works ≠ API compliant
documented classes ≠ API
“provisional API” = API that didn’t make it for a release
must have at least one client involved, preferably more
need an API advocatewe all care about having sustainable APIs
need someone who lives and breathes APIs
© 2005 IBM Corporation
practical extensibility
extensible in ways that are known useful needed by us, requested by others
we don't provide hypothetical generality - we want to be extensible in ways that matter
don't over generalize
23
© 2005 IBM Corporation
API tension
conflictAPIs need to be implemented and used to be right
requires iterationneeds external client
stable API necessaryfor widespread adoption
resolutiondon’t commit API before its time
APIs can (and should) change during the release to accommodate new requirements, experience
© 2005 IBM Corporation
example: API evolution in the Java Development Tools
new APIs AST (Abstract Syntax Tree)
AST rewritingcode manipulation
open-upcontribute to quick fix/quick assist
contribute to code assist
push-downmake JDT specific support available to other languages:
template processorslinked editing
24
© 2005 IBM Corporation
stuff, furniture - UI
eclipse extension architecture is contribution basedextensions contribute to the workbench
the workbench manages and presents the contributions
enables UI evolution3.0 new look
© 2005 IBM Corporation
keeping the house clean…
blur the boundary between the Platform and contributionsplug-ins should fit in (and together) naturallythis is a shared responsibility for all plug-in developers
housekeeping rulessharing rule: Add, don’t replace invitation Rule: Whenever possible, let others contribute to your contributionsfair Play Rule: All clients play by the same rules, even me.Relevance Rule: Contribute only when you can successfully operateIntegration Rule: Integrate and don’t separate
25
© 2005 IBM Corporation
summary
milestonesfirst
APIfirst
endgame
retrospectives
always havea client
built tolast
continuousintegration
community involvement
new & noteworthy
early incremental planning
continuous testing
consume yourown output
componentcentric
drive with open eyes
validate
reduce stress
learn
enable
attract to latest
transparency
validateupdate
dynamic teams
show progress
enable
explore
validate
© 2005 IBM Corporation
confessions
ripples - a change in a lower layer that propagates upwe often underestimate the impact on upper layers!
consequence: end game swirls and stressground rule:
you are not done unless the upper most layer has digested the rippledynamic teams – not all efforts are successful
require leadership, feeling of responsibility
require even more detailed planning
we drop features!but we hate to drop committed items
26
© 2005 IBM Corporation
summary agile practices followed
Testing early, often and automatedIncremental design
yes but API stability is important to us
Daily deploymentCustomer involvement
we have an active community
Continuous integrationnightly, weekly, milestone
Short development cycles6 weeks cycles
Incremental planningtime boxingrefined after each milestone
© 2005 IBM Corporation
conclusion
the team makes the process work
the team defines and evolves the process
agile Open Source processes workprocesses are applicable for closed source development
27
© 2005 IBM Corporation
So? (Your First Step)
don’t be afraid of Open Source productsjoin the Eclipse community (as one example…)
© 2005 IBM Corporation
So? (Your Next Steps)
increase your aggressivenessconsider "Community Source" development
use Open Source practices and tools for internal developmentmore transparent processesmore agile development
"OS can make a large organization act like a smaller one"more control to the developersinformation flows are nakedly visible
The OS development process is almost a literal translation of modern management principles.
28
© 2005 IBM Corporation
So? (After All)
consider Open Source development for your products split your product into
commodity (platform) layerdifferentiator (application) layers
keep the application layer small
become fully transparentdon’t hide your bugs and plans anymore
start to open source once you have something “interesting”
invest into building a community