SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Agile Software Development in
Practice – A Developer
Perspective

                Weerasak Witthawaskul
                       Mr. Sweet Corn
                       29 August 2009
Companies' Most Important Assets

Employees = You
Current Treatments
  More workload /
  documentation
  = More stresses, High
  turnover, Low quality
  work
Happy, talented,
empowered, passionate
employees = productive
To Agile, or Not to Agile
What? You are still not an agile
            developer?
                           Agile will make you
                            more, if not most,
                            productive
                               Don't do things that do
                                not help make working
                                software
                               No more repeated bugs
   Agile is about organizational transformation
   Try Scrum for project management
   Try XP for design, develop and test
Pick 3 out of 4

        Deadline



Scope                 Budget



        Quality
Agile Practices

   User Stories
   Iteration Planning Meeting
   Daily Stand-up Meeting
   Retrospective
   TDD
   Refactoring
   Continuous Integration
User Story Stack
Scrum in Theory
Scrum in Practice
Card Wall
 Ready    In Dev     In BA     In QA   Ready for
for Dev                                Business
Release and Iteration Plannings
                           Daily Standup




Release 1 Planning
IPM 1
         End of Iteration 1
            Retrospective
                     IPM 2 End of Iteration 2
                                Retrospective
                           Release 2 Planning
                                        IPM 3             End of Iteration 3
                                   Release 1                 Retrospective
                                                                      IPM 4
                       IPM = Iteration Planning Meeting
Iteration Planning
   Review vision and roadmap
   Review development status from previous
    iterations
   Demo of previous iterations
   Review team availability & capacity
   Review product backlog & select items for
    iteration
   Identify tasks & estimates
   Commit
Productive Scrum

   Time management is crucial
   All roles must be identified
       Business / PM / BA / Tech Lead / Dev / QA
   Onsite team is most desirable
   Be concise and direct
   Trust that everybody does the best job possible
    given context and timeframe
   Daily or on-demand group huddle
   Use simplest tools possible
Measurements
   Frequent releases of working software
   Iteration Velocity
   Repeated Defects
   Team productivity / morale / happiness
Eternal Engineering Sunshine of
      the Spotless Minds
   We tend to overengineer design...
       Lets do the Strategy pattern when there is only one
        algorithm
       Lets use the Observer pattern when there is only
        one observable and one observer
       Lets use this because in the future...
       I have beautiful diagrams of the system; don't
        change it
       Aim for 100% test coverage
XP is for...
eXtreme Programming (XP)
                                      Move People                                   100%
               CRC                      Around
               Cards                                                                 Unit
                                      Change    We                                  Tests
    Simple                             Pair    Need
                                               Help                                Passed
    Design
               Complex
               Problem                                              Run All Unit
                             Failed                                   Tests
                              Unit                    New Unit
Next Task           Create    Test        Pair         Tests
Or Failed                             Programming              Continuous
                    a Unit                                     Integration
Acceptance          Test     Passed                    New
Test                          Unit                  Functionality
                                      Simple   Complex
                                      Code      Code
                                       Refactor                              Acceptance
                                      Mercilessly                               Test
                                                                               Passed
Copyright 200 J. D. Wells
                             Collective Code Ownership
Pair Programming

   Pairing Matrix
       Developer    Dev A       Dev B       Dev C       Dev D


       Dev A                    Monday      Tuesday     Wednesday


       Dev B        Monday                  Wednesday   Thursday


       Dev C        Tuesday     Wednesday               Friday


       Dev D        Wednesday   Thursday    Friday



   Ping Pong Programming
Test Driven Development

   New Project
       Help you shape your design from the caller point of
        view
       Set of tests (test suite) become assets
   Reengineering Project
       Help you understand existing implementation by
        writing test coverage of existing code
       Ensure that your refactored code and new code do
        not break tests
Three Rules of TDD Fight Club
Three Rules of Fight Club TDD


   You are not allowed to write any production
    code unless it is to make a failing unit test pass.
   You are not allowed to write any more of a unit
    test than is sufficient to fail; and compilation
    failures are failures.
   You are not allowed to write any more
    production code than is sufficient to pass the
    one failing unit test.
Typical Coding
   Understand user accpetance criterias in
    each user story
   Write functional tests for each criteria
       They will fail
   For each functional test
       Write unit tests for controllers
       Think about what should be in controllers, what
        should be abstracted into models
       Write unit tests for models
       Write code to make tests pass
Test Double

         Use Stubs / Mocks
         Stubbing things you
          don't want to test but
          are necessary
         Mocking things you
          expect some
          behaviors
         Examples?
