SlideShare a Scribd company logo
eXtreme Programming! 
Agile Software Development! 
ARTEM TABALIN!
Iterative vs Waterfall!
Waterfall!
Disadvantages! 
• High amount of risk! 
• Impossible to go back and fix! 
• No result until very end! 
• Impossible to strictly follow the requirements!
Result! 
• Broken expectations! 
• Delivery delay! 
• Double budget! 
• Low quality!
When to use! 
• Simple project! 
• Short project! 
• Clear requirements! 
• Familiar technology!
What to do?! 
• Complex project! 
• Long project! 
• Ambiguous requirements! 
• Unknown technology!
Iterative!
Iteration lifecycle! 
1. Figure out Use Cases! 
2. Choose most valuable for iteration! 
3. Analyze chosen use cases! 
4. Design / Code / Deploy / Test! 
5. Show results to customer! 
6. Repeat from #2 considering feedback #5!
Benefits! 
• Risk management! 
• Early delivery! 
• Cost control! 
• High quality!
Agile Methodologies! 
• eXtreme Programming! 
• SCRUM! 
• Feature Driven Development! 
• KanBan!
Welcome XP!
Risk 
• Delivery delay! 
• Too many bugs! 
• Lack of functionality! 
• Core devs leaving! 
• Requirements change! 
Measure 
• Short releases! 
• Testing! 
• Tasks prioritization! 
• Pair programming! 
• On-site customer! 
XP Against Risks!
Driving Software! 
Change is the only unchangeable thing. ! 
Drive a project like you drive a car.!
Four Variables! 
• Cost! 
• Time! 
• Quality! 
• Scope 
Choose any three!
Four (5) Values! 
• Communication! 
• Simplicity do the simplest thing that can possible work! 
• Feedback! 
• Courage! 
• Respect!
XP Practices!
XP Includes! 
• Metaphor! 
• Coding Standards! 
• Collective Ownership! 
• On-site Customer! 
• Simple Design! 
• Continuous Refactoring! 
• Short Releases! 
• 40-Hour Week! 
• Continuous Integration! 
• Testing! 
• Pair Programming! 
• Planning Game!
Metaphor!
Coding Standards! 
Coding Rules followed by the team! 
• Formatting patterns! 
• Naming conventions! 
• Programming constructs to avoid! 
• Custom agreements!
Collective Ownership! 
Any developer of a team! 
• Has access to the entire source code! 
• Is allowed to change any part of code! 
• Is responsible for the code! 
IMPORTANT: Unit Tests required!
Collective Ownership - Benefits! 
• Reduce negative effect of losing a programmer! 
• Complex code eliminated by teammates! 
• No “tricky code” owners! 
• Full control over the code for everyone!
On-site Customer! 
The customer on hand at all times and 
available for questions!
Simple Design! 
Is there any way to do it simpler?!
Continuous Refactoring! 
Today’s design calls for refactoring! 
When! 
• During TDD cycle! 
• Before adding new feature! 
• New feature added! 
What! 
• Code duplication! 
• Code that smells! 
!
Short Releases! 
Release should be as short as possible and contain 
most valuable business requirements!
40-Hour Week! 
Overtime is a symptom of a serious ! 
problem on the project !
Continuous Integration! 
Get system build several times a day! 
Aims 
• Prevent “integration hell”! 
• Last stable build always available! 
• Automatic tests running!
Continuous Integration - Principles! 
• Maintain single code repository! 
• Automate the build! 
• Self-testing build! 
• Everyone commits to the baseline daily! 
• Automate deployment!
Planning Game! 
• Release (1-6 months) 
business cycle! 
• Iteration (1-3 weeks) 
developer cycle! 
• Stand-up meeting 
everyday! 
• Story (feature) 
measure of software for customer!
Release Planning! 
1. Customer writes stories! 
2. Developers estimate the stories! 
3. Splitting/Combining the stories! 
4. Sorting stories by value and risk! 
5. Choosing the scope based on velocity! 
6. Steering phase! 
• customer can add a story or change the priority! 
• developer can change the estimation! 
• plan change!
Iteration Planning! 
1. Dividing stories into tasks! 
2. Estimating the tasks yesterday’s weather! 
3. Devs take responsibility for tasks! 
4. Load factor estimation 0.5 is normal value! 
5. Rebalancing according to #4! 
6. Steering phase! 
• tasks adding! 
• tasks reassigning ! 
• plan change!
Stand-Up Meeting! 
• Short everyday meeting at the same time! 
• Everybody stands for the whole meeting in circle! 
• Everybody says! 
• what he did yesterday! 
• what he is doing today! 
• what problems he has! 
• For problems announcing (not solving)!
Testing! 
Test-Driven Development!
Tests Classification! 
• Unit Tests 
functionality in isolation! 
• Integration Tests 
components interaction 
• Functional & Acceptance Tests 
business requirements! 
• Specific Tests 
load, performance, usability, security!
TDD - Benefits! 
• Assurance of correctness! 
• Eliminates risk of changes! 
• Ensures better design! 
• Provides documentation! 
• Reduce debug time! 
• Makes to write loosely coupled code! 
• Gives confidence!
TDD - Mantra ! 
Red! 
Refactor!Green!
TDD - Cycle! 
• Add test! 
• Run all tests and fail (Red)! 
• Make required change to succeed! 
• Run all tests and succeed (Green)! 
• Refactor to remove duplication (Refactor)!
Unit Tests Best Practices! 
• Test first! 
• Assert first! 
• Arrange → Act → Assert! 
• Tests isolation! 
• Mocking dependencies!
Arrange → Act → Assert!
Tests Isolation!
Mocking Dependencies!
Other Unit Tests! 
• Explanation Test 
explain with test! 
• Learning (Boundary) Test 
external library! 
• Regression Test 
bug elimination!
Test Greening Rules! 
• Getting to Green strategies! 
• obvious implementation! 
• fake it! 
• triangulation! 
• Do the simplest solution possible! 
• Postpone faced problems for next steps! 
• No code for future!
Pair Programming! 
Two programmers work at one workstation!
Pair Programming - Benefits! 
• Less defects! 
• Better decisions! 
• Higher productivity less distractions! 
• Developers confidence! 
• Knowledge sharing! 
• Learning! 
• Team building!
Pair Programming - Variations! 
• Expert – Expert! 
• Expert – Novice! 
• Novice – Novice! 
• Remote pair programming!
Pair Programming - Problems! 
• “Watch the master” phenomenon! 
• Disengagement and silence! 
How to fight with?! 
Each developer keeps the keyboard in turn!
Pair Programming for TDD! 
• Dev1: Write test! 
• Dev2: Implement functionality! 
• Dev1: Make refactoring! 
• Dev1 ⇔ Dev2 and repeat!
Thank you!! 
Your questions, please!! 
ARTEM TABALIN!
References! 
• Beck K. Extreme Programming Explained: Embrace Change! 
• Beck K., Fowler M. Planning Extreme Programming! 
• Beck K. Test Driven Development: By Example!

