SlideShare a Scribd company logo
1 of 31
The Agile Technical Practices
or
How to Build a Better Deck
Moss Drake PNSQC 2019
@mxmoss
Everything’s Agile?
No Rules or Know Rules?
vs
Agile Technical Practices
● Common Code Convention
● Collective Code Ownership
● Revision Control
● Pair Programming
● Test-Driven Development
● Unit Testing
● Refactoring
● Continuous Integration
● Continuous Delivery
First, a story...
Engineering Principles
● Testability - Repeatable results to ensure expectations
● Maintainability - Designed to last & be extendable
● Integrity - Meets appropriate & intended requirements
● Ethical - Safe and in best interest of users and client
● Manageable - Can be reasonably built and delivered
● Scientific - Based on data, math and provable concepts
● External integration -Well-defined interface w/environment
Common Code Conventions
Agree on standards
● Naming Conventions
● Coding standards
● User Interface conventions
● File structures
● Configuration management
● Shared tools & Language
● Error logging
● Security
Common Code Conventions - Agile Engineering?
Benefits
● Readability, comprehension
● Shared knowledge
● Fewer decisions = constraints provide freedom
How many times have you grabbed a Standard screwdriver
and needed a Phillips?
The nice thing about standards is that you have so many to
choose from -- Andrew S. Tanenbaum
Support for Standards Built into Scaffold (Vue)
Collective Code Ownership
Any team member can change any piece of code in the system at any time.
Everyone on the team is responsible for the code.
This works better if you have:
● Coding standards
● Shared code repository
● Pair programming
● Continuous integration
● Unit tests
Collective Code Ownership - Agile Engineering?
● No hidden code makes the code base maintainable testable, ethical
● Peer pressure urges use of coding standards
● Lessens bottlenecks - not waiting on a specific developer
● Embraces the Kaizen “stop the line” philosophy
● Complex / difficult code will be revised
● Knowledge sharing
● Empowers coders & builds attachment
Pair Programming
A dialog between two people trying to simultaneously program and analyze and
design and test and understand how to program better -- assisted and focused on
a computer.
● Two brains working on a single problem
● Sharing knowledge of the development
environment
● Full bandwidth communication - often face-to-face
● Separate roles: one building and one considering
the “meta”
Pair Programming - Agile Engineering?
● Short feedback cycles
● Simultaneous review
○ Understanding requirements
○ Writing tests
○ Solution design
● Enforces adherence to standards
○ Test-driven development
○ Coding standards
● Shared solution requires simplest implementation
Revision Control
Revision Control or Version control is a system that records changes to a file or
set of files over time so that you can recall specific versions later.
● Tracks changes to code
● Branching & merging from multiple developers
● Snapshots of significant milestones
● Allows for experiments
● Debugging
Revision Control - Agile Engineering?
● Reduces waste. More efficient than multiple, near-identical copies of code
● Allows for “practice” and Do-overs (Measure twice, cut once)
● Provides complete inspection of code base over time
● Can provide legal and compliance auditing
● Revision control of configuration coupled with CI/CD reduces human error
Security Vulnerabilities in Github (Standards / Repo)
Test-Driven Development
Writing new code only when an automated test has failed.
● Make a list of tests (requirements)
● Implement the most interesting the simplest that you
can (“Red Bar pattern”)
● Write code to make the test pass (“Green Bar pattern)
● Choose the next test from your list.
● Repeat until sufficient
Test-Driven Development - Agile Engineering?
● Supports the four elements of simple design
○ Passes all tests (testable)
○ Maximizes clarity (integrity)
○ Minimizes duplication (maintainable)
○ Has fewer elements
● Code is designed for the solution
● Tests can be written from the business point of view
Unit Testing
The practice writing tests for small sections of the program, typically methods, to
prove whether it meets design and behaves as intended. Often the tests are in a
framework like an xUnit library.
● Known state of the components that are under test
● Anyone can run the tests against the codebase
● Context setup allows for specific tests not simple within the whole system
Unit Testing - Agile Engineering?
● Isolates each part of the program to show that individual parts are correct.
● A unit test documents the strict, written contract that a piece of code must
satisfy. As tests evolve, it is living documentation of the system.
● Finds problems early in the development cycle including bugs in code &
missing specs
● Writing tests forces the authors to consider inputs, outputs, and error
conditions,
● Unit testing allows the programmer to safely refactor code
Refactoring
A disciplined technique for restructuring an existing
body of code, altering its internal structure without
changing its external behavior.
● Create known good tests to provide
“observational equivalence”
● Use known refactoring patterns to reduce
complexity. eg:
○ Isolate
○ Extract
○ Inline
○ Extract Interface
Refactoring - Agile Engineering?
● Testing tools can “prove” equivalence
● Refactoring patterns facilitate flexible designs
● Reduces cruft / unused code / technical debt
● Minimizes the cost of change
● Refactoring is often required to make legacy code more easily testable
● Practice required
○ Emily Bache: Gilded Rose Kata
○ Lewellyn Falco: Provable Refactorings with Combination Testing
Refactoring Integrated in IDE (PyCharm)
Continuous Integration
The practice of merging all developers' working copies to a shared mainline
several times a day
● Branch code for a feature
● Make changes
● Commit changes to the branch
● Automated checking process
● Merge into larger branch
Continuous Delivery
The process to automate delivery of the software into
production in a safe & sustainable way. This of course
requires validation of the system before release.
● Integration
● Automated Tests
● Deployment Pipeline
● Production Monitoring
CI / CD - Agile Engineering?
● Faster feedback on potential code breakage
● Commits = progress
● Better visibility into the quality of the code changes
● Prevents integration problems "at the end"
● Use with revision control to take snapshots of progress
● Automation Reduces human error
● Activities that used to happen rarely now happen often
● Constant monitoring provides insight into product systems
So, why do we have this?
Agile Engineering is a Journey
“If you find yourself in a team who practice continuous integration, short
iterations, pair programming, and test driven development, it is a powerful
indication you are in a team who shares the values of the agile manifesto.
If they did not share those values, they would not follow those practices.”
-- Robert Martin, author of Clean Code
(my underlines for emphasis)
Agile Practice, Practice, Practice...
Conclusion
● Agile technical practices can help create a stable code base that will provide a
robust environment for the churn and zigs and zags that come with an agile
development environment.
● These are not all the engineering principles for software design, but the ones
that are usually coupled (and sometimes ignored) in agile development teams.
● Agile Engineering is a practice, not a state.
● Have I convinced you that we can follow engineering principles while using
agile practices?
The Agile Technical Practices
or
How to Build a Better Deck
Moss Drake PNSQC 2019
@mxmoss

