3. Agile Development Practices are
geared towards…
• Shorter feedback cycles
• Creation of safety nets
• Allowing teams to learn by failing fast
4.
5.
6. What did I do
yesterday ?
What am I doing
today ?
Is there anything
blocking me ?
Yesterday I started
the Login story #42
Today I plan to
finish the same
story
I will need a pair to help
me understand the
Authentication Service
API
Talking
Token
7. Effective Standup Meetings
• Open forum for everyone to communicate daily status and progress
of work
• Take place near a story wall
• Short and quick
• Help in identifying obstacles
• Help in setting direction for the whole team
• Everyone is attentive.
8. Standup Antipatterns
• Long standup meetings
• A leader drives the standup
• People only look at the leader while talking
• People are often late to the standup
14. I would suggest
we refactor this
service to allow
injection of
dependencies
Alright… Let me
try writing a
failing test for it
then…
15. Benefits of Pair Programming
• Continuous code review
• Problem Solving
• Better Design
• Training newcomers on the codebase
• “Pair Pressure” ensures more discipline and less disturbances
• Builds collective ownership of the codebase
18. Write a Test
Check
if test
fails
Write
production
code
Run all
tests
Clean up Code
Test
fails
Test
succeeds
Test(s) fail
All
tests
pass
Source : http://en.wikipedia.org/wiki/Test-driven_development
19. [Test]
public void Should_Get_Full_Name()
{
var contact = new Contact {FirstName = “Donald", LastName = “Duck"};
Assert.That(contact.FullName, Is.EqualTo(“Duck, Donald"));
}
A Simple Unit Test Case
21. You know
when you
are done !
You can take
small
incremental
steps
An
effective
safety
net
Helps
drive your
design
Benefits of TDD
22. Acceptance Tests
Test the entire system from end to end (rather than testing a
single class)
Written by Devs and QAs (pairing)
Effective safety net when run with continuous integration
Used to certify the quality of build.
Leveraged for performance/load testing
23. public void verifyCashFlow() throws Exception {
DateTime disbursalDate = systemDateTime.plusDays(1);
int installment = 5;
int cashFlowIncremental = 1;
DefineNewLoanProductPage.SubmitFormParameters formParameters =
FormParametersHelper.getWeeklyLoanProductParameters();
String loanProductName = formParameters.getOfferingName();
int frequency = formParameters.getFreqOfInstallments();
createAndValidateLoanProductWithCashFlow("99.99",formParameters);
new NavigationHelper(selenium).navigateToHomePage();
loanTestHelper.
navigateToCreateLoanAccountEntryPageWithoutLogout(clientName,loanProductName).
setDisbursalDate(disbursalDate).
setInstallments(installment).
clickContinueToNavigateToCashFlowPage().
validateCashFlowMonths(disbursalDate,installment,frequency).
enterValidData(cashFlowIncremental).
clickContinue().
verifyCashFlow(cashFlowIncremental);
}
27. Compile
Run Unit Tests
Run Functional
Tests
Release Candidate
Installer
UAT
Environments
Trigger Build
Story
Checkin
QA + Dev
(Pair)
Trigger
Deployment
Dev Pair
32. Design in Agile
• Part of each story and pairing session
• Constant refactoring of existing code.
• Dev huddles, architecture white boarding, group refactoring
sessions
• Made visible on flipcharts near the team area
33.
34.
35. “This class is getting too messy,
we need to refactor this at some
point ”
“We have a very tight deadline for
this release”
“We don’t have time for design”
“We must try to ship now and
deal with consequences later”
36.
37. Managing Technical Debt
• Continuously prioritize Technical Debt during the release.
• Slot them as stories / tasks within an iteration
• Make relevant stakeholders aware of the debt being piled up
because of time constraints
• Keep a constant check .. The longer you keep a debt.. The
more interest you pay !
38. Quick References
C2 Wiki (http://c2.com/)
Martin Fowler’s Bliki (http://martinfowler.com/bliki/)
Its not just standing up
(http://martinfowler.com/articles/itsNotJustStandingUp.html)
Ron Jeffries (http://xprogramming.com)