More Related Content

What's hot

Introduction to TDD
Introduction to TDDIntroduction to TDD
Introduction to TDD
Ahmed Misbah
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
Mike Harris
 
Software Testing Overview
Software Testing OverviewSoftware Testing Overview
Software Testing Overview
Hawkman Academy
 
Selenium + Specflow
Selenium + SpecflowSelenium + Specflow
Selenium + Specflow
cromwellryan
 
Growing Manual Testers into Automators
Growing Manual Testers into AutomatorsGrowing Manual Testers into Automators
Growing Manual Testers into Automators
Camille Bell
 
Promoting Agility with Running Tested Features - Lightening Talk
Promoting Agility with Running Tested Features - Lightening TalkPromoting Agility with Running Tested Features - Lightening Talk
Promoting Agility with Running Tested Features - Lightening Talk
Camille Bell
 
DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for Android
Ahmed Misbah
 
Remote Mob Programming
Remote Mob ProgrammingRemote Mob Programming
Remote Mob Programming
Camille Bell
 
Clean code
Clean codeClean code
Clean code
Simon Sönnby
 
Myths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven DevelopmentMyths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven Development
Pankaj Nakhat
 
Going extreme-with-extreme-programming
Going extreme-with-extreme-programmingGoing extreme-with-extreme-programming
Going extreme-with-extreme-programming
Michael Green
 
