2. Agility

Healing the divide between business and programming

—Kent Beck, 1999

2.1. Praktyki developerskie a praktyki projektowe

  • Praktyki projektowe: Scrum, Kanban, XP, Lean

  • Praktyki developerskie (TDD, S.O.L.I.D., CI/CD, Code Review/Pull Request, DevOps)

  • Dlaczego coraz więcej zespołów odchodzi od Scrum i idzie w Kanban?

  • Połączenie Scrum i Kanban

  • XP - Extreme Programming

../_images/agility-extreme-programming.png
../_images/agile-division-methods.png
../_images/spotify-engineering-culture-011.png

2.2. Wartości biznesowe

  • Lower "time to market"

  • Increase "value to market"

  • Increase "quality to market"

  • Increase flexibility

  • Increase visibility

  • Lower costs

  • Increase product lifetime

2.2.1. Lower time to market

  • Test-driven Development

  • Evolutionary Design

    • Refactoring

    • CI / CD

  • Test-driven Requirements

    • Functional Tests

    • BDD

2.2.2. Increase value to market

  • Test-driven Requirements

    • Functional Tests

    • BDD

2.2.3. Increase quality to market

  • Test-driven Development

    • Test-first and Test-last

  • Test-driven Requirements

    • BDD

  • Evolutionary design

    • Refactoring

    • Simple Design

    • CI / CD

2.2.4. Increase flexibility

  • Evolutionary Design

    • Refactoring

    • Simple Design

    • CI / CD

  • Test-driven Development

    • Test-first and Test-last

  • Test-driven Requirements

2.2.5. Increase visibility

  • Test-driven Requirements

    • Functional Tests

    • BDD

    • CI / CD

2.2.6. Lower Cost

  • Evolutionary design

    • Simple Design

    • Refactoring

    • Collective Code Ownership

  • Test-driven Development

    • Test-last and Test-first

    • Functional Tests

2.2.7. Increase product lifetime

  • Test-Driven Development

    • Automated Developer Tests

  • Evolutionary Design

    • Refactoring

    • Simple Design

  • Test-driven Requirements

    • Functional Tests

2.3. Lean Startup

  • Build, Measure, Learn loop

../_images/person-eric-ries1.jpg
../_images/lean-startup-cycle-011.jpg

Build

Measure

Learn

Unit Tests

Split Tests (A/B)

Split Tests

Usability Tests

Clear Product Owner

Customer Interviews

Continuous Integration

Continuous Deployment

Customer Development

Incremental Deployment

Usability Tests

Five Whys Root Cause Analysis

Free & Open Source Components

Real-time Monitoring

Customer Advisory Board

Cloud Computing

Custom Liaison

Falsifiable Hypothesis

Cluster Immune System

Funnel Analysis

Product Owner Accountability

Just-in-time Scalability

Cohort Analysis

Custom Archetypes

Refactoring

Net Promoter Score

Cross-functional Teams

Developer Sandbox

Search Engine Marketing

Smoke Tests

Real-time Alerting

Predictive Monitoring

2.4. Praktyki deweloperskie a wartości biznesowe

../_images/agility-v11.png
../_images/agility-v21.png

2.5. Agile vs agility

  • Agility is achieved only by combining Business Practices and Technical Craftsmanship.

  • Agile is not only about Scrum

  • Agile is Dead - Pragmatic Dave Thomas - GOTO 2015 1

Agile is dead, long live agility!

—Dave Thomas, 2007

../_images/person-dave-thomas.jpg

2.6. Konstytucja zespołu

  • Zestaw reguł wypracowanych przez zespół

  • Na początku mamy tylko jedną regułę: "Nie można scalić kodu bez przejścia Code Review"

  • Wszystkie pozostałe reguły są próbą rozwiązania problemów, które pojawiły się podczas Code Review

  • Zawsze robimy Code Review

  • Podczas Code Review, nie tylko przeglądamy kod produkcyjny, ale także konfiguracje IaaC, CI/CD itp zakomitowaną (lub zmienioną) w danym Pull Request

  • Commitujemy również migracje schematu bazy danych + zawsze testy DBUnit

  • Wymagane 100% pokrycie publicznych metod

  • Testy metod prywatnych zalecane, ale nie wymagane

  • Nie wolno robić testów bez asercji

  • Nie wolno commitować skipniętych testów

  • Zawsze dostarczamy fixtures (dane) do testów

  • W testach Unit nie korzystamy z bazy danych (tylko mock lub stub)

  • Przy wybieraniu narzędzi dodatkowych (np. runner testów funkcjonalnych, runner testów obciążeniowych) wybieramy toole, które wspierają Configuration as a Code

2.7. References

1

https://www.youtube.com/watch?v=a-BOSpxYJ9M

2.8. Assignments

  • Oglądnijcie z trenerem filmik Spotify Engineering Culture 1 i 2