More Related Content

What's hot

The Role of Testing in DevOps
The Role of Testing in DevOpsThe Role of Testing in DevOps
The Role of Testing in DevOpsUberto Barbini
 
Agile model in software testing
Agile model in software testingAgile model in software testing
Agile model in software testingpooja deshmukh
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answersHopeTutors1
 
Istqb Agile-tester Extension
Istqb Agile-tester ExtensionIstqb Agile-tester Extension
Istqb Agile-tester ExtensionGirish Goutam
 
Lecture 6 agile software development
Lecture 6   agile software developmentLecture 6   agile software development
Lecture 6 agile software developmentIIUI
 
Testing strategy for agile projects updated
Testing strategy for agile projects updatedTesting strategy for agile projects updated
Testing strategy for agile projects updatedTharinda Liyanage
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven developmentGallop Solutions
 
Postmortem Analysis
Postmortem AnalysisPostmortem Analysis
Postmortem AnalysisSaqib Raza
 
Chapter 5 Agile Software development
Chapter 5 Agile Software developmentChapter 5 Agile Software development
Chapter 5 Agile Software developmentDidarul Amin
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentLim Chanmann
 

What's hot (20)

The Role of Testing in DevOps
The Role of Testing in DevOpsThe Role of Testing in DevOps
The Role of Testing in DevOps
 
