Slide 1

Slide 1 text

Agile Engineering Practices

Slide 2

Slide 2 text

Introduction • Mob \ Pair Programming • Code Review • MVP • Collective Code Ownership • Continous Integration\Deployment\Delivery • Poker Planning \ No Estimations • TimeBoxing \ Velocity \ BurnDown Charts • Branching Strategies • Technical Debt Management • Coding Standards • Emergent Architecture \ Design

Slide 3

Slide 3 text

Agile • Agile isn't just a set of ceremonies. • It's a cultural and technical philosophy.

Slide 4

Slide 4 text

Agile Mindset • Our purpose working high quality software • Continous delivery of valuable software in sustainable pace • Deliver working software frequently • Responding to change • Self Organized Team • Continous attention to design and architecture

Slide 5

Slide 5 text

Agile Techniques

Slide 6

Slide 6 text

Pair Programming

Slide 7

Slide 7 text

Pair Programming • two programmers work together at one workstation • the driver, writes code • the navigator, reviews each line of code as it is typed in • is Social Skill not suitable for everyone • Cannot force people • Pros & Cons • increase man hour • decrease defects • increase code quality • better diffusion and know-how transfer • reduction in coordination efforts • Define common coding standards • Clash of Egos

Slide 8

Slide 8 text

Mob Programming • All team working • at the same time • in the same space • at the same computer • on the same thing • 5 to 15 minutes rotates • Driver : writes the code & not think & listen navigator • Navigator : Tells the driver what to do. • Pair Programming + Code Review + Standup

Slide 9

Slide 9 text

Mob Programming

Slide 10

Slide 10 text

Mob Programming

Slide 11

Slide 11 text

Mob Programming

Slide 12

Slide 12 text

Mob Programming Mob Success • Critical code to create • Production code to fix • Complex problems to analyze/solve • Big refactoring sessions Mob Failures • Repetitive Tasks • Boring Tasks • Long Tests Run

Slide 13

Slide 13 text

Code Review Types • Peer Review (online/offline) • Code Inspection • Team Review Advantages • Less defects • Readability • Consistent design • Coding Standarts • Share knowledge • Make for better estimates • Code reviews mentor newer engineers Best Practices • 60 minutes at max • 500 LOC at max • aim to understand every changed line • Don't assume the code works • Commenting matters • Consider how the code will work in production • Check documentation, tests, and build files • Follow up on review comments • Use checklist

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Minimum Viable Product (MVP) • product with just enough features to satisfy early customers, and to provide feedback for future product development • Minimum Releasable Product • MVP ≠ Minimum Releasable Crap

Slide 16

Slide 16 text

Minimum Viable Product (MVP)

Slide 17

Slide 17 text

Collective Code Ownership • Encourages everyone to contribute new ideas to all segments of the project. • Faster code development, prevent possible bottlenecks • Reduces the risk that the absence (or unavailability) • Is a favorable factor in the diffusion of technical knowledge • Encourages each developer to feel responsible for the quality of the whole • One technical perspective like "Conway's Law"

Slide 18

Slide 18 text

Continous Integration • Integrate your code every few hours/days. • Keep your build, tests, automated test and other release infrastructure up to date • Each integration should get as close to a real release as possible. • Compile • Execute unit test • Run automated test • Run static code analysis • Binaries(setups)

Slide 19

Slide 19 text

Continous Delivery • is an extension of continuous integration to make sure that you can release new changes to your customers quickly in a sustainable way. • Automated release with one click • Decide to release daily, weekly, fortnightly, or whatever suits your business requirements. • release more often, thus accelerating the feedback loop with your customers

Slide 20

Slide 20 text

Continous Deployment • every change that passes all stages of your production pipeline is released to your customers • there's no human intervention, and only a failed test will prevent a new change to be deployed to production. • accelerate the feedback loop with your customers

Slide 21

Slide 21 text

Continuous Delivery & Deployment

Slide 22

Slide 22 text

Kanban Board \ Scrum Task Board • Visual Board, All tasks are visible to Team • All Task is transparent to all stakeholders. • Encourage collaboration & conversation • More Interactive and Fun • In Scrum, Dev Team update the board in Daily Scrum meeting • Dev Team can calculate Velocity \ BurnDown chart and other metrics

Slide 23

Slide 23 text

Planning Poker • Estimation for Product Backlog • All Team members estimate the PBI • who gave the high and low estimate justify their reasoning • Planning Poker, Fibonnacci Series, Natural,T-Shirt size

Slide 24

Slide 24 text

No Estimation • Slice the user stories thinly • Time-box and prioritize • Update the forecast frequently

Slide 25

Slide 25 text

BurnDown Chart • the amount of work that has been completed in iteration, and the total work remaining. • Team use ! • Not a performance report • Trend or indication for Team

Slide 26

Slide 26 text

Velocity • indication of the average amount of Product Backlog turned into an Increment of product during a Sprint

Slide 27

Slide 27 text

TimeBoxing • allotting a fixed, maximum unit of time for an activity • define and limit the amount of time dedicated to an activity. • Software creative work, don’t have only one solution. • Pros&Cons • Keep focus • Provide prioritization • Increase productivity & efficiency • encourages teams to start getting work done

Slide 28

Slide 28 text

Branching Strategies • The version control system creates a copy of the code base at that point in time • Master/Trunk/Main • Release Branch • Development • Feature Branch • Develop/test/review feature without any interrupt • Merge issues • Small check-in • Code Freeze not needed