Software development fundamentals
Software development fundamentalsSoftware development fundamentals
Software development fundamentals
Alfred Jett Grandeza
 
Mob Programming for Continuous Learning
Mob Programming for Continuous LearningMob Programming for Continuous Learning
Mob Programming for Continuous Learning
Mike Clement
 
06 integrating extra features and looking forward
06   integrating extra features and looking forward06   integrating extra features and looking forward
06 integrating extra features and looking forward
Марина Босова
 
Dealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World ExperienceDealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World Experience
Jakub Holy
 
Episode 3 – Classes, Inheritance, Abstract Class, and Interfaces
Episode 3 – Classes, Inheritance, Abstract Class, and InterfacesEpisode 3 – Classes, Inheritance, Abstract Class, and Interfaces
Episode 3 – Classes, Inheritance, Abstract Class, and Interfaces
Jitendra Zaa
 
I Don't Test Often ...
I Don't Test Often ...I Don't Test Often ...
I Don't Test Often ...
Gareth Bowles
 
Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !
Vinit Kumar Singh
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
Chuu Htet Naing
 

What's hot (20)

Introduction to TDD
Introduction to TDDIntroduction to TDD
Introduction to TDD
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
 
Software Testing Overview
Software Testing OverviewSoftware Testing Overview
Software Testing Overview
 
Selenium + Specflow
Selenium + SpecflowSelenium + Specflow
Selenium + Specflow
 
Growing Manual Testers into Automators
Growing Manual Testers into AutomatorsGrowing Manual Testers into Automators
Growing Manual Testers into Automators
 
Promoting Agility with Running Tested Features - Lightening Talk
Promoting Agility with Running Tested Features - Lightening TalkPromoting Agility with Running Tested Features - Lightening Talk
Promoting Agility with Running Tested Features - Lightening Talk
 
DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for Android
 
Remote Mob Programming
Remote Mob ProgrammingRemote Mob Programming
Remote Mob Programming
 
Clean code
Clean codeClean code
Clean code
 
Myths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven DevelopmentMyths and Challenges of Behaviour Driven Development
Myths and Challenges of Behaviour Driven Development
 
Going extreme-with-extreme-programming
Going extreme-with-extreme-programmingGoing extreme-with-extreme-programming
Going extreme-with-extreme-programming
 
Software development fundamentals
Software development fundamentalsSoftware development fundamentals
Software development fundamentals
 
Mob Programming for Continuous Learning
Mob Programming for Continuous LearningMob Programming for Continuous Learning
Mob Programming for Continuous Learning
 
06 integrating extra features and looking forward
06   integrating extra features and looking forward06   integrating extra features and looking forward
06 integrating extra features and looking forward
 
ATDD in practice
ATDD in practiceATDD in practice
ATDD in practice
 
Dealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World ExperienceDealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World Experience
 
Episode 3 – Classes, Inheritance, Abstract Class, and Interfaces
Episode 3 – Classes, Inheritance, Abstract Class, and InterfacesEpisode 3 – Classes, Inheritance, Abstract Class, and Interfaces
Episode 3 – Classes, Inheritance, Abstract Class, and Interfaces
 
I Don't Test Often ...
I Don't Test Often ...I Don't Test Often ...
I Don't Test Often ...
 
Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !Extreme programming - a quick and agile overview !
Extreme programming - a quick and agile overview !
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 

Viewers also liked

Software Patterns
Software PatternsSoftware Patterns
Software Patterns
Artem Tabalin
 