Agile method
Agile methodAgile method
Agile method
 
Sdlc plan
Sdlc planSdlc plan
Sdlc plan
 
Agile model in software testing
Agile model in software testingAgile model in software testing
Agile model in software testing
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answers
 
Istqb Agile-tester Extension
Istqb Agile-tester ExtensionIstqb Agile-tester Extension
Istqb Agile-tester Extension
 
ISTQB Foundation Agile Tester 2014 Training, Agile SW Development
ISTQB Foundation Agile Tester 2014 Training, Agile SW DevelopmentISTQB Foundation Agile Tester 2014 Training, Agile SW Development
ISTQB Foundation Agile Tester 2014 Training, Agile SW Development
 
Agile methodology
Agile methodologyAgile methodology
Agile methodology
 
Agile methodology
Agile methodologyAgile methodology
Agile methodology
 
Agile method
Agile methodAgile method
Agile method
 
Lecture 6 agile software development
Lecture 6   agile software developmentLecture 6   agile software development
Lecture 6 agile software development
 
Software Engineering Practice
Software Engineering PracticeSoftware Engineering Practice
Software Engineering Practice
 
Agile versus waterfall
Agile versus waterfallAgile versus waterfall
Agile versus waterfall
 
Testing strategy for agile projects updated
Testing strategy for agile projects updatedTesting strategy for agile projects updated
Testing strategy for agile projects updated
 
Guide to Agile testing
Guide to Agile testingGuide to Agile testing
Guide to Agile testing
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven development
 
Postmortem Analysis
Postmortem AnalysisPostmortem Analysis
Postmortem Analysis
 
Chapter 5 Agile Software development
Chapter 5 Agile Software developmentChapter 5 Agile Software development
Chapter 5 Agile Software development
 
BDD along with Continuous Integration
BDD along with Continuous IntegrationBDD along with Continuous Integration
BDD along with Continuous Integration
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 

Similar to Technical Practices for Agile Engineering - PNSQC 2019

Agile A to Z Chapter 4 Feedback Loop Part 2 DevOps
Agile A to Z Chapter 4 Feedback Loop Part 2 DevOpsAgile A to Z Chapter 4 Feedback Loop Part 2 DevOps
Agile A to Z Chapter 4 Feedback Loop Part 2 DevOpsAgile ME
 
Software Defect Prevention via Continuous Inspection
Software Defect Prevention via Continuous InspectionSoftware Defect Prevention via Continuous Inspection
Software Defect Prevention via Continuous InspectionJosh Gough
 
Building Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringBuilding Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringMuhammad Shehata
 
Agile a to z chapter 4 feedback loop
Agile a to z chapter 4 feedback loopAgile a to z chapter 4 feedback loop
Agile a to z chapter 4 feedback loopWajih Aslam
 
Enter the mind of an Agile Developer
Enter the mind of an Agile DeveloperEnter the mind of an Agile Developer
Enter the mind of an Agile DeveloperBSGAfrica
 
End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020Abhijeet Vaikar
 
Increasing Quality with DevOps
Increasing Quality with DevOpsIncreasing Quality with DevOps
Increasing Quality with DevOpsCoveros, Inc.
 
Quality Assurance: An Overview
Quality Assurance: An OverviewQuality Assurance: An Overview
Quality Assurance: An OverviewAnant Corporation
 
Dev ops presentation
Dev ops presentationDev ops presentation
Dev ops presentationAhmed Kamel
 
DevOps Practices in a Nutshell
DevOps Practices in a NutshellDevOps Practices in a Nutshell
DevOps Practices in a NutshellFibonalabs
 
Agile Engineering
Agile EngineeringAgile Engineering
Agile EngineeringJohn Lewis
 
DevOps Transformation: Learnings and Best Practices
DevOps Transformation: Learnings and Best PracticesDevOps Transformation: Learnings and Best Practices
DevOps Transformation: Learnings and Best PracticesQBurst
 

Similar to Technical Practices for Agile Engineering - PNSQC 2019 (20)