Slide 29

Slide 29 text

Technical Debt Management • Technical debt is the difference between what was promised and what was actually delivered. • Preventing technical debt is what allows development to be agile in the long run.

Slide 30

Slide 30 text

Technical Debt • Indicators • The loss of productivity • Increase in testing • Postponed releases • Code duplication • Increase in bugs • Being scared of changing anything • Unreadable code • Decreased velocity • How to Fix • Merciless refactoring • Fast automation • Slow down to go fast • Clean code principles • Clear definition of done • Key engineering practices • Fail Fast (Code Review etc.) • Monitor & Fix constantly • Fix root causes

Slide 31

Slide 31 text

Coding Standards are a formalized set of rules and practices that developers can adhere to when writing code which ensures that the code is easily readable, maintainable and extensible and reduces the risk of introducing bugs. 1. Create the minimal set of standards you can live with. 2. Focus on consistency and consensus over perfection. • No big Coding Standard Documentation (Anyone Read/Remember ?) • Automated tools (FxCop,SonarQube,Resharper,Intellij supports) • Strive to continually reduce codes that do not meet the Coding Standards. • Do Code Review • Add important items to Code Review checklist

Slide 32

Slide 32 text

Emergent (Agile) Architecture • Simple design no BUDF • the best architectures, requirements, and designs emerge from a self organized team during the development • “You Aren’t Gonna Need It” (YAGNI) • Create Spike solutions • the simplest and smallest software architecture is the best architecture, can be maintained and changed easily by a development team

Slide 33

Slide 33 text

Retrospective • At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly • Key practice for Inspect & Adapt • Continuos Improvement \ Kaizen

Slide 34

Slide 34 text

Retrospective • How to apply Retrospective more productive ? • Create safe environment for stakeholders • Try out new retrospective templates • Small&SMART actions that can fit to one iteration. • Track action items during the sprint • Stakeholder’s participation must be ensured • Choose different location • Vote and Prioritize retro items for taking measure • Not allow in Retrospective • Don’t play blame game • Don’t let monoton or boring • Futurespective

Slide 35

Slide 35 text

Acceptance Test Driven Development • Acceptance Test is an executable specification of system behaviour. • ATDD aims to encourage collaboration among the user, developer, and tester to ensure that acceptance tests exist before writing any code.

Slide 36

Slide 36 text

ATDD with SpecFlow

Slide 37

Slide 37 text

Behaviour Driven Development (BDD) • BDD requires guidance from developers, testers, and users to ensure answers to the “whys” behind a user story. • BDD is usually done in very English-like language English-like language helps the Domain experts to understand the implementation rather than exposing the code level tests. Its defined in a GWT format, GIVEN WHEN & THEN. • Often with further tools to make it easy for non-techies to understand, like Fitness for example. • This allows much easier collaboration with non-techie stakeholders, than TDD. • BDD focuses on the behavioral aspect of the system rather than the implementation aspect of the system that TDD focuses on. • BDD gives a clearer understanding as to what the system should do from the perspective of the developer and the customer.

Slide 38

Slide 38 text

Test Driven Development (TDD aka uTDD) • No UI automation, No Feature Test, No Regression/Integration, • Not direct linked to Requirement • Focuses specifically on “unit tests.” • The developer takes a requirement and then converts it into a specific test case • Then the developer writes the code to pass those particular test cases only. • TDD focuses on the low level, ATDD on high level. • The BDD is where the step of making it more customer-focused comes in

Slide 39

Slide 39 text

What is difference between TDD, ATDD and BDD ? • TDD (uTDD):“Is the code correct?” • focuses on the “inside-out” perspective • create tests from a developer’s perspective. • takes a requirement and then converts it into a specific test case. • BDD : “Is this what we should be testing?” • focuses on the “outside-in” perspective • test behaviors which are related to business outcomes • tests are written in an English-like language ATDD: “Is the code doing what it is supposed to do?” • is written from the users perspective and function as a requirement for how the software should function. • focuses on capturing requirements in acceptance tests and uses them to drive the development

Slide 40

Slide 40 text

ATDD with TDD

Slide 41

Slide 41 text

What is difference between TDD, ATDD and BDD ?

Slide 42

Slide 42 text

Resources • https://www.versionone.com/agile-101/agile-software-programming-best-practices • https://www.atlassian.com/continuous-delivery/ci-vs-ci-vs-cd • https://www.agilealliance.org/agile101/agile-glossary/ • https://www.atlassian.com/agile • https://www.ca.com/en/blog-agile-requirements-designer/guide-to-test-driven-development-tdd- vs-bdd-vs-atdd.html • https://gaboesquivel.com/blog/2014/differences-between-tdd-atdd-and-bdd/ • https://explore.versionone.com/state-of-agile/versionone-12th-annual-state-of-agile-report • https://speakerdeck.com/lemiorhan • https://gaboesquivel.com/blog/2014/differences-between-tdd-atdd-and-bdd/ • https://www.ca.com/en/blog-agile-requirements-designer/guide-to-test-driven-development-tdd- vs-bdd-vs-atdd.html • http://toolsqa.com/blogs/test-approach-and-comparisons-between-atdd-tdd-and-bdd/

Slide 43

Slide 43 text

Contact M. Mustafa Savaşcı Exp. R&D Engineer / Scrum Master E-mail: m.mustafasavasci [at] gmail.com