Level of Tests
   Unit tests
       One class; stubs the rest
   Functional tests
       Groups of classes; use fixtures as test data
   External tests
       External service dependencies; may fail if
        external services are unavailable
   Integration tests; User acceptance tests
       End-to-end tests
       Webapp tests from web browser
Testing Styles
   Assertion is so '90s
      assert_equals(”must be empty”, message, ””)
   Behavior Drien Design (BDD)
      message.should == ””
   Test name prefixed is for grandpa
      void testMessageMustBeEmpty() { … }
   Use annotation
      [test]
      void messageMustBeEmpty() { … }
BDD
   We describe something that it must behave …
    describe ”user login” do
      it ”must not allow user login without password” do
      … password.should_not be_nil ...
      end
      it ”checks password from the user id” do
      … user.valid?(password).should == true ...
      end
    end
BDD and User Stories

   Story n
    As a …stakeholder...
    I want to …goal...
    so that …reason/business value...
       Scenario m
        Given …context...
        When ...event...
        Then ...expectation...
From User Story to Implementation Demo




     Story 1
     Title: Customer withdraws cash
     As a customer,
     I want to withdraw cash from an ATM,
     so that I don’t have to wait in line at the bank.
Demo – ATM Withdrawal
Scenario 1: Account is in credit     Scenario 2: Account is overdrawn past
                                     the overdraft limit
Given the account is in credit
                                     Given the account is overdrawn
And the card is valid                And the card is valid
And the dispenser contains cash      When the customer requests cash
                                     Then ensure a rejection message is
When the customer requests cash      displayed
Then ensure the account is debited   And ensure cash is not dispensed
                                     And ensure the card is returned
And ensure cash is dispensed

And ensure the card is returned
Spec-first Design – User/BA pairing
BA / Dev Pairing



                   Dev Pairing
Test / Code / Test Cycle
Dev done when we see all dots




                 With nested option, test result
                 becomes documentation
Checkin Messages as Documents

   Instead of
       svn ci -m ”fixing bugs”
   Try
       svn ci -m ”[jira 1234] Boat/Pok – Checked null
        pointers of cart.items before accessing each item”
   Why?
       svn log | grep -i -C 3 pok | less
       svn log | grep -i -C 3 cart | less
       Bug tracking tool integration
Continuous Integration
                              Builder Server 2

           Builder Server 1

 VCS




       Check-in
Tools
   User Stories
       Index cards
   User Story Tracking – Card Wall
       Whiteboard
       Mingle
   VCS
       Subversion / Git
   Bug Tracking
       Jira / Bugzilla
Testing Libraries / Tools
   Mockito – Java




   rSpec DSL – Ruby
   Selenium/Watir – Web
    UAT
Presentation Summary

   No more excuse not to do agile
   If you can't go full-stream agile, consider
    gradually applying agile practices
   Self-discipline, don't do shortcuts, i.e. always
    test first. You will thank yourself later.
   There is no 'i' in Teamwork; develop soft skills
    to work effectively with others
Keep Learning

   Self Study – Keep up with technololgy
   Software Craftmanship: Apprenticing
   Higher Education
Towards Agile Manifesto – Thai Edition
Now You Have Questions



       Time to Ask!
   Agile 2009 http://www.agile2009.org/
   Martin Fowler Bliki http://martinfowler.com/bliki/
   Agile Consulting
    http://agileconsulting.blogspot.com/
   Planet ThoughtWorks
    http://blogs.thoughtworks.com/

Weitere ähnliche Inhalte

Was ist angesagt?

Automate your way to agility
Automate your way to agilityAutomate your way to agility
Automate your way to agilityYuval Yeret
 
Flavours of agile software engineering
Flavours of agile software engineeringFlavours of agile software engineering
Flavours of agile software engineeringZeeshan Masood S
 
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex EnvironmentsDr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex EnvironmentsAgileSparks
 
Shirly Ronen - User story testing activities
Shirly Ronen - User story testing activitiesShirly Ronen - User story testing activities
Shirly Ronen - User story testing activitiesAgileSparks
 
Shirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-asShirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-asAgileSparks
 
Test driven development
Test driven developmentTest driven development
Test driven developmentShalabh Saxena
 
BDD presentation
BDD presentationBDD presentation
BDD presentationtemebele
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboNaveen Kumar Singh
 
Agile Maintenance
Agile MaintenanceAgile Maintenance
Agile MaintenanceNaresh Jain
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning EventRavi Tadwalkar
 
Scrum Testing Methodology
Scrum Testing MethodologyScrum Testing Methodology
Scrum Testing MethodologyGaya1985
 
