2019-05-29 at gr8conf.eu
Gr8Conf Europe 2019
Today we know software development is a mixture out of craft, research and engineering!
However it was not always like this...
Keynote from Uncle Bob:
...later transformed to:
2002 - Software Apprenticeship Summit:
2008 - SC Summit: Micah Martin gave a session
2009 - Doug Bradburry wrote in SC Google group "The New Left Side" vs. Scott Pfister "Right Side, Revisited"
Why a manifesto?
2009 - First SC conferences in USA, UK
2009 - Israeli SCC was founded
2010 - London SCC was founded
2011 - First SoCraTes in Germany
Today - SoCraTes (partner) conferences/days in:
Germany, Chile, Canaries, Italy, UK, USA, Switzerland, France, Austria, Belgium, Finnland, Romania...
vs. 1,5M with Agile
many new aspiring devs
principles got lost again down the road while doing other activities
IT market is booming and we need technical excellence to tackle our software products
arising lack of broad TDD knowledge
Individuals & Interactions
(Learning from each others)
A bunch of coders get together, code, learn, and have fun. It’s got to be a winning formula! – Emily Bache
First Rule: Design cannot be discussed without Code, Code can not be shown without tests.
Come with your relicts
Throwing yourself in
Finding a master
Subjecting to a master
Mastering a subject
TDD is used as a default pattern for coding!
first described in the essay "Fizz! Buzz!” (~1987) by David Langford as a drinking game of his teenage years in the 1960s
String Calculator Kata
Bowling Game Kata (by Robert C. Martin)
Prime Factors Kata (by Robert C. Martin)
Diamond Kata by Seb Rose
Ordered Jobs Kata
Roman Numerals Kata
Game Of Life
Book a room, Invite people, Print copies of kata description, prepare some slides for dojo introduction, inspect the chosen kata upfront
Facilitator needs to create good/healthy atmosphere, prompt interesting discussions, keep the code growing,
Try not stop people when they mess up with TDD, let them learn from mistakes, wait until retro before saying anything!
10:45 Round 1
11:45 Round 2
13:30 Round 3
14:30 Round 4
15:30 Round 5
A format popularized by Corey Haines
Corey Haines: https://leanpub.com/4rulesofsimpledesign
Missing Tool Activities
Text Editor only
Missing Feature Activities
No naked primitives
No conditional statements
Only four lines per method
Immutables only, please
Verbs instead of Nouns
Mute with find the loophole
TDD as if you meant it
Silent Coding (Mute)
Every Cell is a Microservice (at Game of Life)
London School (Mockist)
Double Loop ATDD
Detroit School (Classicist)
Kent Beck, Uncle Bob...
only mock the process boundary (DB, 3rd party)
design emerges bottom-up / inside-out
"TDD as if you meant it"
Fake-it Outside-In Design
1. You are not allowed to write any production code unless it is to make a failing unit test pass.
2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
Three rules by Robert C. Martin / Keith Braithwaite
by Robert C. Martin / Acronym by Michael Feathers
...and many more principles can be practiced with Katas!
Life in life!
21 ➔ XXI 50 ➔ L 100 ➔ C 500 ➔ D 1000 ➔ M
1 ➔ I 2 ➔ II 3 ➔ III 4 ➔ IV 5 ➔ V 9 ➔ IX
1. Create a simple String calculator with a method int add(string numbers)
2. Allow the add method to handle an unknown amount of numbers
3. Allow the add method to handle newlines between numbers instead of commas.
4. Support different delimiters with pattern: //[delimiter]\n[numbers...] , e.g. “//;\n1;2”
5. Calling add with a negative number should throw an exception “negatives not allowed”
6. Ignore big numbers, e.g. boundary is 1000 then 1001 + 2 = 2
Idea by Roy Osherove
Steps 1. + 2. = Solved with preparatory refactoring
Clean Code Helsinki
vs. 1,5M with Agile
Given a letter print a diamond starting with 'A' with the supplied letter at the widest point on the command line.
__A__ _B_B_ C___C _B_B_ __A__
____A____ ___B_B___ __C___C__ _D_____D_ E_______E _D_____D_ __C___C__ ___B_B___ ____A____
_A_ B_B _A_
Example for B
Example for C
Example for E