Agile A to Z Chapter 4 Feedback Loop Part 2 DevOps
Agile A to Z Chapter 4 Feedback Loop Part 2 DevOpsAgile A to Z Chapter 4 Feedback Loop Part 2 DevOps
Agile A to Z Chapter 4 Feedback Loop Part 2 DevOps
 
Software Defect Prevention via Continuous Inspection
Software Defect Prevention via Continuous InspectionSoftware Defect Prevention via Continuous Inspection
Software Defect Prevention via Continuous Inspection
 
Building Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringBuilding Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software Engineering
 
Agile a to z chapter 4 feedback loop
Agile a to z chapter 4 feedback loopAgile a to z chapter 4 feedback loop
Agile a to z chapter 4 feedback loop
 
Introduction to Software Engineering
Introduction to Software EngineeringIntroduction to Software Engineering
Introduction to Software Engineering
 
Enter the mind of an Agile Developer
Enter the mind of an Agile DeveloperEnter the mind of an Agile Developer
Enter the mind of an Agile Developer
 
End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020
 
Increasing Quality with DevOps
Increasing Quality with DevOpsIncreasing Quality with DevOps
Increasing Quality with DevOps
 
Quality Assurance: An Overview
Quality Assurance: An OverviewQuality Assurance: An Overview
Quality Assurance: An Overview
 
Slides môn Công nghệ phần mềm Software Engineering
Slides môn Công nghệ phần mềm Software EngineeringSlides môn Công nghệ phần mềm Software Engineering
Slides môn Công nghệ phần mềm Software Engineering
 
Dev ops presentation
Dev ops presentationDev ops presentation
Dev ops presentation
 
Unit -1.ppt
Unit -1.pptUnit -1.ppt
Unit -1.ppt
 
What is xp
What is xpWhat is xp
What is xp
 
Agile
AgileAgile
Agile
 
Continuous integration (eng)
Continuous integration (eng)Continuous integration (eng)
Continuous integration (eng)
 
DevOps Practices in a Nutshell
DevOps Practices in a NutshellDevOps Practices in a Nutshell
DevOps Practices in a Nutshell
 
Agile Engineering
Agile EngineeringAgile Engineering
Agile Engineering
 
Agile process
Agile processAgile process
Agile process
 
DevOps Transformation: Learnings and Best Practices
DevOps Transformation: Learnings and Best PracticesDevOps Transformation: Learnings and Best Practices
DevOps Transformation: Learnings and Best Practices
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 

Recently uploaded

Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 

Recently uploaded (20)

Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 

