SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
Elephant Carpaccio*
Lars Thorup
ZeaLake Software Consulting


August, 2011



* thanks to Alistair Cockburn
Who is Lars Thorup?

●   Software developer/architect
    ●   C++, C# and JavaScript
    ●   Test Driven Development

●   Coach: Teaching agile and
    automated testing

●   Advisor: Assesses software
    projects and companies

●   Founder and CEO of
    BestBrains and ZeaLake
How do you build an elephant?
●   One slice at a time




●   To be agile is to be able to build complex software from
    very thin slices of functionality

●   How do we do that?
Big slices are hard to fit into the schedule


        Start                     Release date




                     Time
Smaller slices are easier to fit in


        Start                         Release date




                      Time
Agile: the value of short feedback loops
●   Provide value faster
    ●   release to client monthly or quarterly
    ●   release to test weekly
    ●   integrate daily

●   Get feedback faster
    ●   from testers and users
    ●   cheaper to fix bugs and adjust functionality

●   Adjust faster
    ●   adapt to changed conditions
    ●   change priorities
    ●   track progress early
Thin slices
●   How do we break down new functionality (an epic) into a lot
    of small slices (stories)?

●   How do we break down a story into a lot of small tasks?



●   In the following
    ●   an example based on domain of cable service (broadband internet)
    ●   then some general observations and suggestions
Breaking an epic into small stories
●   "As a cable provider I would like to have commands and
    monitors so I can connect or disconnect cable service
    to this customer"

●   How do we break this epic into smaller stories?
    ●   Each story must have value for a user
    ●   Different users might use these capabilities (Vendor operators,
        Cable Provider automation, Cable Provider operators)
    ●   Commands and monitoring provide value individually
    ●   Connect and disconnect provide value individually
    ●   Further usability improvements is spawned off to its own story
    ●   Include test and documentation in each story
    ●   We will not treat each individual command as an individual story
Different stories for different users
Cable Provider
                   UI
    User


                  Web       Cable Provider
                 Services      Scripts



                             Generic
                 Middle                      Network     Cable
                             Modem
                  Tier                       Interface   Modem
                            Interface


                                               CLI



                   DB                        Vendor
                                             operator
Final set of stories for the epic
●   Connect              ●   Monitoring
    ●   CLI                  ●   CLI
    ●   Web Services         ●   Web Services
    ●   UI                   ●   UI

●   Disconnect           ●   Usability Improvements
    ●   CLI
    ●   Web Services
    ●   UI
Breaking a story into small tasks
●   "As a Cable Provider Script, I want to read the modem
    status flags so that I can obtain the state of a particular
    modem in the field"

●   How do we break this story into tasks?
    ●   Implementing support in each layer becomes a task
    ●   Consider spawning off exceptional cases, optimizations, larger
        refactorings as individual tasks
    ●   Add a spike task if using new technology (tools, APIs, ...)
    ●   Story documentation and story acceptance tests becomes individual
        tasks
    ●   Include unit tests and direct refactorings as part of each task
Layers involved in this story
Cable Provider
                   UI
    User


                  Web       Cable Provider
                 Services      Scripts



                             Generic
                 Middle                      Network     Cable
                             Modem
                  Tier                       Interface   Modem
                            Interface


                                               CLI



                   DB                        Vendor
                                             operator
Final set of tasks for the story
●   Acceptance tests for the story

●   Development (design + code + unit test)
    ●   GenericModemInterface::GetStatus (supported by modem)
    ●   Database script for new flags
    ●   MiddleTier::GetStatus
    ●   Spike: best practice for flag support in WSDL
    ●   Refactor WSDL: explicit support for flags elsewhere
    ●   WebService::GetStatus
    ●   WSDL::GetStatus
    ●   GenericModemInterface::GetStatus (unsupported by modem)

●   User documentation update for the story
Stories - how small?
●   Divide story S into S1 and S2

●   ...if both S1 and S2 has individual value for some user
    ●   no matter how small the value
    ●   (larger than 0)

●   ...if releasing S1 or S2 to test or production provides
    valuable feedback for the team

●   Rule of thumb: several stories per developer per week
Tasks - how small?
●   Divide task T into T1 and T2

