Agile Development

CSC-430

Phillip Wright

Agile Development

As mentioned previously, the Agile methodology is an iterative development process that is designed (in theory) to allow engineers to more accurately estimate their work and respond to unexpected changes.

History

Seventeen people went on a skiing trip and, by the end, decided they had figured out the proper way to develop software.

(This is not a joke)

History II

At the end of their trip, they published The Agile Manifesto, explaining how to properly develop software.

For some reason, it became a buzzword in the industry and everyone had to “do Agile.”

(Though, more often than not, they aren’t actually “doing Agile”)

Anti-Manifesto Manifesto

Be skeptical of anyone peddling manifestos.

Supporting Research

crickets chirp in the background

(more on this later)

Why Are We Learning It

  • It’s in the course curriculum
  • It’s popular enough that you might benefit from learning it
  • There might be some bits and pieces worth thinking about

Gathering Requirements

It is difficult to gather requirements, because

  • We make assumptions
  • Clients may not know what they really want
  • Details will be missing

Feedback

In order to reduce the impact of our inability to gather accurate requirements, we will attempt to add continuous feedback to our development process.

Feedback II

We should start obtaining feedback as soon as possible.

In the Agile world, this means as soon as we have a minimum working product.

Sprints

In order to ensure our ability to get continuous feedback, we must be able to deliver working releases of our product to the client.

To accomplish this, we will divide our work into small, “complete” subsets of functionality called “sprints.”

Sprints II

Sprints should be very limited in scope and should always result in working, buildable, and releasable code.

Ideally, your project should build without failure from the beginning and every single commit should do the same.

Sprints III

By limiting the scope of a sprint and by ensuring that our project always builds, we can more easily provide clients with regular, functioning builds to review and to use for providing feedback.

Sprints IV

How do we create these sprints, though?

Gathering Requirements II

First, we want to gather general ideas about what the product should do.

Gathering Requirements III

Next, we should discuss what we think we understand about the project with the client. We should:

  • Confirm any assumptions
  • Obtain any missing details
  • Ask if, in light of the discussion, there are any additional requirements.

Gathering Requirements IV

To help ensure that we don’t miss anything, we may want to brainstorm with the customer. No ideas should be off limits. The goal is to obtain the absolute ideal requirements assuming no limits.

User Stories

Once we have gathered enough informtion from the client, we will create high level user stories to capture the requirements. These should be:

  • Short
  • Focused
  • Customer driven
  • From the customer’s perspective

User Stories II

Once we have all of our user stories, we will estimate the level of effort required to implement each, then prioritize them (with the customer).

Then we simply select user stories from this list to fill the time period of our sprint (often a couple of weeks).

Estimation

How, though, do we estimate the level of effort for our user stories?

We use planning poker.

Planning Poker

All team members sit around a table with “poker cards.”

Each card has a time estimate written on it.

The team discusses a user story and everyone “plays” the amount of time they estimate the story will take.

Planning Poker II

If there is no consensus, then the team discusses their estimates and they play another round.

This is continued until a consensus is reached (or until everyone gets tired of arguing with the guy who refuses to change his mind).

Planning Poker III

Then, magically, the consensus opinion is an accurate estimate.

(This is not a joke)

Planning Poker IV

Why might this not work?

When might it work?

Supporting Research II

It appears that many reports about the benefits of Agile development fall into one of two categories:

  • Teams that went from no process to agile development
  • Teams consisting of very competent members.

For everyone else, the studies that exist don’t seem to support the hype.

The Good Parts

  • Since we are bad at gathering requirements, it’s probably wise to expect misunderstandings and obtain feedback
  • Treating every two week period as a “release” of “complete” code is probably beneficial, because having code that always builds cleanly makes development and maintenance easier.