What is "Agile"?
Why would someone like to be agile?
What are the 3 pillars for agile software development?
How can you achieve technical excellence in your software teams?
Are developer skills more important than languages, methods or frameworks?
24. 3 essential skills needed
regardless of process
Splitting the system into
useful pieces
As a buyer
I want to save my shopping cart
so that I can continue shopping later
Software
craftsmanship
Retrospectives
25. 3 essential skills needed
regardless of process
Splitting the system into
useful pieces
As a buyer
I want to save my shopping cart
so that I can continue shopping later
Software
craftsmanship
Retrospectives
41. Code Reviews
• Code, !Person
• Constructively propose changes
Questions!
• Review not only code
o Tests
o Build process
o ..
42. Code Reviews
• Code, !Person
• Constructively propose changes
Questions!
• Review not only code
o Tests
o Build process
o ..
Grow as a team
43. Instead of
“That lousy long method”
Say
“Why don’t you split that
method”
“I reviewed your code and
found 1,2,3 things to
change”
“Can you help me?”
“If you don’t want to do it. I
do it”
“Can I help you with this? I
think we can improve it”
44. #2 reason for Bad code
Nobody can write good code in 1 sit-in
-> Refactoring
it’s an art of designing code
47. Development With and Without Testing
Without Tests
• Don’t know our own quality
• Unclear what works and what
doesn't
• Unintended consequences of
changes remain hidden
• We are never done
With Tests
• Change and refactor without
fear
• Add new features faster
• Confidence that we didn't
break anything
• We can actually be done
Done = Tested!
50. Test-Driven Development (TDD)
• Writing tests prior to writing the production code
• Test-Driven Development is
o
o
o
o
A design practice
A powerful way to avoid defects in software
A feedback loop for validating code changes
A way to write tests
REFACTOR
RED
GREEN
63. Quality: How to measure?
•
•
•
•
•
•
•
Highly subjective
Highly qualitative
Is the code readable, understandable?
Is the code verbose?
Variable/method names that are meaningful
Simple code that works
Does it have tests? What’s the coverage?
65. Quality: How to measure?
• Trends
• “Output” over time
o Velocity - Trend
o Business Value - Trend
o Bug – Trends
• #TODO: How do you measure Business value?
66. Ways to Improve Quality
• Avoid Silo Thinking
o
•
•
•
•
•
•
•
Its not “us” vs “them”
Start early
Don’t Compromise
Schedule time to lower your technical debt
Make it work; make it right (right away)
Requires monitoring and changing behavior
Be willing to help and be helped
Devise lightweight non-bureaucratic measures
67. Simple Design == High Quality?
•
•
•
•
Passes its tests
Minimizes duplication
Maximizes clarity
Has fewer elements
http://c2.com/cgi/wiki?XpSimplicityRules
71. Checkin Frequently
• Focus your work on small tasks
• Easier to describe what you did in your check-in
comment
• Clear code history
• Easier merging -> if you really need to branch and merge
• Fast code reviews
• Never get merge hell -> only give it :-)
http://blog.gfader.com/2011/12/tfs-see-your-application-grow-like.html
72. Team Efforts
• Avoid Shortcuts
• Take collective ownership
Team should own the code
• Promote positive interaction
• Provide constructive feedback
• Constant code review
73. Guantanamo Code Tool
• All code is guilty until tested innocent
• Do you have problems maintaining high test coverage?
• Send the untested code to
Guantanamo!
http://docs.codehaus.org/display/ASH/Guantanamo
74. Agile – the bar is rising
http://blog.gfader.com/2013/05/the-1st-principle-of-agile-manifesto-30.html
75. Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software
1st principle of the Agile Manifesto
76. Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software
1st principle of the Agile Manifesto
78. The important thing isn’t the process
The important thing is the process for
improving your process
79. Essential skills needed
regardless of process
Splitting the system into
useful pieces
As a buyer
I want to save my shopping cart
so that I can continue shopping later
Software
craftsmanship
Retrospectives
81. #TODO References
•
•
•
•
•
•
•
Pragmatics of Agile Development
http://www.agiledeveloper.com/presentations/pragmatics_of_agile_development.pdf
Kanban VS Scrum
http://www.infoq.com/minibooks/kanban-scrum-minibook
Agile Software Development
http://www.agiledeveloper.com/presentations/AgileSoftwareDevelopment.zip
A Thinking Tool called Agile
https://sites.google.com/site/leanagileandscrum/lean-agile-scrum-conference2010/presentations-las-2010/00_Kniberg_Keynote.pdf?attredirects=0&d=1
The Four Elements of Simple Design
http://www.jbrains.ca/permalink/the-four-elements-of-simple-design
http://agilemanifesto.org/
http://manifesto.softwarecraftsmanship.org/
Wiekommeichzu Agile?1. Scrum/AgileSüdtirolProjekte: Alles gut -> ZumSchluss (Graph from xscd)Graph: Happiness, Definition Wahnsinn: Immerwieder das Gleichemacht, abereinanderesErgebniserwartet2. AgileMinimize Risk: Deployment dayFertigmitEntwickeln. Deploy -> Hardware ist da, OS und tools alles da. Deploy to Production.Funzt net. **TODO: Find the problem we had @AuctionsPlus, @POK, POK: IP filtering, ...
Wiekommeichzu Scrum und CD?1. Scrum/AgileSüdtirolProjekte: Alles gut -> ZumSchluss (Graph from xscd)Graph: Happiness, Definition Wahnsinn: Immerwieder das Gleichemacht, abereinanderesErgebniserwartet2. AgileMinimize Risk: Deployment dayFertigmitEntwickeln. Deploy -> Hardware ist da, OS und tools alles da. Deploy to Production.Funzt net. **TODO: Find the problem we had @AuctionsPlus, @POK, POK: IP filtering, ...
Develop relevant softwareDeliver value earlierCreate value fastWelcome changes and gapsOpen communicationEmpowering peopleKeep it simple
2011 Snowbird
Develop relevant softwareDeliver value earlierCreate value fastWelcome changes and gapsOpen communicationEmpowering peopleKeep it simple
Purpose of this presentation is to clarify how some of these things fit togetherHow does agile look when done well?
Pretty meaningless question right? Because the answer depends on your context. For eating meatballs the fork is probably best. For chopping mushrooms the knife is probably best. For drumming on the table either will do fine. For eating a steak you probably want to use both tools together. For eating rice... well... some prefer fork while others prefer chopsticks.
Never blame the tool!
Vergleichen um zuVerstehen und Lernen und nichtBeurteilen und Schlechtmachen
Vergleichen um zuVerstehen und Lernen und nichtBeurteilen und Schlechtmachen
Don’t love agile.Know your GoalFocus on WhyAgile/Lean are tools, not goalsTools sind nicht erfolgreich oder scheitern. Menschen sind aber.Es gibt kein gutes oder schlechtes Tool. Nur gute oder Schlechte Entscheidungen wenn, wo, wie und wieso wir ein Tool einsetzenDon’t limit yourself to one toolMix & matchCompare for understanding, not judgement.Experiment & enjoy the rideDon’t worry about getting it right from start. You won’t.The important thing isn’t your process.The important thing is your process for improving your process.
Purpose of this presentation is to clarify how some of these things fit togetherHow does agile look when done well?
- Communication Skills- Facilitator / ScrumMaster- Vision
Having good tests is like have great brakes on a sports car. Good brakes allow us to go faster.We do not know the QualityFearless refactoring requires Tests. Refactoring is required to react on a changing worldWe are faster releasing the SWDone = Tested. No DoneDone!
waste?
Sometimes you don’t need well designed codeGoal is not to write tests but to write good code
Sometimes you don’t need well designed codeGoal is not to write tests but to write good code
Tester
Go fast -> Go well
Cyclomatic Complexity NumberGives an indication of degree of hardnessDoes not indicate degree of defectAddresses problems arising from large, low cohesive codeCode Size Rules check for the size of code and flags if it exceedsHow small is smallCode must fit into a screen (without lowering font size)[about 15 to 20 statements per method]