Perfect Styling - How to write better CSS
Perfect Styling - How to write better CSSPerfect Styling - How to write better CSS
Perfect Styling - How to write better CSS
Artem Tabalin
 
Perfect Code
Perfect CodePerfect Code
Perfect Code
Artem Tabalin
 
Refactoring
RefactoringRefactoring
Refactoring
Artem Tabalin
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSergey Karpushin
 
The principles of good programming
The principles of good programmingThe principles of good programming
The principles of good programming
Angelin R
 
Offline Web Apps
Offline Web AppsOffline Web Apps
Offline Web Apps
Artem Tabalin
 
Smacss e-css-faz-bem
Smacss e-css-faz-bemSmacss e-css-faz-bem
Smacss e-css-faz-bem
Just Digital
 
Agile Testing Process
Agile Testing ProcessAgile Testing Process
Agile Testing Process
Return on Intelligence
 
AgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практики
Anton Katkov
 
Future4kist 1.4
Future4kist 1.4Future4kist 1.4
Future4kist 1.4
Roman Hasko
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение Anton Katkov
 
Андрій Кушнарьов «Agile планування проектів»
Андрій Кушнарьов «Agile планування проектів»Андрій Кушнарьов «Agile планування проектів»
Андрій Кушнарьов «Agile планування проектів»
Lviv Startup Club
 
Introduction to Agile
Introduction to AgileIntroduction to Agile
Introduction to Agile
Return on Intelligence
 
Коварный Tracer Bullet Development
Коварный Tracer Bullet DevelopmentКоварный Tracer Bullet Development
Коварный Tracer Bullet Development
Mikalai Alimenkou
 
TDD in functional testing with WebDriver
TDD in functional testing with WebDriverTDD in functional testing with WebDriver
TDD in functional testing with WebDriver
Mikalai Alimenkou
 
Extreme banking
Extreme bankingExtreme banking
Extreme banking
Andrei Solntsev
 
Agile Feedback Loops (ukr)
Agile Feedback Loops (ukr)Agile Feedback Loops (ukr)
Agile Feedback Loops (ukr)
Anatoliy Okhotnikov
 
Экстремальное программирование (XP – extreme programming)
Экстремальное программирование (XP – extreme programming)Экстремальное программирование (XP – extreme programming)
Экстремальное программирование (XP – extreme programming)
Golubtsova Lena
 

Viewers also liked (20)

Software Patterns
Software PatternsSoftware Patterns
Software Patterns
 
Perfect Styling - How to write better CSS
Perfect Styling - How to write better CSSPerfect Styling - How to write better CSS
Perfect Styling - How to write better CSS
 
Perfect Code
Perfect CodePerfect Code
Perfect Code
 
Refactoring
RefactoringRefactoring
Refactoring
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
 
The principles of good programming
The principles of good programmingThe principles of good programming
The principles of good programming
 
Offline Web Apps
Offline Web AppsOffline Web Apps
Offline Web Apps
 
Smacss e-css-faz-bem
Smacss e-css-faz-bemSmacss e-css-faz-bem
Smacss e-css-faz-bem
 
Agile Testing Process
Agile Testing ProcessAgile Testing Process
Agile Testing Process
 
AgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практики
 
Future4kist 1.4
Future4kist 1.4Future4kist 1.4
Future4kist 1.4
 
Scrum and XP in practice
Scrum and XP in practiceScrum and XP in practice
Scrum and XP in practice
 
AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение AgileCamp'12 Нижний Новгород: Введение
AgileCamp'12 Нижний Новгород: Введение
 
Андрій Кушнарьов «Agile планування проектів»
Андрій Кушнарьов «Agile планування проектів»Андрій Кушнарьов «Agile планування проектів»
Андрій Кушнарьов «Agile планування проектів»
 
Introduction to Agile
Introduction to AgileIntroduction to Agile
Introduction to Agile
 
