48
agile engineering practices Lionel Bisschoff – CEO Kaizania

agile engineering practices - WordPress.com · Craft. 2000. Engaged, Thinking People ‐ Lean. Craft. 1800. Interchangeable. People – Assembly Line. Craft. 1800. Interchangeable

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

agile engineering practices

Lionel Bisschoff – CEO Kaizania

Craft

2000Engaged,

Thinking People ‐Lean

Craft

1800Interchangeable

People –Assembly Line

Craft

1800Interchangeable

Parts

Craft

background

lean

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

1. Eliminate waste

1. Eliminate waste

1. Eliminate waste

1. Eliminate waste

1. Eliminate waste

1. Eliminate waste

1. Eliminate waste

7 lean principles

1. Eliminate Waste2. Build Quality In3. Defer commitment4. Deliver Fast5. Create Knowledge6. Respect People7. Optimize the Whole

Impact on Software Engineering?

what are we covering

• Code• Process• A story

What’s the state of your Workshop?

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

what are we covering

• Code• Process• A story

Greatest Challenges in Writing Software?

• Humans do it• Together• Then it changes• Iterative

Software must be

1. Easy to change2. Easy to understand

Easy to Understand

CODE FORMATTING

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

comments

• Failure to produce self‐documenting code• Clutter code

• Comments LIE• RTFC

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

easy to change

combining classes

Robert Martin – a bad design??

• Rigidity• Fragility• Immobility

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.

systems Build Quality InEliminate WasteCreate KnowledgeDefer Commitment

Deliver Fast

what are we covering

• Code• Process• A story

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

what are we covering

• Code• Process• A story

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

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..?