Back To Basics: Agile Practices

Post on 08-May-2015

241 views 2 download

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 of Back To Basics: Agile Practices

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

http://AgileManifesto.org

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@sarfatathomas@sarlandie.net

Refactoring: Improving the design of existing code (Martin Fowler)

Let’s Play TDD Development (youtube)

Scrum and XP from the trenches

Scrum Guide