●   ...if both T1 and T2 contribute to the story, and have
    individual cost to implement
    ●   no matter how small the cost
    ●   (larger than 0)

●   ...if implementing T1 and T2 seperately does not increase
    the cost more than 5-10%

●   ...if comitting T1 or T2 provides valuable feedback for the
    team

●   Rule of thumb: several tasks per developer per day
But: How do I break down epics/stories?
●   Breaking down an epic
    ●   Find all the possible types of users
    ●   List all the different variations that each user might get value from an
        epic
    ●   Ask yourself: As a user, what would I want to have if I could only
        spend half the current estimate?

●   Breaking down a story
    ●   List all the places in the code that needs to be changed
    ●   Each code change that can be individually unit tested becomes a
        task
    ●   Bundle code changes that are so similar that splitting them into
        different tasks have too large overhead
But: What if the slices are still too big?
●   A task with lots of repetitive work taking several days
    ●   Is the design really optimal?
    ●   Maybe it's about time for a major refactoring

●   A story with lots of similar tasks taking several weeks
    ●   Same thing: consider refactoring your design to make it cheaper to
        implement this kind of functionality

●   A task with technological challenges and weak estimates
    ●   Do experiments and spikes in separate tasks

●   A task to implement a major refactoring taking several days
    ●   Read the Refactoring book by Martin Fowler et al.
    ●   Split the refactoring into individual core refactoring tasks
    ●   This will also minimize the risk!
But: When do I stop the breakdown?
●   Stories can be arbitrarily         ●   Don't make tasks too small
    small, e.g. bug fixes                  ●   A task of a few hours need not
    ●   The overhead is always worth           be broken down further
        it because the freedom to          ●   Don't make every new
        prioritize prevents a lot of           database field a separate task
        waste                              ●   Bundle related database fields
                                               in a single task
                                           ●   Very small tasks do not
                                               improve the value of progress
                                               tracking
                                           ●   You can always commit your
                                               work several times during a
                                               single task if you like to work
                                               in very small steps
But: What about bugs?
●   A bug found before release becomes a new task
    ●   Remember to add a failing unit test before fixing the bug

●   A bug found after release becomes a new story
    ●   Remember to add a failing acceptance test or unit test
    ●   Try to come up with a process improvement that would have
        prevented this bug
But: <your question here>

Weitere ähnliche Inhalte

Was ist angesagt?

User Story Mapping in Practice
User Story Mapping in PracticeUser Story Mapping in Practice
User Story Mapping in PracticeSteve Rogalsky
 
User Story Maps: Secrets for Better Backlogs and Planning
 User Story Maps: Secrets for Better Backlogs and Planning User Story Maps: Secrets for Better Backlogs and Planning
User Story Maps: Secrets for Better Backlogs and PlanningAaron Sanders
 
How to Break the Requirements into User Stories
How to Break the Requirements into User StoriesHow to Break the Requirements into User Stories
How to Break the Requirements into User StoriesShriKant Vashishtha
 
Writing Effective User Stories
Writing Effective User StoriesWriting Effective User Stories
Writing Effective User StoriesJaneve George
 
User Story Mapping (2008)
User Story Mapping (2008)User Story Mapping (2008)
User Story Mapping (2008)Jeff Patton
 
Beyond INVEST - How to use story slicing to improve team and organisational a...
Beyond INVEST - How to use story slicing to improve team and organisational a...Beyond INVEST - How to use story slicing to improve team and organisational a...
Beyond INVEST - How to use story slicing to improve team and organisational a...Killick Agile Consulting Services
 
Product Backlog Refinement with Structured Conversations
Product Backlog Refinement with Structured Conversations  Product Backlog Refinement with Structured Conversations
Product Backlog Refinement with Structured Conversations EBG Consulting, Inc.
 
Guide to User Story Creation
Guide to User Story CreationGuide to User Story Creation
Guide to User Story CreationJoshua Render
 