Technical Practices for Agile Engineering - PNSQC 2019

  • 1. The Agile Technical Practices or How to Build a Better Deck Moss Drake PNSQC 2019 @mxmoss
  • 3. No Rules or Know Rules? vs
  • 4. Agile Technical Practices ● Common Code Convention ● Collective Code Ownership ● Revision Control ● Pair Programming ● Test-Driven Development ● Unit Testing ● Refactoring ● Continuous Integration ● Continuous Delivery
  • 6. Engineering Principles ● Testability - Repeatable results to ensure expectations ● Maintainability - Designed to last & be extendable ● Integrity - Meets appropriate & intended requirements ● Ethical - Safe and in best interest of users and client ● Manageable - Can be reasonably built and delivered ● Scientific - Based on data, math and provable concepts ● External integration -Well-defined interface w/environment
  • 7. Common Code Conventions Agree on standards ● Naming Conventions ● Coding standards ● User Interface conventions ● File structures ● Configuration management ● Shared tools & Language ● Error logging ● Security
  • 8. Common Code Conventions - Agile Engineering? Benefits ● Readability, comprehension ● Shared knowledge ● Fewer decisions = constraints provide freedom How many times have you grabbed a Standard screwdriver and needed a Phillips? The nice thing about standards is that you have so many to choose from -- Andrew S. Tanenbaum
  • 9. Support for Standards Built into Scaffold (Vue)
  • 10. Collective Code Ownership Any team member can change any piece of code in the system at any time. Everyone on the team is responsible for the code. This works better if you have: ● Coding standards ● Shared code repository ● Pair programming ● Continuous integration ● Unit tests
  • 11. Collective Code Ownership - Agile Engineering? ● No hidden code makes the code base maintainable testable, ethical ● Peer pressure urges use of coding standards ● Lessens bottlenecks - not waiting on a specific developer ● Embraces the Kaizen “stop the line” philosophy ● Complex / difficult code will be revised ● Knowledge sharing ● Empowers coders & builds attachment
  • 12. Pair Programming A dialog between two people trying to simultaneously program and analyze and design and test and understand how to program better -- assisted and focused on a computer. ● Two brains working on a single problem ● Sharing knowledge of the development environment ● Full bandwidth communication - often face-to-face ● Separate roles: one building and one considering the “meta”
  • 13. Pair Programming - Agile Engineering? ● Short feedback cycles ● Simultaneous review ○ Understanding requirements ○ Writing tests ○ Solution design ● Enforces adherence to standards ○ Test-driven development ○ Coding standards ● Shared solution requires simplest implementation
  • 14. Revision Control Revision Control or Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. ● Tracks changes to code ● Branching & merging from multiple developers ● Snapshots of significant milestones ● Allows for experiments ● Debugging
  • 15. Revision Control - Agile Engineering? ● Reduces waste. More efficient than multiple, near-identical copies of code ● Allows for “practice” and Do-overs (Measure twice, cut once) ● Provides complete inspection of code base over time ● Can provide legal and compliance auditing ● Revision control of configuration coupled with CI/CD reduces human error
  • 16. Security Vulnerabilities in Github (Standards / Repo)
  • 17. Test-Driven Development Writing new code only when an automated test has failed. ● Make a list of tests (requirements) ● Implement the most interesting the simplest that you can (“Red Bar pattern”) ● Write code to make the test pass (“Green Bar pattern) ● Choose the next test from your list. ● Repeat until sufficient
  • 18. Test-Driven Development - Agile Engineering? ● Supports the four elements of simple design ○ Passes all tests (testable) ○ Maximizes clarity (integrity) ○ Minimizes duplication (maintainable) ○ Has fewer elements ● Code is designed for the solution ● Tests can be written from the business point of view
  • 19. Unit Testing The practice writing tests for small sections of the program, typically methods, to prove whether it meets design and behaves as intended. Often the tests are in a framework like an xUnit library. ● Known state of the components that are under test ● Anyone can run the tests against the codebase ● Context setup allows for specific tests not simple within the whole system
  • 20. Unit Testing - Agile Engineering? ● Isolates each part of the program to show that individual parts are correct. ● A unit test documents the strict, written contract that a piece of code must satisfy. As tests evolve, it is living documentation of the system. ● Finds problems early in the development cycle including bugs in code & missing specs ● Writing tests forces the authors to consider inputs, outputs, and error conditions, ● Unit testing allows the programmer to safely refactor code
  • 21. Refactoring A disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. ● Create known good tests to provide “observational equivalence” ● Use known refactoring patterns to reduce complexity. eg: ○ Isolate ○ Extract ○ Inline ○ Extract Interface
  • 22. Refactoring - Agile Engineering? ● Testing tools can “prove” equivalence ● Refactoring patterns facilitate flexible designs ● Reduces cruft / unused code / technical debt ● Minimizes the cost of change ● Refactoring is often required to make legacy code more easily testable ● Practice required ○ Emily Bache: Gilded Rose Kata ○ Lewellyn Falco: Provable Refactorings with Combination Testing
  • 23. Refactoring Integrated in IDE (PyCharm)
  • 24. Continuous Integration The practice of merging all developers' working copies to a shared mainline several times a day ● Branch code for a feature ● Make changes ● Commit changes to the branch ● Automated checking process ● Merge into larger branch
  • 25. Continuous Delivery The process to automate delivery of the software into production in a safe & sustainable way. This of course requires validation of the system before release. ● Integration ● Automated Tests ● Deployment Pipeline ● Production Monitoring
  • 26. CI / CD - Agile Engineering? ● Faster feedback on potential code breakage ● Commits = progress ● Better visibility into the quality of the code changes ● Prevents integration problems "at the end" ● Use with revision control to take snapshots of progress ● Automation Reduces human error ● Activities that used to happen rarely now happen often ● Constant monitoring provides insight into product systems
  • 27. So, why do we have this?
  • 28. Agile Engineering is a Journey “If you find yourself in a team who practice continuous integration, short iterations, pair programming, and test driven development, it is a powerful indication you are in a team who shares the values of the agile manifesto. If they did not share those values, they would not follow those practices.” -- Robert Martin, author of Clean Code (my underlines for emphasis)
  • 30. Conclusion ● Agile technical practices can help create a stable code base that will provide a robust environment for the churn and zigs and zags that come with an agile development environment. ● These are not all the engineering principles for software design, but the ones that are usually coupled (and sometimes ignored) in agile development teams. ● Agile Engineering is a practice, not a state. ● Have I convinced you that we can follow engineering principles while using agile practices?
  • 31. The Agile Technical Practices or How to Build a Better Deck Moss Drake PNSQC 2019 @mxmoss