(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should knowRichard Cheng
 
Agile engineering practices – a short overview
Agile engineering practices – a short overviewAgile engineering practices – a short overview
Agile engineering practices – a short overviewSerhiy Yevtushenko
 
How to bake in quality in agile scrum projects
How to bake in quality in agile scrum projectsHow to bake in quality in agile scrum projects
How to bake in quality in agile scrum projectsSantanu Bhattacharya
 
Shirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defectShirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defectAgileSparks
 

Was ist angesagt? (20)

Automate your way to agility
Automate your way to agilityAutomate your way to agility
Automate your way to agility
 
Bdd Introduction
Bdd IntroductionBdd Introduction
Bdd Introduction
 
Flavours of agile software engineering
Flavours of agile software engineeringFlavours of agile software engineering
Flavours of agile software engineering
 
Creating value using Agile Methods- Nanda Lankalapalli
Creating value using Agile Methods- Nanda LankalapalliCreating value using Agile Methods- Nanda Lankalapalli
Creating value using Agile Methods- Nanda Lankalapalli
 
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex EnvironmentsDr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
Dr. Ronen Bar-Nahor - Optimizing Agile Testing in Complex Environments
 
Shirly Ronen - User story testing activities
Shirly Ronen - User story testing activitiesShirly Ronen - User story testing activities
Shirly Ronen - User story testing activities
 
Shirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-asShirly Ronen - rapid release flow and agile testing-as
Shirly Ronen - rapid release flow and agile testing-as
 
Cobol agile
Cobol agileCobol agile
Cobol agile
 
Agile Testing
Agile TestingAgile Testing
Agile Testing
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
BDD presentation
BDD presentationBDD presentation
BDD presentation
 
Extreme programming (xp)
Extreme programming (xp)Extreme programming (xp)
Extreme programming (xp)
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - Colombo
 
Agile Maintenance
Agile MaintenanceAgile Maintenance
Agile Maintenance
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning Event
 
Scrum Testing Methodology
Scrum Testing MethodologyScrum Testing Methodology
Scrum Testing Methodology
 
(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know
 
Agile engineering practices – a short overview
Agile engineering practices – a short overviewAgile engineering practices – a short overview
Agile engineering practices – a short overview
 
How to bake in quality in agile scrum projects
How to bake in quality in agile scrum projectsHow to bake in quality in agile scrum projects
How to bake in quality in agile scrum projects
 
Shirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defectShirly Ronen - Documenting an agile defect
Shirly Ronen - Documenting an agile defect
 

Ähnlich wie Agile Software Development in Practice - A Developer Perspective

Releasing fast code - The DevOps approach
Releasing fast code - The DevOps approachReleasing fast code - The DevOps approach
Releasing fast code - The DevOps approachMichael Kopp
 
Behavior Driven Development by Example
Behavior Driven Development by ExampleBehavior Driven Development by Example
Behavior Driven Development by ExampleNalin Goonawardana
 
Testing Sap: Modern Methodology
Testing Sap: Modern MethodologyTesting Sap: Modern Methodology
Testing Sap: Modern MethodologyEthan Jewett
 
Beyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and SubversionBeyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and SubversionProduct Marketing Services
 
Effective Strategies for Distributed Testing
Effective Strategies for Distributed TestingEffective Strategies for Distributed Testing
Effective Strategies for Distributed TestingAnand Bagmar
 
TDD in functional testing with WebDriver
TDD in functional testing with WebDriverTDD in functional testing with WebDriver
TDD in functional testing with WebDriverMikalai Alimenkou
 
Essential practices and thinking tools for Agile Adoption
Essential practices and thinking tools for Agile AdoptionEssential practices and thinking tools for Agile Adoption
Essential practices and thinking tools for Agile AdoptionSteven Mak
 
Product quality in agile project
Product quality in agile projectProduct quality in agile project
Product quality in agile projectNhan Nguyen
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsDominik Dary
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015Raghu Karnati
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsMichael Palotas
 
Flexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedFlexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedSandy Mamoli
 
Agile Testing, Uncertainty, Risk, and Why It All Works
Agile Testing, Uncertainty, Risk, and Why It All WorksAgile Testing, Uncertainty, Risk, and Why It All Works
Agile Testing, Uncertainty, Risk, and Why It All WorksElisabeth Hendrickson
 
Agile Testing at eBay
Agile Testing at eBayAgile Testing at eBay
Agile Testing at eBayDominik Dary
 
Software Design for Testability
Software Design for TestabilitySoftware Design for Testability
Software Design for Testabilityamr0mt
 

Ähnlich wie Agile Software Development in Practice - A Developer Perspective (20)

Releasing fast code - The DevOps approach
Releasing fast code - The DevOps approachReleasing fast code - The DevOps approach
Releasing fast code - The DevOps approach
 
Behavior Driven Development by Example
Behavior Driven Development by ExampleBehavior Driven Development by Example
Behavior Driven Development by Example
 
Testing Sap: Modern Methodology
Testing Sap: Modern MethodologyTesting Sap: Modern Methodology
Testing Sap: Modern Methodology
 
Beyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and SubversionBeyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and Subversion
 
Effective Strategies for Distributed Testing
Effective Strategies for Distributed TestingEffective Strategies for Distributed Testing
Effective Strategies for Distributed Testing
 
TDD in functional testing with WebDriver
TDD in functional testing with WebDriverTDD in functional testing with WebDriver
TDD in functional testing with WebDriver
 
Manual testing1
Manual testing1Manual testing1
Manual testing1
 
Agile testing
Agile testingAgile testing
Agile testing
 
Eswaranand Attuluri CV
Eswaranand Attuluri CVEswaranand Attuluri CV
Eswaranand Attuluri CV
 
Essential practices and thinking tools for Agile Adoption
Essential practices and thinking tools for Agile AdoptionEssential practices and thinking tools for Agile Adoption
Essential practices and thinking tools for Agile Adoption
 
Product quality in agile project
Product quality in agile projectProduct quality in agile project
Product quality in agile project
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Flexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedFlexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts Explained
 
Agile Testing, Uncertainty, Risk, and Why It All Works
Agile Testing, Uncertainty, Risk, and Why It All WorksAgile Testing, Uncertainty, Risk, and Why It All Works
Agile Testing, Uncertainty, Risk, and Why It All Works
 
Agile Testing Overview
Agile Testing OverviewAgile Testing Overview
Agile Testing Overview
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Agile Testing at eBay
Agile Testing at eBayAgile Testing at eBay
Agile Testing at eBay
 
Software Design for Testability
Software Design for TestabilitySoftware Design for Testability
Software Design for Testability
 

Kürzlich hochgeladen

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 

Kürzlich hochgeladen (20)

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 

Agile Software Development in Practice - A Developer Perspective

  • 1. Agile Software Development in Practice – A Developer Perspective Weerasak Witthawaskul Mr. Sweet Corn 29 August 2009
  • 2. Companies' Most Important Assets Employees = You Current Treatments More workload / documentation = More stresses, High turnover, Low quality work Happy, talented, empowered, passionate employees = productive
  • 3. To Agile, or Not to Agile
  • 4. What? You are still not an agile developer?  Agile will make you more, if not most, productive  Don't do things that do not help make working software  No more repeated bugs  Agile is about organizational transformation  Try Scrum for project management  Try XP for design, develop and test
  • 5. Pick 3 out of 4 Deadline Scope Budget Quality
  • 6. Agile Practices  User Stories  Iteration Planning Meeting  Daily Stand-up Meeting  Retrospective  TDD  Refactoring  Continuous Integration
  • 10. Card Wall Ready In Dev In BA In QA Ready for for Dev Business
  • 11. Release and Iteration Plannings Daily Standup Release 1 Planning IPM 1 End of Iteration 1 Retrospective IPM 2 End of Iteration 2 Retrospective Release 2 Planning IPM 3 End of Iteration 3 Release 1 Retrospective IPM 4 IPM = Iteration Planning Meeting
  • 12. Iteration Planning  Review vision and roadmap  Review development status from previous iterations  Demo of previous iterations  Review team availability & capacity  Review product backlog & select items for iteration  Identify tasks & estimates  Commit
  • 13. Productive Scrum  Time management is crucial  All roles must be identified  Business / PM / BA / Tech Lead / Dev / QA  Onsite team is most desirable  Be concise and direct  Trust that everybody does the best job possible given context and timeframe  Daily or on-demand group huddle  Use simplest tools possible
  • 14. Measurements  Frequent releases of working software  Iteration Velocity  Repeated Defects  Team productivity / morale / happiness
  • 15. Eternal Engineering Sunshine of the Spotless Minds  We tend to overengineer design...  Lets do the Strategy pattern when there is only one algorithm  Lets use the Observer pattern when there is only one observable and one observer  Lets use this because in the future...  I have beautiful diagrams of the system; don't change it  Aim for 100% test coverage
  • 17. eXtreme Programming (XP) Move People 100% CRC Around Cards Unit Change We Tests Simple Pair Need Help Passed Design Complex Problem Run All Unit Failed Tests Unit New Unit Next Task Create Test Pair Tests Or Failed Programming Continuous a Unit Integration Acceptance Test Passed New Test Unit Functionality Simple Complex Code Code Refactor Acceptance Mercilessly Test Passed Copyright 200 J. D. Wells Collective Code Ownership
  • 18. Pair Programming  Pairing Matrix Developer Dev A Dev B Dev C Dev D Dev A Monday Tuesday Wednesday Dev B Monday Wednesday Thursday Dev C Tuesday Wednesday Friday Dev D Wednesday Thursday Friday  Ping Pong Programming
  • 19. Test Driven Development  New Project  Help you shape your design from the caller point of view  Set of tests (test suite) become assets  Reengineering Project  Help you understand existing implementation by writing test coverage of existing code  Ensure that your refactored code and new code do not break tests
  • 20. Three Rules of TDD Fight Club
  • 21. Three Rules of Fight Club TDD  You are not allowed to write any production code unless it is to make a failing unit test pass.  You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.  You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
  • 22. Typical Coding  Understand user accpetance criterias in each user story  Write functional tests for each criteria  They will fail  For each functional test  Write unit tests for controllers  Think about what should be in controllers, what should be abstracted into models  Write unit tests for models  Write code to make tests pass
  • 23. Test Double  Use Stubs / Mocks  Stubbing things you don't want to test but are necessary  Mocking things you expect some behaviors  Examples?
  • 24. Level of Tests  Unit tests  One class; stubs the rest  Functional tests  Groups of classes; use fixtures as test data  External tests  External service dependencies; may fail if external services are unavailable  Integration tests; User acceptance tests  End-to-end tests  Webapp tests from web browser
  • 25. Testing Styles  Assertion is so '90s assert_equals(”must be empty”, message, ””)  Behavior Drien Design (BDD) message.should == ””  Test name prefixed is for grandpa void testMessageMustBeEmpty() { … }  Use annotation [test] void messageMustBeEmpty() { … }
  • 26. BDD  We describe something that it must behave … describe ”user login” do it ”must not allow user login without password” do … password.should_not be_nil ... end it ”checks password from the user id” do … user.valid?(password).should == true ... end end
  • 27. BDD and User Stories  Story n As a …stakeholder... I want to …goal... so that …reason/business value...  Scenario m Given …context... When ...event... Then ...expectation...
  • 28. From User Story to Implementation Demo Story 1 Title: Customer withdraws cash As a customer, I want to withdraw cash from an ATM, so that I don’t have to wait in line at the bank.
  • 29. Demo – ATM Withdrawal Scenario 1: Account is in credit Scenario 2: Account is overdrawn past the overdraft limit Given the account is in credit Given the account is overdrawn And the card is valid And the card is valid And the dispenser contains cash When the customer requests cash Then ensure a rejection message is When the customer requests cash displayed Then ensure the account is debited And ensure cash is not dispensed And ensure the card is returned And ensure cash is dispensed And ensure the card is returned
  • 30. Spec-first Design – User/BA pairing
  • 31. BA / Dev Pairing Dev Pairing
  • 32. Test / Code / Test Cycle Dev done when we see all dots With nested option, test result becomes documentation
  • 33. Checkin Messages as Documents  Instead of  svn ci -m ”fixing bugs”  Try  svn ci -m ”[jira 1234] Boat/Pok – Checked null pointers of cart.items before accessing each item”  Why?  svn log | grep -i -C 3 pok | less  svn log | grep -i -C 3 cart | less  Bug tracking tool integration
  • 34. Continuous Integration Builder Server 2 Builder Server 1 VCS Check-in
  • 35. Tools  User Stories  Index cards  User Story Tracking – Card Wall  Whiteboard  Mingle  VCS  Subversion / Git  Bug Tracking  Jira / Bugzilla
  • 36. Testing Libraries / Tools  Mockito – Java  rSpec DSL – Ruby  Selenium/Watir – Web UAT
  • 37. Presentation Summary  No more excuse not to do agile  If you can't go full-stream agile, consider gradually applying agile practices  Self-discipline, don't do shortcuts, i.e. always test first. You will thank yourself later.  There is no 'i' in Teamwork; develop soft skills to work effectively with others
  • 38. Keep Learning  Self Study – Keep up with technololgy  Software Craftmanship: Apprenticing  Higher Education
  • 39. Towards Agile Manifesto – Thai Edition
  • 40. Now You Have Questions Time to Ask!  Agile 2009 http://www.agile2009.org/  Martin Fowler Bliki http://martinfowler.com/bliki/  Agile Consulting http://agileconsulting.blogspot.com/  Planet ThoughtWorks http://blogs.thoughtworks.com/