πŸ€–
Automated tests

@yjaaidi

πŸ€–
Automated tests

🐞
Less bugs

@yjaaidi

πŸ€–
Automated tests

✨
Quality

🐞
Less bugs

Not Visible

Visible

@yjaaidi

πŸ€–
Automated tests

✨
Quality

🐞
Less bugs

Not Visible

Visible

πŸ₯΅
Stop testing
every change
manually

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

✨
Quality

🐞
Less bugs

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

✨
Quality

🐞
Less bugs

πŸ‡
Faster time
to market

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ‡
Faster time
to market

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ‡
Faster time
to market

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ‡
Faster time
to market

⚽️
Collective
ownership

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ‡
Faster time
to market

⚽️
Collective
ownership

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

♻️
Update
dependencies

automatically
(or frequently)

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

♻️
Update
dependencies

automatically
(or frequently)

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

♻️
Update
dependencies

automatically
(or frequently)

Not Visible

Visible

@yjaaidi

πŸ₯΅
Stop testing
every change
manually

⚑️
Faster

development

πŸ€–
Automated tests

πŸ’ͺ
Confidence

✨
Quality

🐞
Less bugs

πŸ› 
Refactoring

πŸ‡
Faster time
to market

⚽️
Collective
ownership

♻️
Update
dependencies

automatically
(or frequently)

πŸ₯³
Pleasure

Not Visible

Visible

@yjaaidi

Tests are the best documentation

@yjaaidi

🌏 More surface

πŸ¦‹ Symmetric
you get the exact doc of the version you are using

πŸš€ Up-to-date

asDiagram('count')('should count the values of an observable', () => {
  const source = hot('--a--b--c--|');
  const expected =   '-----------(x|)';

  expectObservable(source.pipe(count())).toBe(expected, {x: 3});
});

@yjaaidi

Test-Driven Development

⏰
Write tests first

@yjaaidi

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

@yjaaidi

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

@yjaaidi

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

@yjaaidi

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

@yjaaidi

πŸ“‰
Less code

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”
Early feedback

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

πŸ›€
Relaxed implementation

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”
Early feedback

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

πŸ›€
Relaxed implementation

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”
Early feedback

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

πŸ›€
Relaxed implementation

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”
Early feedback

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

πŸ›€
Relaxed implementation

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”
Early feedback

πŸ”—
Not coupled
to implementation

🚫

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

Test-Driven Development

⏰
Write tests first

πŸ‘·β€β™‚οΈ
Focus on the feature

πŸ›€
Relaxed implementation

🏁
Know when you are done

🏭
Avoid Artificial

Complexity

🎯
Share intention

πŸ”
Early feedback

πŸ”—
Not coupled
to implementation

🚫

πŸ’‰
TDD
Addiction

@yjaaidi

πŸ“‰
Less code

πŸ’΅
Cheap
Refactoring

TDD Limitations

@yjaaidi

πŸ™πŸ»β€β™‚οΈ Doesn't enforce collective ownership

🐘 Doesn't encourage small changes

πŸ¦‹ Doesn't solve asymmetry

🚫

Timeboxed TDD

@yjaaidi

⏳

Reset timer

βŒ›οΈ

Timeout

πŸ—œ

Test

⌨️

Code

βœ…

OK

☁

Commit
& Push

πŸ”₯

Revert

🚨

Fail

Few
minutes

Test && Commit || Revert

@yjaaidi

Lars Barlindhaug

Kent Beck

Ole Tjensvoll​ Johannessen

initiated in Oslo πŸ‡³πŸ‡΄

by

@barlindh

@kentbeck

Oddmund StrΓΈmme

@jraregris

πŸ’‘ An idea from

Test && Commit || Revert

@yjaaidi

πŸ—œ

Test

⌨️

Code

βœ…

OK

☁

Commit
& Push

πŸ”₯

Revert

🚨

Fail

πŸ‘¨πŸ»β€πŸ« Web Dev, XP & Security Trainings

​

πŸ’» Remote Consulting Sessions​

🎯 Consulting & XP Coaching​

@yjaaidi

Angular Air - Timeboxed TDD & TCR

By Younes

Angular Air - Timeboxed TDD & TCR

  • 863