Коварный Tracer Bullet Development
Коварный Tracer Bullet DevelopmentКоварный Tracer Bullet Development
Коварный Tracer Bullet Development
 
TDD in functional testing with WebDriver
TDD in functional testing with WebDriverTDD in functional testing with WebDriver
TDD in functional testing with WebDriver
 
Extreme banking
Extreme bankingExtreme banking
Extreme banking
 
Agile Feedback Loops (ukr)
Agile Feedback Loops (ukr)Agile Feedback Loops (ukr)
Agile Feedback Loops (ukr)
 
Экстремальное программирование (XP – extreme programming)
Экстремальное программирование (XP – extreme programming)Экстремальное программирование (XP – extreme programming)
Экстремальное программирование (XP – extreme programming)
 

Similar to eXtreme Programming

Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Mozaic Works
 
Agile engineering practices
Agile engineering practicesAgile engineering practices
Agile engineering practices
Mustafa Savaşcı
 
Requirements the Last Bottleneck
Requirements the Last BottleneckRequirements the Last Bottleneck
Requirements the Last Bottleneck
Karwin Software Solutions LLC
 
Agile in 1,5 hours : brief introduction
Agile in 1,5 hours : brief introductionAgile in 1,5 hours : brief introduction
Agile in 1,5 hours : brief introduction
Kostetska Galyna
 
Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2
Benjamin Baumann
 
Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assurance
Benjamin Baumann
 
Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...
Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...
Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...Eric Wu
 
Lean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill AyersLean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill Ayers
SPC Adriatics
 
How to write bad code using C#
How to write bad code using C#How to write bad code using C#
How to write bad code using C#
Wekoslav Stefanovski
 
Hacker News Meetup April 2014
Hacker News Meetup April 2014Hacker News Meetup April 2014
Hacker News Meetup April 2014
Dan Quine
 
Introducing Pair Programming
Introducing Pair ProgrammingIntroducing Pair Programming
Introducing Pair Programming
Steven Smith
 
Test Driven Development - Workshop
Test Driven Development - WorkshopTest Driven Development - Workshop
Test Driven Development - Workshop
Anjana Somathilake
 
Extreme Programming (XP): Revisted
Extreme Programming (XP): RevistedExtreme Programming (XP): Revisted
Extreme Programming (XP): Revisted
Mike Harris
 
TDD and Related Techniques for Non Developers (2012)
TDD and Related Techniques for Non Developers (2012)TDD and Related Techniques for Non Developers (2012)
TDD and Related Techniques for Non Developers (2012)
Peter Kofler
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP WorldIdaf_1er
 
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Phil Leggetter
 
Project Sherpa: How RightScale Went All in on Docker
Project Sherpa: How RightScale Went All in on DockerProject Sherpa: How RightScale Went All in on Docker
Project Sherpa: How RightScale Went All in on Docker
RightScale
 
Why your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating itWhy your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating it
Farooq Ali
 
Client Technical Analysis of Legacy Software and Future Replacement
Client Technical Analysis of Legacy Software and Future ReplacementClient Technical Analysis of Legacy Software and Future Replacement
Client Technical Analysis of Legacy Software and Future Replacement
VictorSzoltysek
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
Shafiul Azam Chowdhury
 

Similar to eXtreme Programming (20)

Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
 
Agile engineering practices
Agile engineering practicesAgile engineering practices
Agile engineering practices
 
Requirements the Last Bottleneck
Requirements the Last BottleneckRequirements the Last Bottleneck
Requirements the Last Bottleneck
 
Agile in 1,5 hours : brief introduction
Agile in 1,5 hours : brief introductionAgile in 1,5 hours : brief introduction
Agile in 1,5 hours : brief introduction
 
Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2
 
Software testing and quality assurance
Software testing and quality assuranceSoftware testing and quality assurance
Software testing and quality assurance
 
Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...
Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...
Introduction to Agile Software Development - Eric Wu - MBAX6360 New Product D...
 
Lean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill AyersLean-Agile Development with SharePoint - Bill Ayers
Lean-Agile Development with SharePoint - Bill Ayers
 
