agile engineering practices - wordpress.com · craft. 2000. engaged, thinking people ‐ lean....
TRANSCRIPT
Craft
2000Engaged,
Thinking People ‐Lean
Craft
1800Interchangeable
People –Assembly Line
Craft
1800Interchangeable
Parts
Craft
background
7 lean principles
1. Eliminate Waste2. Build Quality In3. Defer commitment4. Deliver Fast5. Create Knowledge6. Respect People7. Optimize the Whole
7 lean principles
1. Eliminate Waste2. Build Quality In3. Defer commitment4. Deliver Fast5. Create Knowledge6. Respect People7. Optimize the Whole
7 lean principles
1. Eliminate Waste2. Build Quality In3. Defer commitment4. Deliver Fast5. Create Knowledge6. Respect People7. Optimize the Whole
Impact on Software Engineering?
the 5 S’s
• Sort what do we have?• Systematize what do we want?• Standardize get there• Shine smooth and sharpen • Sustain keep it there
Eliminate WasteBuild Quality In
Create KnowledgeDeliver Fast
Greatest Challenges in Writing Software?
• Humans do it• Together• Then it changes• Iterative
Software must be
1. Easy to change2. Easy to understand
what’s in a name
• Why does something exist?• What does it do?• How is it used?
int d; //elapsed timeint elapsedTime;int elapsedTimeInDays;
abstraction
• Hide complexity• Logic => well named functions• Functions :
• are not longer than 20 lines• never have > 3 arguments
• Use class instance variables
abstraction
• Now stuck with classes having• lotsa functions?• lotsa instance variables?
• Abstract again• create new classes• classes hide data and expose functionality• Classes have a
• single responsibility• single reason to change
• Test?• most instance variable touched in mostmethods
doing this in practice?
Add a Test
Run tests see new Failure
Write some code
Refactor
The TDD way
Run tests see all pass
Build Quality InEliminate WasteCreate KnowledgeDefer Commitment
Deliver Fast
combining classes
Kent Beck – a simple design (i.e. Good........)
1. Runs all the tests2. Contains no duplication3. Expresses the intent of the programmer4. Minimizes the number of classes and methods
combining classes
Design principles
• Single Responsibility• Interfaces• Abstractions• Quilt coding
• separation of concerns• dependency injection etc.
multiple people writing code
DB
System/s
Dev..Integration
Source control
CI Server ‐ Autonomation(Version, Merge, Dependency, Build, Unit/Smoke test, Deploy)
QA
DB
System/s
Stage.....Live
DB
System/s
Hourly / Daily Daily Often as Possible
multiple people writing code
Trunk
Team A
Team B
Sprint
Day 1 Day 2 Day 3 Day 4 Day 5 Day 6
Policy: Releasable
Policy: Unit tested
Policy: Unit tested
Each branch has owner and policy
Trunk = “Done” branch.No junk on the trunk!!
Merge from trunk to work ‐ “catch up” every day
Publish to trunk whenever story isDone
Resolve conflicts on work branch immediately when discovered
Release!!
Firm
Soft
Build Quality InEliminate WasteCreate KnowledgeDefer Commitment
Deliver FastOptimise the wholeRespect People
Sportsbetting
• 24/7• 14 languages• Busy days
• 6 bets/second• 2 000 page views/minute• 10 000+ simultaneous users
Sportsbetting
DB
Servlets (logic/db)JSTL/JCTL (data)
JSP (html)
browsers
30 traders100 call centre agents
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/StringsJMS
PriceCache PriceCache
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
JMS
PriceCache PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/Strings
DataFeeds
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
JMS
PriceCache PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/Strings
DataFeeds
osCacheosCache
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
JMS
PriceCache PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/Strings
DataFeeds
osCacheosCache
RiskCache
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
JMS
PriceCache PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/Strings
DataFeeds
osCacheosCache
RiskCache
Sportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
JMS
PriceCache PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/Strings
DataFeeds
osCacheosCache
RiskCache
ResultEnginesResultEnginesResultEngines
Sportsbetting
DB
Servlets (logic/db)JSTL/JCTL (data)
JSP (html)
browsers
30 traders100 call centre agents
ResultEnginesSportsbetting
DB
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
browsers
30 traders100 call centre agents
Servlets(logic/db)
JSTL/JCTL (data)JSP (html)
PriceCache
JMS
PriceCache PriceCache
SportsLeaguesEventsMarketsPricesText/Tokens/Strings
DataFeeds
osCacheosCache
RiskCache
ResultEnginesResultEngines
Lean means......
BDUF not needed
1. Eliminate Waste2. Build Quality In3. Defer commitment4. Deliver Fast5. Create Knowledge6. Respect People7. Optimize the Whole
BDUF BAD..?