agile development practices
for sustainable software development
by Ibrahim El-Etr & Mohamed Ragab
Orange Labs Cairo
Speakers
-
Ibrahim El-Etr
Head of Program Management in Orange Labs Cairo
Former head of Mobile Applications and Software Development in Orange Labs Cairo
-
Mohamed Ragab
Head of Technology, and an Agile Development Coach in Orange Labs Cairo
Ibrahim is currently the Head of Program Management in Orange Labs Cairo, and a MBA student in the German University in Cairo. Ibrahim joined Orange Labs as the Head of Software Development in 2006.
Ibrahim has 8 years of solid management experience, leading several teams to deliver several portfolios of software products to market. He has over 21 years of software development experience associated with highly diversified portfolio of international companies in different culture environments such as Orange, Telepin, Airwide solutions, Mitel networks, Nortel networks, and Newbridge (Alcatel Lucent). He spent the first 15 years of his career working for start up companies including owning his own business.
Entrepreneurship is part of his DNA and he brings that outlook and method of work to every team he works with.
Mohamed Ragab is currently the Head of Technology, and an Agile Development Coach in Orange Labs Cairo. He joined Orange Labs as a Senior Software and Service Architect in 2009. Mohamed has more than 15 years of experience building software systems in a wide range of industrial domains, in small local companies as well as large multi-national organizations. Mohamed has experience delivering projects with small collocated teams of a few developers to large distributed teams with a few hundred developers on board.
Mohamed's expertise is in the Java platform, Open Source technology stacks, software development infrastructure and automation, and Agile Development Methodologies.
Agenda
- State of affairs
- Agile development methodologies
- From the trenches
- Wrapping up
- Discussion
Show of hands
-
How do you relate yourself to software development?
Testing
Development
Management
Marketing
Customer
Show of hands
-
What is your current role in Agile software development?
Product Owner
Scrum Master
Tester
Developer
Customer
Not remotely related!
State of affairs
in the young industry of software
The Standish Group Report
"chaos report"
- The scope of software project failures.
- The major factors that cause software projects to fail.
- The key ingredients that can reduce project failures.
Report: shows (1995)
- 31.1% of projects will be cancelled before they ever get completed
- 52.7% of projects will cost 189% of their original estimates
- The lost opportunity costs are not measurable, but could easily be in the trillions of dollars
- The failure to produce reliable software to handle baggage at the new Denver airport is costing the city $1.1 million per day.
report: projects' resolutions (2013)
2004
2006
2008
2010
2012
Successful
29%
35%
32%
37%
39%
Failed
18%
19%
24%
21%
18%
Challenged
53%
46%
44%
42%
43%
Report: Factors of Success
- (20) Executive management support
- (15) User involvement
- (15) Optimization
- (13) Skilled resources
- (12) Project management expertise
- (10) Agile process
- (6) Clear business objectives
- (5) Emotional maturity
- (3) Execution
- (1) Tools and infrastructure
Standish report 2013 page 7
http://www.versionone.com/assets/img/files/CHAOSManifesto2013.pdf
Report: features usage
- 20% of features are used often
- 30% of features and functions get used sometimes or infrequently
- 50% of features are hardly ever or never used.
the Bottleneck in software development
“Walking on water and developing software from a specification are easy if both are frozen” by: Edward V. Berard
Learning is the Bottleneck
What is the goal?
“Build the right thing, right”
- How do we know what "the right thing" is?
- Build it twice? ... too expensive
- Build one small piece at a time, and learn
- Iterate, and get feedback
Software is like ...
a manufacturing process
building construction
no it's not
Software is like ...
product design process
gardening!
that's more like it
late project ..
What to do?
“adding manpower to a late software project makes it later”
Fred Brooks in his book The Mythical Man-Month 1975
Agile development methodologies
Lean software development (LSD)
- A translation of lean manufacturing and lean IT principles and practices
- Adapted from the Toyota Production System
- Lean Software Development: An Agile Toolkit, by Mary Poppendieck and Tom Poppendieck, 2003
http://en.wikipedia.org/wiki/Lean_software_development
http://www.poppendieck.com/
http://www.amazon.com/Lean-Software-Development-Agile-Toolkit-ebook/dp/B00HEL13HW/
Lean Software Development: An Agile Toolkit
May 18, 2003
by Mary Poppendieck, Tom Poppendieck
http://en.wikipedia.org/wiki/Lean_manufacturing
Essentially, lean is centered on making obvious what adds value by reducing everything else.
"lean manufacturing." Taiichi Ohno, and Eiji Toyoda developed the system between 1948 and 1975
Lean software development
Lean principles
- Eliminate waste
- Amplify learning
- Decide as late as possible
- Deliver as fast as possible
- Empower the team
- Build integrity in
- See the whole
Deliver as fast as possible
The sooner the end product is delivered without major defects, the sooner feedback can be received, and incorporated into the next iteration.
Empower the team
the managers tell the workers how to do their own job
find good people and let them do their own job
Extreme Programming (xp)
A software-development discipline that organizes people to produce higher-quality software more productively
Extreme Programming Explained, by Kent Beck, 1999
XP Practices ..
- Pair programming
- Planning game
- Test-driven development
- Continuous integration
- Refactoring
- Small releases
- Coding standard
- Collective code ownership
- Simple design
- Sustainable pace
Agile Manifesto (2001)
Individuals and interactions over processes and tools Working software over comprehensive documentationCustomer collaboration over contract negotiationResponding to change over following a plan
Agile Manifesto Principles
- Early and continuous delivery of valuable software
- Welcome changing requirements
- Deliver working software frequently
- Business people and developers must work together
- Build projects around motivated individuals
- Face-to-face conversation
Agile Manifesto Principles
- Working software is the primary measure of progress
- Sustainable development, maintain a constant pace indefinitely
- Continuous attention to technical excellence and good design
- Simplicity, maximizing the amount of work not done
- The best architectures, requirements, and designs emerge from self-organizing teams
- At regular intervals: reflect, then tune and adjust accordingly
Scrum
In 1995, Jeff Sutherland and Ken Schwaber jointly presented a paper describing the Scrum methodology at OOPSLA '95
In 2001, Schwaber worked with Mike Beedle to describe the method in the book Agile Software Development with Scrum
Scrum
Scrum is an iterative and incremental agile software development framework for managing product development
Scrum adopts an empirical approach—accepting that the problem cannot be fully understood or defined, focusing instead on maximizing the team's ability to deliver quickly and respond to emerging requirements
Scrum
-
Roles: Product Owner, Development Team, Scrum Master
-
Events: Sprint, Sprint planning meeting, Daily scrum, Sprint review & retrospective, Backlog refinement meeting
-
Artifacts: Product backlog, Sprint backlog, Product increment
-
Progress: Burndown chart, Burnup chart
-
Def. of Done: Backlog item, Sprint, Release
-
Relative Sizing: Story points, using a rounded Fibonacci sequence
Kanban
Kanban is a method for managing knowledge work with an emphasis on just-in-time delivery while not overloading the team members
Kanban
- Map your current process
- Define the start and end points for the Kanban system
- Agree on initial work in progress (WIP) limits
- Agree on a process for prioritising and selecting items
- Agree on frequency of reviews
- Draw the board and start using
- Tune as you go
Planning
- Identify your pains
- Understand the main components of your organization
- Identify your goals
- Then put your strategy for the adoption process
management and engineering practice
Cost and Cycle time
- We are either writing new code, or modifying existing code
- As a software system grows in size: how does this affect maintenance cost and cycle time?
- Technical dept due to: taking shortcuts, learning, changing requirements
Refactoring
Refactoring is: improving the design of existing code, without changing its behaviour
- But, how can we be sure the behaviour doesn't change?
- Test the entire system after any refactoring .. cost & time
Testing
- Do the developers test the code before handing it to the testers?
- Why do the developers hand the code to the testers?
- Is there any duplication?
- How big is the feedback cycle?
Seconds, Minutes, Hours, Days, Weeks, Months
- How does the development scale over time?
- How does this affect the cycle time?
- Cost of maintaining a software system
Automated Testing
We are in the business of automating stuff
- Input > Process > Output
- To test a Process
- Control Input
- Compare actual Output against expected
- Testing framework
- Test Driven Development (TDD)
- Red > Green > Refactor
TDD Practices
- Start from a Red test
- Don't stay Red more than 5 minutes
- A test should be simple, doesn't need a test to test the test
- Treat the test code as first class citizen: readability, maintainability, code reviews
- Trust the tests
- Testing is just sampling
TDD Practices
- Don't write redundant tests
- A full test run should not take more than 5 minutes
- Separate unit tests from integration tests (fast and slow)
- Unit Tests: fast, run in memory, repeatable (no randomness, no external dependencies)
- Integration Tests: slow, integrate with external dependencies
- If a test is failing, one should not work on anything else other than fixing it
Day to day workflow
- Checkout
- Run tests
- Green?: add a new feature (red, green, refactor)
- Checkin a working product increment with all tests green
Behaviour driven development
- Runnable software specification
- Specification with concrete examples
- Engage the Product Owner, the Tester, and the Developer(s)
- Can be used in a discussion with the customer
- A number of supporting software frameworks
BDD: Gherkin language
Scenario: Some determinable business situation
Given some precondition
And some other precondition
When some action by the actor
And some other action
And yet another action
Then some testable outcome is achieved
And something else we can check happens too
Continuous integration
- A build server
- Build jobs are triggered upon any code modification in version control
- Runs the unit tests, integration tests, and BDD scenarios
- Runs the code through static analysis tools
- Provides feedback on the stability of the software after each build
Culture
- Culture eats strategy for lunch, but pain helps
- Is it leadership culture or Command and control culture
- Customer driven organization
- The barriers are in our minds, we change only if we try.
- Openness, willingness to listen to new ideas even if it contradicts with your experience and expertise
- Agile sounds weird, really!! well give it a try
- Then Mindset and the people
People will be in three categories
- Believers, choose your horses
- Non-believers, success by example, bring more to your side
- Not convinced but can give it a try, help them to experiment and join
Self organized team
- It is a joy, but it is not for free: more liability
- Self discipline
- Eliminating waste
Visibility
- Detect week signals, and act on them , the Frog will be broiled when you heat the water gradually.
- Agile development does not create the problem, it just makes it more visible
Ownership
- Obligation and Blame - Finger pointing culture
- Taking ownership
Giving-up control
- I am the technical lead, I always know how to do it better
- I am the manager, I love the command and control style, and I don't know any other way
Trust
- If you do not trust your team, agile is not for you
- Are they working enough?!
- How can we measure their productivity?!
- Can another team finish it is less time?!
Win together
- Single players versus team players
- One evaluation, share success and absorb the failure
Team Structure
- Cross functional teams
- Pick your scrum master
- Pick your product owner
- Deal with
-
Project mangers: you can be a maker, no longer management overhead
-
Team leads: you can be great scrum master, lead by example, use soft power
Learning
- Agile development without engineering practices is a dead end
- How to evolve your design, and code
- Refactoring is not a debt
- Develop for customer, build thin vertical slices, not easy to do
Contracting
- Agile contracts
- Customers are not interested, why?
- Minimal valuable product
- Applying agile development, even if it is a fixed contract
- Engage the customer
Who moved my cheese
- Can you stretch your comfort zone
- Incremental change, small but sustainable
self-organizing teams
- Start with one team, you need to plant the first tree, be realistic
- Team competence
- Engineering practices
- Work on conflict while applying the change
- Remove obstacles
Keep trying
- Invest time and means to achieve your targets
- 69% of the fuel is used while Rocket is in take off phase
there is no silver bullet ..
- There will be failures, use them well
- Make things visible
- There will be successes, use them well
- Agile development exposes the issues that are already there
- Can you handle the feedback
there is no silver bullet ..
- We succeed together, or we fail together
- If you don't trust your team, Agile is not for you
- Unlearn, learn, practice, and evolve
- Beware of: not enough training
- Be Agile adopting Agile
questions
http://mragab.github.io/amecse