How to write bad code using C#
How to write bad code using C#How to write bad code using C#
How to write bad code using C#
 
Hacker News Meetup April 2014
Hacker News Meetup April 2014Hacker News Meetup April 2014
Hacker News Meetup April 2014
 
Introducing Pair Programming
Introducing Pair ProgrammingIntroducing Pair Programming
Introducing Pair Programming
 
Test Driven Development - Workshop
Test Driven Development - WorkshopTest Driven Development - Workshop
Test Driven Development - Workshop
 
Extreme Programming (XP): Revisted
Extreme Programming (XP): RevistedExtreme Programming (XP): Revisted
Extreme Programming (XP): Revisted
 
TDD and Related Techniques for Non Developers (2012)
TDD and Related Techniques for Non Developers (2012)TDD and Related Techniques for Non Developers (2012)
TDD and Related Techniques for Non Developers (2012)
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
 
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
 
Project Sherpa: How RightScale Went All in on Docker
Project Sherpa: How RightScale Went All in on DockerProject Sherpa: How RightScale Went All in on Docker
Project Sherpa: How RightScale Went All in on Docker
 
Why your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating itWhy your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating it
 
Client Technical Analysis of Legacy Software and Future Replacement
Client Technical Analysis of Legacy Software and Future ReplacementClient Technical Analysis of Legacy Software and Future Replacement
Client Technical Analysis of Legacy Software and Future Replacement
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
 

Recently uploaded

Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 

Recently uploaded (20)

Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 

