Agile development

Post on 28-Nov-2014

246 views 0 download

Tags:

description

 

Transcript of Agile development

Agile Development

We want to build software,but how do we go about doing that?

Waterfall Development

Waterfall Development

• This is the way industrial engineers built concrete items. It works great.

• We want to build software, and this is a terrible idea.

Waterfall Development

{side story about the USPS}

The average software project fails; therefore,we must strive for excellence.*

The average software project fails; therefore,we must strive for excellence.*

-paraphrased from Chef Gordon Ramsay talking about restaurants

What is Agile?

Agile manifesto

Proposed by Kent Beck, Martin Fowler, et al.

What is Agile?

Agile manifesto

Individuals and interactions over processes and toolsWorking software over comprehensive documentationCustomer collaboration over contract negotiationResponding to change over following a plan

What is Agile?

Agile manifesto

Individuals and interactions over processes and toolsWorking software over comprehensive documentationCustomer collaboration over contract negotiationResponding to change over following a plan

There is value in the items on the right, but more value in the item on the left.

What is Agile?

Various methodologies:• Scrum• eXtreme Programming (XP)• Lean

Customer satisfaction by rapid delivery of useful software

Customer satisfaction by rapid delivery of useful softwareRapid delivery means weeks – not months.Useful software means a noticeable difference.

Welcome changing requirements, even late in development.

Welcome changing requirements, even late in development.

Welcome changing requirements, even late in development

Requirements change b/c:Business needs changeUnderstanding changes (yours & theirs)Problems solve themselves or require a new approachCompetitors pop-up

Welcome changing requirements, even late in development

When requirements or understanding changes, you are free to re-estimate time restraints and put the feature off for another iteration.

Working software is delivered frequently (weeks rather than months)

Working software is delivered frequently (weeks rather than months)

Notice the word “working.” If you rollout weekly, you’ll quickly learn to test early and often rather than putting it off.

Working software is delivered frequently (weeks rather than months)

In order to achieve weekly releases, you must break large problems into smaller problems.

You also focus on the really important problems.

Working software is the principal measure of progress

Working software is the principal measure of progress.

Users can see and understand working software. They can also see what isn’t working. There is no better metric.

Working software is the principal measure of progress.

“Almost done” is useless for the customer.

Sustainable development, able to maintain a constant pace.

Sustainable development, able to maintain a constant pace.

Burnout is a real concern amongst developers. Limit overtime work.

Close, daily cooperation between business people and developers.

Close, daily cooperation between business people and developers.

Even if it’s just 5 minutes, daily talks are critical. You don’t want to build excess software.

Face-to-face conversation is the best form of communication (co-location).

Face-to-face conversation is the best form of communication (co-location).

Let’s face it, face-to-face is best. You can read mannerisms and tone of voice. You need the feedback.

Projects are built around motivated individuals, who should be trusted.

Projects are built around motivated individuals, who should be trusted.

If you can’t trust them, they shouldn’t be working with you.

Projects are built around motivated individuals, who should be trusted.

“Oh, Larry is working on it? You’ll have to make him do it.”

Continuous attention to technical excellence and good design.

Continuous attention to technical excellence and good design.

Shortcuts will destroy you. I spent 3 weeks building a “shortcut” that should have taken 3 days. Now I have bad software that took longer to deliver.

Continuous attention to technical excellence and good design.

Use design patterns (where appropriate), take advantage of the language’s features, etc.

Simplicity—the art of maximizing the amount of work not done—is essential

Simplicity—the art of maximizing the amount of work not done—is essential.

Plans change, understanding changes, and simple things are easier to test.

Quit building things that you won’t need.

Self-organizing teams

Self-organizing teams

A “team” isn’t just a group of people with a common assignment. They should have a common spirit and exercise individuals’ strengths.A good team “jells” well.

-Peopleware

Self-organizing teams

A self-organized team requires no job titles. Job functions overlap, and everyone just falls into place.

Self-organizing teams

A self-organized team requires no job titles. Job functions overlap, and everyone just falls into place.

They look for work rather than wait for it to be assigned.

Regular adaptation to changing circumstances.

Regular adaptation to changing circumstances.

Things will change:requirementsteam membersleadership/directionfunding

How do I start implementing agile?

Agile development should make things easier. Slowly implement techniques starting with your own work. Then move it out to the team.

How do I start implementing agile?

• Get “buy-in” from the user (customer, another department, whoever).

• Testing (TDD).• Version control (git, subversion).• Break the large problems into small problems

and rank let the customer rank them with priority.

How do I start implementing agile?

Get “buy-in” from the user

Meet with the a user, pick a small feature, implement it in a week or two. Do it again.

How do I start implementing agile?

Test:unit testsregression testsacceptance tests

How do I start implementing agile?

Version control:

Use git, mercurial, subversion, etc.

How do I start implementing agile?

Break the large problems into small problems and rank them with priority.

Sit with the user and break feature requests into smaller requests, make time estimates, and let the user rank them with priority.

Wrap Up

Books on Agile

Thanks!

Name: David Haskins

Connect with me on LinkedIn: davidhaskins@ieee.org