Writing Good User Stories (Hint: It's not about writing)
Writing Good User Stories (Hint: It's not about writing)Writing Good User Stories (Hint: It's not about writing)
Writing Good User Stories (Hint: It's not about writing)one80
 
Mke agile 032014 Slicing the cake: User Story Decomposition
Mke agile 032014   Slicing the cake: User Story DecompositionMke agile 032014   Slicing the cake: User Story Decomposition
Mke agile 032014 Slicing the cake: User Story DecompositionDave Neuman
 
Vertical Story Slicing Takes the Cake!
Vertical Story Slicing Takes the Cake!Vertical Story Slicing Takes the Cake!
Vertical Story Slicing Takes the Cake!kporemski
 
Story writing and mapping.pdf
Story writing and mapping.pdfStory writing and mapping.pdf
Story writing and mapping.pdfDevJam
 
21 Story Splitting Patterns
21 Story Splitting Patterns21 Story Splitting Patterns
21 Story Splitting PatternsKent McDonald
 
User Story Mapping Workshop (Design Skills 2016)
User Story Mapping Workshop (Design Skills 2016)User Story Mapping Workshop (Design Skills 2016)
User Story Mapping Workshop (Design Skills 2016)Bartosz Mozyrko
 
Agile Development
Agile DevelopmentAgile Development
Agile Developmentabdpse
 

Was ist angesagt? (20)

User Story Mapping in Practice
User Story Mapping in PracticeUser Story Mapping in Practice
User Story Mapping in Practice
 
User Story Maps: Secrets for Better Backlogs and Planning
 User Story Maps: Secrets for Better Backlogs and Planning User Story Maps: Secrets for Better Backlogs and Planning
User Story Maps: Secrets for Better Backlogs and Planning
 
User Story Mapping
User Story MappingUser Story Mapping
User Story Mapping
 
How to Break the Requirements into User Stories
How to Break the Requirements into User StoriesHow to Break the Requirements into User Stories
How to Break the Requirements into User Stories
 
Writing Effective User Stories
Writing Effective User StoriesWriting Effective User Stories
Writing Effective User Stories
 
User Story Mapping (2008)
User Story Mapping (2008)User Story Mapping (2008)
User Story Mapping (2008)
 
Beyond INVEST - How to use story slicing to improve team and organisational a...
Beyond INVEST - How to use story slicing to improve team and organisational a...Beyond INVEST - How to use story slicing to improve team and organisational a...
Beyond INVEST - How to use story slicing to improve team and organisational a...
 
Product Backlog Refinement with Structured Conversations
Product Backlog Refinement with Structured Conversations  Product Backlog Refinement with Structured Conversations
Product Backlog Refinement with Structured Conversations
 
Guide to User Story Creation
Guide to User Story CreationGuide to User Story Creation
Guide to User Story Creation
 
Writing Good User Stories (Hint: It's not about writing)
Writing Good User Stories (Hint: It's not about writing)Writing Good User Stories (Hint: It's not about writing)
Writing Good User Stories (Hint: It's not about writing)
 
User Stories explained
User Stories explainedUser Stories explained
User Stories explained
 
Mke agile 032014 Slicing the cake: User Story Decomposition
Mke agile 032014   Slicing the cake: User Story DecompositionMke agile 032014   Slicing the cake: User Story Decomposition
Mke agile 032014 Slicing the cake: User Story Decomposition
 
User Stories Fundamentals
User Stories FundamentalsUser Stories Fundamentals
User Stories Fundamentals
 
Vertical Story Slicing Takes the Cake!
Vertical Story Slicing Takes the Cake!Vertical Story Slicing Takes the Cake!
Vertical Story Slicing Takes the Cake!
 
User Stories Training
User Stories TrainingUser Stories Training
User Stories Training
 
Story writing and mapping.pdf
Story writing and mapping.pdfStory writing and mapping.pdf
Story writing and mapping.pdf
 
Scrum Process
Scrum ProcessScrum Process
Scrum Process
 
21 Story Splitting Patterns
21 Story Splitting Patterns21 Story Splitting Patterns
21 Story Splitting Patterns
 
User Story Mapping Workshop (Design Skills 2016)
User Story Mapping Workshop (Design Skills 2016)User Story Mapping Workshop (Design Skills 2016)
User Story Mapping Workshop (Design Skills 2016)
 
Agile Development
Agile DevelopmentAgile Development
Agile Development
 

Andere mochten auch

Pirateship - growing a great crew: workshop facilitation guide
Pirateship - growing a great crew: workshop facilitation guidePirateship - growing a great crew: workshop facilitation guide
Pirateship - growing a great crew: workshop facilitation guidePeter Antman
 
Growing up with agile - how the Spotify 'model' has evolved
Growing up with agile - how the Spotify 'model' has evolved Growing up with agile - how the Spotify 'model' has evolved
Growing up with agile - how the Spotify 'model' has evolved Peter Antman
 
Introduction to Object Oriented Programming
Introduction to Object Oriented ProgrammingIntroduction to Object Oriented Programming
Introduction to Object Oriented ProgrammingMoutaz Haddara
 
Full stackagile - Squads Chapters Tribes and Guilds
Full stackagile - Squads Chapters Tribes and GuildsFull stackagile - Squads Chapters Tribes and Guilds
Full stackagile - Squads Chapters Tribes and GuildsAshley-Christian Hardy
 

Andere mochten auch (6)

Pirateship - growing a great crew: workshop facilitation guide
Pirateship - growing a great crew: workshop facilitation guidePirateship - growing a great crew: workshop facilitation guide
Pirateship - growing a great crew: workshop facilitation guide
 
Growing up with agile - how the Spotify 'model' has evolved
Growing up with agile - how the Spotify 'model' has evolved Growing up with agile - how the Spotify 'model' has evolved
Growing up with agile - how the Spotify 'model' has evolved
 
Effective story slicing
Effective story slicingEffective story slicing
Effective story slicing
 
Agile at Spotify
Agile at SpotifyAgile at Spotify
Agile at Spotify
 
Introduction to Object Oriented Programming
Introduction to Object Oriented ProgrammingIntroduction to Object Oriented Programming
Introduction to Object Oriented Programming
 
Full stackagile - Squads Chapters Tribes and Guilds
Full stackagile - Squads Chapters Tribes and GuildsFull stackagile - Squads Chapters Tribes and Guilds
Full stackagile - Squads Chapters Tribes and Guilds
 

Ähnlich wie Elephant Carpaccio

Performance Test Automation With Gatling
Performance Test Automation  With GatlingPerformance Test Automation  With Gatling
Performance Test Automation With GatlingKnoldus Inc.
 
“Startup - it’s not just an IT project” - a random sampling of problems we’ve...
“Startup - it’s not just an IT project” - a random sampling of problems we’ve...“Startup - it’s not just an IT project” - a random sampling of problems we’ve...
“Startup - it’s not just an IT project” - a random sampling of problems we’ve...MobileMonday Estonia
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code cleanBrett Child
 
Kubernetes and CoreOS @ Athens Docker meetup
Kubernetes and CoreOS @ Athens Docker meetupKubernetes and CoreOS @ Athens Docker meetup
Kubernetes and CoreOS @ Athens Docker meetupMist.io
 
Gatling - Bordeaux JUG
Gatling - Bordeaux JUGGatling - Bordeaux JUG
Gatling - Bordeaux JUGslandelle
 
Cloud-Native Progressive Delivery
Cloud-Native Progressive DeliveryCloud-Native Progressive Delivery
Cloud-Native Progressive DeliveryMatt Turner
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kuberneteskloia
 
Continuous Delivery at Snyk
Continuous Delivery at SnykContinuous Delivery at Snyk
Continuous Delivery at SnykAnton Drukh
 
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18Manuel Rivero
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaSteven Wu
 
Effects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAsEffects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAsManuel Rivero
 
Designing and coding for cloud-native applications using Python, Harjinder Mi...
Designing and coding for cloud-native applications using Python, Harjinder Mi...Designing and coding for cloud-native applications using Python, Harjinder Mi...
Designing and coding for cloud-native applications using Python, Harjinder Mi...Pôle Systematic Paris-Region
 
The journey to Native Cloud Architecture & Microservices, tracing the footste...
The journey to Native Cloud Architecture & Microservices, tracing the footste...The journey to Native Cloud Architecture & Microservices, tracing the footste...
The journey to Native Cloud Architecture & Microservices, tracing the footste...Mek Srunyu Stittri
 
Successful DevOps implementation for small teams a true story
Successful DevOps implementation for small teams  a true storySuccessful DevOps implementation for small teams  a true story
Successful DevOps implementation for small teams a true storyJakub Paweł Głazik
 
AirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadAirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadKarthik Murugesan
 
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa... Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...Databricks
 
Lagom : Reactive microservice framework
Lagom : Reactive microservice frameworkLagom : Reactive microservice framework
Lagom : Reactive microservice frameworkFabrice Sznajderman
 

Ähnlich wie Elephant Carpaccio (20)

Gatling
Gatling Gatling
Gatling
 
Performance Test Automation With Gatling
Performance Test Automation  With GatlingPerformance Test Automation  With Gatling
Performance Test Automation With Gatling
 
“Startup - it’s not just an IT project” - a random sampling of problems we’ve...
“Startup - it’s not just an IT project” - a random sampling of problems we’ve...“Startup - it’s not just an IT project” - a random sampling of problems we’ve...
“Startup - it’s not just an IT project” - a random sampling of problems we’ve...
 
DDD with Behat
DDD with BehatDDD with Behat
DDD with Behat
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code clean
 
Kubernetes and CoreOS @ Athens Docker meetup
Kubernetes and CoreOS @ Athens Docker meetupKubernetes and CoreOS @ Athens Docker meetup
Kubernetes and CoreOS @ Athens Docker meetup
 
Gatling - Bordeaux JUG
Gatling - Bordeaux JUGGatling - Bordeaux JUG
Gatling - Bordeaux JUG
 
Cloud-Native Progressive Delivery
Cloud-Native Progressive DeliveryCloud-Native Progressive Delivery
Cloud-Native Progressive Delivery
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kubernetes
 
Continuous Delivery at Snyk
Continuous Delivery at SnykContinuous Delivery at Snyk
Continuous Delivery at Snyk
 
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 
Effects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAsEffects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAs
 
Designing and coding for cloud-native applications using Python, Harjinder Mi...
Designing and coding for cloud-native applications using Python, Harjinder Mi...Designing and coding for cloud-native applications using Python, Harjinder Mi...
Designing and coding for cloud-native applications using Python, Harjinder Mi...
 
The journey to Native Cloud Architecture & Microservices, tracing the footste...
The journey to Native Cloud Architecture & Microservices, tracing the footste...The journey to Native Cloud Architecture & Microservices, tracing the footste...
The journey to Native Cloud Architecture & Microservices, tracing the footste...
 
Successful DevOps implementation for small teams a true story
Successful DevOps implementation for small teams  a true storySuccessful DevOps implementation for small teams  a true story
Successful DevOps implementation for small teams a true story
 
AirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadAirBNB's ML platform - BigHead
AirBNB's ML platform - BigHead
 
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa... Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 
Lagom : Reactive microservice framework
Lagom : Reactive microservice frameworkLagom : Reactive microservice framework
Lagom : Reactive microservice framework
 

Mehr von Lars Thorup

100 tests per second - 40 releases per week
100 tests per second - 40 releases per week100 tests per second - 40 releases per week
100 tests per second - 40 releases per weekLars Thorup
 
SQL or NoSQL - how to choose
SQL or NoSQL - how to chooseSQL or NoSQL - how to choose
SQL or NoSQL - how to chooseLars Thorup
 
Super fast end-to-end-tests
Super fast end-to-end-testsSuper fast end-to-end-tests
Super fast end-to-end-testsLars Thorup
 
Extreme Programming - to the next-level
Extreme Programming - to the next-levelExtreme Programming - to the next-level
Extreme Programming - to the next-levelLars Thorup
 
Advanced Javascript Unit Testing
Advanced Javascript Unit TestingAdvanced Javascript Unit Testing
Advanced Javascript Unit TestingLars Thorup
 
Unit testing legacy code
Unit testing legacy codeUnit testing legacy code
Unit testing legacy codeLars Thorup
 
Advanced QUnit - Front-End JavaScript Unit Testing
Advanced QUnit - Front-End JavaScript Unit TestingAdvanced QUnit - Front-End JavaScript Unit Testing
Advanced QUnit - Front-End JavaScript Unit TestingLars Thorup
 
Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"Lars Thorup
 
Database Schema Evolution
Database Schema EvolutionDatabase Schema Evolution
Database Schema EvolutionLars Thorup
 
Advanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingAdvanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingLars Thorup
 
Javascript unit testing with QUnit and Sinon
Javascript unit testing with QUnit and SinonJavascript unit testing with QUnit and Sinon
Javascript unit testing with QUnit and SinonLars Thorup
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptLars Thorup
 
Automated Performance Testing
Automated Performance TestingAutomated Performance Testing
Automated Performance TestingLars Thorup
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
 
High Performance Software Engineering Teams
High Performance Software Engineering TeamsHigh Performance Software Engineering Teams
High Performance Software Engineering TeamsLars Thorup
 
Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Lars Thorup
 
Unit Testing in JavaScript with MVC and QUnit
Unit Testing in JavaScript with MVC and QUnitUnit Testing in JavaScript with MVC and QUnit
Unit Testing in JavaScript with MVC and QUnitLars Thorup
 
Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated TestingLars Thorup
 

Mehr von Lars Thorup (19)

100 tests per second - 40 releases per week
100 tests per second - 40 releases per week100 tests per second - 40 releases per week
100 tests per second - 40 releases per week
 
SQL or NoSQL - how to choose
SQL or NoSQL - how to chooseSQL or NoSQL - how to choose
SQL or NoSQL - how to choose
 
Super fast end-to-end-tests
Super fast end-to-end-testsSuper fast end-to-end-tests
Super fast end-to-end-tests
 
Extreme Programming - to the next-level
Extreme Programming - to the next-levelExtreme Programming - to the next-level
Extreme Programming - to the next-level
 
Advanced Javascript Unit Testing
Advanced Javascript Unit TestingAdvanced Javascript Unit Testing
Advanced Javascript Unit Testing
 
Unit testing legacy code
Unit testing legacy codeUnit testing legacy code
Unit testing legacy code
 
Advanced QUnit - Front-End JavaScript Unit Testing
Advanced QUnit - Front-End JavaScript Unit TestingAdvanced QUnit - Front-End JavaScript Unit Testing
Advanced QUnit - Front-End JavaScript Unit Testing
 
Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"
 
Database Schema Evolution
Database Schema EvolutionDatabase Schema Evolution
Database Schema Evolution
 
Advanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingAdvanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit Testing
 
Javascript unit testing with QUnit and Sinon
Javascript unit testing with QUnit and SinonJavascript unit testing with QUnit and Sinon
Javascript unit testing with QUnit and Sinon
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScript
 
Automated Performance Testing
Automated Performance TestingAutomated Performance Testing
Automated Performance Testing
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
 
Agile Contracts
Agile ContractsAgile Contracts
Agile Contracts
 
High Performance Software Engineering Teams
High Performance Software Engineering TeamsHigh Performance Software Engineering Teams
High Performance Software Engineering Teams
 
Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++
 
Unit Testing in JavaScript with MVC and QUnit
Unit Testing in JavaScript with MVC and QUnitUnit Testing in JavaScript with MVC and QUnit
Unit Testing in JavaScript with MVC and QUnit
 
Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated Testing
 

Kürzlich hochgeladen

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Elephant Carpaccio

  • 1. Elephant Carpaccio* Lars Thorup ZeaLake Software Consulting August, 2011 * thanks to Alistair Cockburn
  • 2. Who is Lars Thorup? ● Software developer/architect ● C++, C# and JavaScript ● Test Driven Development ● Coach: Teaching agile and automated testing ● Advisor: Assesses software projects and companies ● Founder and CEO of BestBrains and ZeaLake
  • 3. How do you build an elephant? ● One slice at a time ● To be agile is to be able to build complex software from very thin slices of functionality ● How do we do that?
  • 4. Big slices are hard to fit into the schedule Start Release date Time
  • 5. Smaller slices are easier to fit in Start Release date Time
  • 6. Agile: the value of short feedback loops ● Provide value faster ● release to client monthly or quarterly ● release to test weekly ● integrate daily ● Get feedback faster ● from testers and users ● cheaper to fix bugs and adjust functionality ● Adjust faster ● adapt to changed conditions ● change priorities ● track progress early
  • 7. Thin slices ● How do we break down new functionality (an epic) into a lot of small slices (stories)? ● How do we break down a story into a lot of small tasks? ● In the following ● an example based on domain of cable service (broadband internet) ● then some general observations and suggestions
  • 8. Breaking an epic into small stories ● "As a cable provider I would like to have commands and monitors so I can connect or disconnect cable service to this customer" ● How do we break this epic into smaller stories? ● Each story must have value for a user ● Different users might use these capabilities (Vendor operators, Cable Provider automation, Cable Provider operators) ● Commands and monitoring provide value individually ● Connect and disconnect provide value individually ● Further usability improvements is spawned off to its own story ● Include test and documentation in each story ● We will not treat each individual command as an individual story
  • 9. Different stories for different users Cable Provider UI User Web Cable Provider Services Scripts Generic Middle Network Cable Modem Tier Interface Modem Interface CLI DB Vendor operator
  • 10. Final set of stories for the epic ● Connect ● Monitoring ● CLI ● CLI ● Web Services ● Web Services ● UI ● UI ● Disconnect ● Usability Improvements ● CLI ● Web Services ● UI
  • 11. Breaking a story into small tasks ● "As a Cable Provider Script, I want to read the modem status flags so that I can obtain the state of a particular modem in the field" ● How do we break this story into tasks? ● Implementing support in each layer becomes a task ● Consider spawning off exceptional cases, optimizations, larger refactorings as individual tasks ● Add a spike task if using new technology (tools, APIs, ...) ● Story documentation and story acceptance tests becomes individual tasks ● Include unit tests and direct refactorings as part of each task
  • 12. Layers involved in this story Cable Provider UI User Web Cable Provider Services Scripts Generic Middle Network Cable Modem Tier Interface Modem Interface CLI DB Vendor operator
  • 13. Final set of tasks for the story ● Acceptance tests for the story ● Development (design + code + unit test) ● GenericModemInterface::GetStatus (supported by modem) ● Database script for new flags ● MiddleTier::GetStatus ● Spike: best practice for flag support in WSDL ● Refactor WSDL: explicit support for flags elsewhere ● WebService::GetStatus ● WSDL::GetStatus ● GenericModemInterface::GetStatus (unsupported by modem) ● User documentation update for the story
  • 14. Stories - how small? ● Divide story S into S1 and S2 ● ...if both S1 and S2 has individual value for some user ● no matter how small the value ● (larger than 0) ● ...if releasing S1 or S2 to test or production provides valuable feedback for the team ● Rule of thumb: several stories per developer per week
  • 15. Tasks - how small? ● Divide task T into T1 and T2 ● ...if both T1 and T2 contribute to the story, and have individual cost to implement ● no matter how small the cost ● (larger than 0) ● ...if implementing T1 and T2 seperately does not increase the cost more than 5-10% ● ...if comitting T1 or T2 provides valuable feedback for the team ● Rule of thumb: several tasks per developer per day
  • 16. But: How do I break down epics/stories? ● Breaking down an epic ● Find all the possible types of users ● List all the different variations that each user might get value from an epic ● Ask yourself: As a user, what would I want to have if I could only spend half the current estimate? ● Breaking down a story ● List all the places in the code that needs to be changed ● Each code change that can be individually unit tested becomes a task ● Bundle code changes that are so similar that splitting them into different tasks have too large overhead
  • 17. But: What if the slices are still too big? ● A task with lots of repetitive work taking several days ● Is the design really optimal? ● Maybe it's about time for a major refactoring ● A story with lots of similar tasks taking several weeks ● Same thing: consider refactoring your design to make it cheaper to implement this kind of functionality ● A task with technological challenges and weak estimates ● Do experiments and spikes in separate tasks ● A task to implement a major refactoring taking several days ● Read the Refactoring book by Martin Fowler et al. ● Split the refactoring into individual core refactoring tasks ● This will also minimize the risk!
  • 18. But: When do I stop the breakdown? ● Stories can be arbitrarily ● Don't make tasks too small small, e.g. bug fixes ● A task of a few hours need not ● The overhead is always worth be broken down further it because the freedom to ● Don't make every new prioritize prevents a lot of database field a separate task waste ● Bundle related database fields in a single task ● Very small tasks do not improve the value of progress tracking ● You can always commit your work several times during a single task if you like to work in very small steps
  • 19. But: What about bugs? ● A bug found before release becomes a new task ● Remember to add a failing unit test before fixing the bug ● A bug found after release becomes a new story ● Remember to add a failing acceptance test or unit test ● Try to come up with a process improvement that would have prevented this bug