eXtreme Programming

  • 1. eXtreme Programming! Agile Software Development! ARTEM TABALIN!
  • 4. Disadvantages! • High amount of risk! • Impossible to go back and fix! • No result until very end! • Impossible to strictly follow the requirements!
  • 5. Result! • Broken expectations! • Delivery delay! • Double budget! • Low quality!
  • 6. When to use! • Simple project! • Short project! • Clear requirements! • Familiar technology!
  • 7. What to do?! • Complex project! • Long project! • Ambiguous requirements! • Unknown technology!
  • 9. Iteration lifecycle! 1. Figure out Use Cases! 2. Choose most valuable for iteration! 3. Analyze chosen use cases! 4. Design / Code / Deploy / Test! 5. Show results to customer! 6. Repeat from #2 considering feedback #5!
  • 10. Benefits! • Risk management! • Early delivery! • Cost control! • High quality!
  • 11. Agile Methodologies! • eXtreme Programming! • SCRUM! • Feature Driven Development! • KanBan!
  • 13. Risk • Delivery delay! • Too many bugs! • Lack of functionality! • Core devs leaving! • Requirements change! Measure • Short releases! • Testing! • Tasks prioritization! • Pair programming! • On-site customer! XP Against Risks!
  • 14. Driving Software! Change is the only unchangeable thing. ! Drive a project like you drive a car.!
  • 15. Four Variables! • Cost! • Time! • Quality! • Scope Choose any three!
  • 16. Four (5) Values! • Communication! • Simplicity do the simplest thing that can possible work! • Feedback! • Courage! • Respect!
  • 18. XP Includes! • Metaphor! • Coding Standards! • Collective Ownership! • On-site Customer! • Simple Design! • Continuous Refactoring! • Short Releases! • 40-Hour Week! • Continuous Integration! • Testing! • Pair Programming! • Planning Game!
  • 20. Coding Standards! Coding Rules followed by the team! • Formatting patterns! • Naming conventions! • Programming constructs to avoid! • Custom agreements!
  • 21. Collective Ownership! Any developer of a team! • Has access to the entire source code! • Is allowed to change any part of code! • Is responsible for the code! IMPORTANT: Unit Tests required!
  • 22. Collective Ownership - Benefits! • Reduce negative effect of losing a programmer! • Complex code eliminated by teammates! • No “tricky code” owners! • Full control over the code for everyone!
  • 23. On-site Customer! The customer on hand at all times and available for questions!
  • 24. Simple Design! Is there any way to do it simpler?!
  • 25. Continuous Refactoring! Today’s design calls for refactoring! When! • During TDD cycle! • Before adding new feature! • New feature added! What! • Code duplication! • Code that smells! !
  • 26. Short Releases! Release should be as short as possible and contain most valuable business requirements!
  • 27. 40-Hour Week! Overtime is a symptom of a serious ! problem on the project !
  • 28. Continuous Integration! Get system build several times a day! Aims • Prevent “integration hell”! • Last stable build always available! • Automatic tests running!
  • 29. Continuous Integration - Principles! • Maintain single code repository! • Automate the build! • Self-testing build! • Everyone commits to the baseline daily! • Automate deployment!
  • 30. Planning Game! • Release (1-6 months) business cycle! • Iteration (1-3 weeks) developer cycle! • Stand-up meeting everyday! • Story (feature) measure of software for customer!
  • 31. Release Planning! 1. Customer writes stories! 2. Developers estimate the stories! 3. Splitting/Combining the stories! 4. Sorting stories by value and risk! 5. Choosing the scope based on velocity! 6. Steering phase! • customer can add a story or change the priority! • developer can change the estimation! • plan change!
  • 32. Iteration Planning! 1. Dividing stories into tasks! 2. Estimating the tasks yesterday’s weather! 3. Devs take responsibility for tasks! 4. Load factor estimation 0.5 is normal value! 5. Rebalancing according to #4! 6. Steering phase! • tasks adding! • tasks reassigning ! • plan change!
  • 33. Stand-Up Meeting! • Short everyday meeting at the same time! • Everybody stands for the whole meeting in circle! • Everybody says! • what he did yesterday! • what he is doing today! • what problems he has! • For problems announcing (not solving)!
  • 35. Tests Classification! • Unit Tests functionality in isolation! • Integration Tests components interaction • Functional & Acceptance Tests business requirements! • Specific Tests load, performance, usability, security!
  • 36. TDD - Benefits! • Assurance of correctness! • Eliminates risk of changes! • Ensures better design! • Provides documentation! • Reduce debug time! • Makes to write loosely coupled code! • Gives confidence!
  • 37. TDD - Mantra ! Red! Refactor!Green!
  • 38. TDD - Cycle! • Add test! • Run all tests and fail (Red)! • Make required change to succeed! • Run all tests and succeed (Green)! • Refactor to remove duplication (Refactor)!
  • 39. Unit Tests Best Practices! • Test first! • Assert first! • Arrange → Act → Assert! • Tests isolation! • Mocking dependencies!
  • 40. Arrange → Act → Assert!
  • 43. Other Unit Tests! • Explanation Test explain with test! • Learning (Boundary) Test external library! • Regression Test bug elimination!
  • 44. Test Greening Rules! • Getting to Green strategies! • obvious implementation! • fake it! • triangulation! • Do the simplest solution possible! • Postpone faced problems for next steps! • No code for future!
  • 45. Pair Programming! Two programmers work at one workstation!
  • 46. Pair Programming - Benefits! • Less defects! • Better decisions! • Higher productivity less distractions! • Developers confidence! • Knowledge sharing! • Learning! • Team building!
  • 47. Pair Programming - Variations! • Expert – Expert! • Expert – Novice! • Novice – Novice! • Remote pair programming!
  • 48. Pair Programming - Problems! • “Watch the master” phenomenon! • Disengagement and silence! How to fight with?! Each developer keeps the keyboard in turn!
  • 49. Pair Programming for TDD! • Dev1: Write test! • Dev2: Implement functionality! • Dev1: Make refactoring! • Dev1 ⇔ Dev2 and repeat!
  • 50. Thank you!! Your questions, please!! ARTEM TABALIN!
  • 51. References! • Beck K. Extreme Programming Explained: Embrace Change! • Beck K., Fowler M. Planning Extreme Programming! • Beck K. Test Driven Development: By Example!