back to basics: agile practices
DESCRIPTION
Let's discuss this on my blog: http://www.sarfata.org/back-to-basics/basic-agile-practices/ My goal today was to extract the most important (IMHO) practices of agile methodologies that can be applied individually or together to improve the performance and well-being of project teams. I split those practices into two: practices for the developers, practices for the entire team. My selection of practices included: * Pair programming * Collective Code Ownership * Refactoring * Test Driven Development * Continuous Integration * Standup Meeting * Kanban (the post-it board) * Time-boxing - Sprint * Backlog * Retrospective Slides distributed under the CC-BY-SA license. As always feedback is much appreciated!TRANSCRIPT
Back to Basics SeriesBasic Agile PracticesThomas Sarlandie2013 03 27
TopicsIntro to agile methodologiesBasic agile practices for the development teamBasic agile practices for the project team
Intended audienceDevelopment teams and their counterpart in any company
Image by RelaxingMusic - Used under a CC-BY license: http://www.flickr.com/photos/83905817@N08/7676582338/
Image by RelaxingMusic - Used under a CC-BY license: http://www.flickr.com/photos/83905817@N08/7676582338/
Agile development is not about doing sport in the
office
Image by RelaxingMusic - Used under a CC-BY license: http://www.flickr.com/photos/83905817@N08/7676582338/
Agile development is not about doing sport in the
office
It is about finding a better way to work together
Agile Software Development today
SCRUM
Focuses on project management (team and work organization) and on planning. (Strategic level)
Extreme Programming
Practices to improve efficiency of development teams. (Tactical level)
Basic Agile Practicesfor the development team
Pair ProgrammingTwo brains much better than one ...
Two developers working together on the same code
One driver, one observer - Switch every 15’
Much better concentration
Training - Sharing best practices
Collective code ownership
Photo by rafa-alves - CC-BY-SAhttp://www.flickr.com/photos/rafaelmob/4669642298/
Collective Code Ownership
No-one ‘owns’ a particular module or piece of code
Every one can comment or commit in any piece of the code
Every one is responsible for the quality of the code
#include <stdio.h>
char *msg = "Hello World\n";
int main(int argc, char **argv){ while (*msg) { putchar(*msg); msg++; }}
RefactoringStart by writing the simplest code for the task at hand
Then when you need to extend it, refactor to make sure it remains clean, clear and concise
Can be as simple as:
Renaming classes when their role changes
Making sure the same concepts have the same name everywhere
Remove useless code and Factor duplicate code
Test Driven Development
Write test first, then the code
Improves the design of the code
Future proof
Better than a lot of documentation
http://www.javacodegeeks.com/2012/05/test-driven-development-win-win.html
Continuous Integration
Automates the build process of your code
Email the team when a test or build fails
Provides up-to-date “snapshots” of the code
Improves collaboration
Reduces time spent on tedious tasks
Basic Agile Practicesfor the entire team
Standup MeetingEvery morning, members of a project meet for a standup meeting
Says what she did yesterday
What she will do today
What are the potential problems
Improves communication in the team greatly
Keeps people focused and coordinated
Helps avoid wasted time
Photo by Alexander Ljung - CC-BY-SA-NChttp://www.flickr.com/photos/alexanderljung/3041180268/
Kanban (aka Post-it board)Three columns on the wall: Todo, In Progress, Done
One post-it for each specific task (not feature - task)
Updated in “real-time”
Define “Done”
Visible progress
Avoid wasting time on not important tasks
Forces everyone to thing about the tasks
Trust-me: Post-its are much better than any software... Photo by @Stephen - CC-BY-NChttp://www.flickr.com/photos/hdbizblog/4296189727/
Time-boxing - SprintDefine time boxes for your development: sprint
Define what you would like to do in that sprint and do not change it once started
Release a working product at the end of each sprint
Gives some stability to the team and allows the client to change priorities
Gain experience on how much can be done in one sprint
1
2
3
BacklogA list of all the Use Cases that need to be developed
Estimated with a Complexity
Prioritized by the Product Owner
Feeds new sprints
Oriented towards the user (use-cases)
Enables Release Planning
Copyright 2005 - Mountain Goat Software
Retrospective
At the end of each sprint, the team takes some time to think about what went well, what needs improvement, the ideas that came up and questions
Vote for the 3 most important things
Take one action to improve/maintain each voted item
Continuous improvement
Retrospective
At the end of each sprint, the team takes some time to think about what went well, what needs improvement, the ideas that came up and questions
Vote for the 3 most important things
Take one action to improve/maintain each voted item
Continuous improvement
Retrospective
At the end of each sprint, the team takes some time to think about what went well, what needs improvement, the ideas that came up and questions
Vote for the 3 most important things
Take one action to improve/maintain each voted item
Continuous improvement
Practices to take home todayPair Programming
Collective Code Ownership
Refactoring
Test Driven Development
Kanban
Standup Meeting
Time-boxing - Sprint
Backlog
Retrospective
Continuous Improvement
Communication
Courage
and agile values:
Thank you!
www.sarfata.org@[email protected]
Refactoring: Improving the design of existing code (Martin Fowler)
Let’s Play TDD Development (youtube)
Scrum and XP from the trenches
Scrum Guide