Editor's Notes

  1. a lot of emphasis has been on business agility and the interface between business and development teams.
  2. Within development teams, however, agile has been a mixed bag. Some teams have experienced increased efficiency and effectiveness while others see agile as biz speak for "no rules."
  3. These are the technical practices mentioned by Kent Beck in XP Programming Explained.
  4. Often it feels like the system we’re maintaining is like the steps on the right. I was talking with a friend about his new deck and I wondered how it knew how much weight it would hold. He explained he engineered it for a certain weight. I got a chill from the way he emphasized “engineering”. Yes, that what I want for software.
  5. Agile business / project management / development Does not explicitly require much engineering…
  6. Standards are good, but need to be practiced - used daily. Also, there’s an assumption that there’s always a better way to do something. “Naming is a process” - Arlo Belshee - see refactoring At PNSQC: Tuesday morning David Card talking about Standards Are Necessary But Not Sufficient for Excellent Software
  7. This is more about psychology than engineering, but it helps in the same was as a checklist We use Pairing in zoom meetings although I prefer face-to-face. Intense Not all personalities can work together… be flexible Some people question using two people working on one task At PNSQC: Tomorrow afternoon Thomas Desmond on Creating Quality with Mob Programming
  8. Using a tool like github, bitbucket, subversion or MSFT Team Foundation server
  9. We used a locally installed revision control but moved to Github in the past couple years to support distributed development teams. I really appreciate github’s features. It’s a time machine
  10. You don't have to have a full automation suite to use TDD But, once you have some tests written to help deliver the functionality, consider keeping some of them as Unit Tests At PNSQC: Wednesday Workshop run by James Shore on Test Driven Development without Mocks
  11. Hardest to get right and most daunting Unit tests are not a goal in themselves This is the automated checking phase, but it doesn’t happen without good design. Routines have to be written in a way so that they’re testable, atomic James Coplien - Why Most Unit Testing is Waste Unit tests add mass to the code base - The classes to be tested are code - The tests are code - Developers write code. - Typically, devs insert about 3 system-affecting bugs per 1,000 lines of code. - Assuming random distribution of bugs in the code base... - "Tests will hold the code to an incorrect result more often than a genuine bug will cause the code to fail!" He then explains how to to trim the unit tests to something more valuable & manageable
  12. We had a sudden layoff on our team and I didn't have time to run and maintain intensive build process We used Jenkins with Github to provide the build pipeline with Ant and a bunch of batch files to move files as we needed to get them ready for distribution. Now we can make a distribution build in about 10 minutes and Jenkins tracks the history At PNSQC: Tuesday morning Andy Peterson will be talking about Moving to Continuous Delivery Culture
  13. Here are some ways you can practice these practices in Portland AgilePDX User Group - Mob Programming Meetup in Portland monthly PDX Global Day of Coderetreat Nov 16, 2019