Monday 28 February 2011

Capturing Requirements with Use Stories





The title should describe an activity
The title of the story, “Account Holder withdraws cash”, describes an activity that the account holder wants to carry out. Until we implement this feature, the account holder won’t be able to withdraw money from the ATM. Once we have delivered it, they will. That gives us an obvious starting point for determining what “done” looks like.
If we had a title like “Account management” or “ATM behaviour”, we would have to look harder to understand when we were finished, and the edges would be a lot more fuzzy. For instance, “account management” might incorporate applying for a loan, and “ATM behaviour” might encompass changing the PIN number on my cash card. The story title should always describe actual behaviour by a user of the system.
The narrative should include a role, a feature and a benefit
The template “As a [role] I want [feature] so that [benefit]“ has a number of advantages. By specifying the role within the narrative, you know who to talk to about the feature. By specifying the benefit, you cause the story writer to consider why they want a feature.
It gets interesting if you find the feature won’t actually deliver the benefit attributed to it. This usually means you have a missing story. There is one story with the current feature, which delivers a different benefit (and is therefore still useful), and a hidden story whereby you will need a different feature to deliver the benefit described.
The example story tells us there is an Account Holder who cares about the feature being delivered, so we know where to start exploring what it should do.
The scenario title should say what’s different
You should be able to line up the scenarios side by side, and describe how they differ using only the title. In our example, we can see that the scenario descriptions say only what’s different between each scenario. You don’t need to say “an account holder withdraws money from an account with insufficient funds and is told they are unable to fulfill the transaction”. It’s obvious from the title whether this is the scenario you care about, compared to the others.
The scenario should be described in terms of Givens, Events and Outcomes
This is the single most powerful behavioural shift I have seen in teams adopting BDD. Simply by getting the business users, the analysts, the testers and the developers to adopt this vocabulary of “given/when/then”, they discover that a world of ambiguity falls away.
Not all scenarios are this simple. Some are best represented as a sequence of events, described as: given [some context] when [I do something] then [this happens] when [I do another thing] then [this new thing happens] and so on. An example is a wizard-style website, where you step through a sequence of screens to build up a complex data model. It is perfectly appropriate to intermingle sequences of events and outcomes, as long as you get into the habit of thinking in these terms.
One interesting emergent behaviour is that the quality of the conversation changes. You will quickly discover that you have missed out an assumed given (“well of course the account is overdrawn”), or forgotten to verify an outcome (“well naturally the account holder gets their card back”). I observed this on one particular project where the lead developer told me he could sense the analysts and developers were talking at cross purposes, but couldn’t see a way to demonstrate this to them. Within a few days of introducing the given/when/then vocabulary, he could see a dramatic improvement in the quality of their interactions.
The givens should define all of, and no more than, the required context
Any additional givens are distracting, which makes it hard for someone looking at the story for the first time – whether from the technical or business side – to understand what they need to know. Similarly any missing givens are really assumptions. If you can get a different outcome from the givens provided, then there must be something missing.
In the example, the first scenario says something about the account balance, the card and the ATM itself. All of these are required to fully define the scenario. In the third scenario, we don’t say anything about the account balance or whether the ATM has any money. This implies that the machine will retain the card whatever the account balance, and whatever the state of the ATM.
The event should describe the feature
The event itself should be very simple, typically only a single call into the production code. As discussed above, some scenarios are more complicated than this, but mostly the scenarios for a story will revolve around a single event. They will differ only in the context (the givens) and the corresponding expected outcomes.
The story should be small enough to fit in an iteration
There are no hard and fast rules about how you do this, as long as you break it down into demonstrable chunks. In general if there are more than about five or six scenarios, a story can probably be broken down by grouping similar scenarios together.
We can’t tell from the ATM example how many more scenarios there are for this story, but I am suspicious that there may be several more. Essentially we have three “moving parts” in this story, namely the account balance, the status of the cash card and the state of the ATM. We could get into more detail with the cash card: what if it is out of date, so I can’t use it to withdraw cash but the ATM still returns it to me? What if the ATM breaks partway through the transaction? What if my account has an overdraft facility?

Monday 21 February 2011

From Product Backlog to Release- Following an ASDL

Following an ASDL- Agile System Development Lifecycle Practices in order to take us from a set of features stored in a product backlog to a Successful Release into production.

Proposed Practice: SCRUM

Characteristics:

Scrum is a process skeleton that contains sets of practices and predefined roles.
What is SCRUM:
Scrum is an iterative, incremental methodology for project management often seen in agile software development, a type of software engineering.

The main roles in Scrum are:
  1. the “ScrumMaster”, who maintains the processes (typically in lieu of a project manager)
  2. the “Product Owner”, who represents the stakeholders and the business
  3. the “Team”, a cross-functional group of about 7 people who do the actual analysis, design, implementation, testing, etc.
I will discuss the mechanics of the Scrum later in this posting. I would like to focus now, on the process by which we work together in order to bring our project backlog to sprints and to releases.

SCRUM IMAGE HERE:


A couple of concepts:
What is a Product Backlog:

Source: http://www.axosoft.com/
 The product backlog is a high-level WHISH  LIST that is maintained throughout the entire project. It aggregates backlog items: broad descriptions of all potential features, prioritized as an absolute ordering by business value. It is therefore the “What” that will be built, sorted by importance.


RELEASE BACKLOG:

Source: http://www.axosoft.com/
 It is open and editable by anyone and contains rough estimates of both business value and development effort. Those estimates help the Product Owner to gauge the timeline and, to a limited extent prioritize. For example, if the “add spellcheck” and “add table support” features have the same business value, the one with the smallest development effort will probably have higher priority, because the ROI (Return on Investment) is higher.
The Product Backlog, and business value of each listed item is the property of the product owner. The associated development effort is however set by the Team.


ESTIMATING:
Source: http://www.axosoft.com/
SPRINT:

During each “sprint”, typically a two to four week period (with the length being decided by the team), the team creates a potentially shippable product increment (for example, working and tested software). The set of features that go into a sprint come from the product “backlog”, which is a prioritized set of high level requirements of work to be done. Which backlog items go into the sprint is determined during the sprint planning meeting. During this meeting, the Product Owner informs the team of the items in the product backlog that he or she wants completed. The team then determines how much of this they can commit to complete during the next sprint, and records this in the sprint backlog.[4] During a sprint, no one is allowed to change the sprint backlog, which means that the requirements are frozen for that sprint. Development is timeboxed such that the sprint must end on time; if requirements are not completed for any reason they are left out and returned to the product backlog. After a sprint is completed, the team demonstrates how to use the software.


Source: http://www.axosoft.com/

Sprint backlog
The sprint backlog is the list of work the team must address during the next sprint. Features are broken down into tasks, which, as a best practice, should normally be between four and sixteen hours of work. With this level of detail the whole team understands exactly what to do, and potentially, anyone can pick a task from the list. Tasks on the sprint backlog are never assigned; rather, tasks are signed up for by the team members as needed, according to the set priority and the team member skills. This promotes self-organization of the team, and developer buy-in.
The sprint backlog is the property of the team, and all included estimates are provided by the Team. Often an accompanying task board is used to see and change the state of the tasks of the current sprint, like “to do”, “in progress” and “done”.

Burn down

It should not be confused with an earned value chart.



Scrum enables the creation of self-organizing teams by encouraging co-location of all team members, and verbal communication between all team members and disciplines in the project.
A key principle of Scrum is its recognition that during a project the customers can change their minds about what they want and need (often called requirements churn), and that unpredicted challenges cannot be easily addressed in a traditional predictive or planned manner. As such, 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.
Like other agile development methodologies, Scrum can be implemented through a wide range of tools. Many companies use universal software tools, such as spreadsheets to build and maintain artifacts such as the sprint backlog. There are also open-source and proprietary software packages dedicated to management of products under the Scrum process. Other organizations implement Scrum without the use of any software tools, and maintain their artifacts in hard-copy forms such as paper, whiteboards, and sticky notes.[5]

Roles


Scrum teams consist of three core roles and a range of ancillary roles—core roles are often referred to as pigs and ancillary roles as chickens after the story The Chicken and the Pig.



 Core Scrum roles

The core roles in Scrum teams are those committed to the project in the Scrum process—they are the ones producing the product (objective of the project).
Product Owner
The Product Owner represents the voice of the customer and is accountable for ensuring that the Team delivers value to the business. The Product Owner writes customer-centric items (typically user stories), prioritizes them, and adds them to the product backlog. Scrum teams should have one Product Owner, and while they may also be a member of the Development Team, it is recommended that this the role not be combined with that of ScrumMaster.[6]
Team
The Team is responsible for delivering the product. A Team is typically made up of 5–9 people with cross-functional skills who do the actual work (analyse, design, develop, test, technical communication, document, etc.). It is recommended that the Team be self-organizing and self-led, but often work with some form of project or team management.
ScrumMaster
Source: http://www.axosoft.com/
Scrum is facilitated by a ScrumMaster, also written as Scrum Master, who is accountable for removing impediments to the ability of the team to deliver the sprint goal/deliverables. The ScrumMaster is not the team leader but acts as a buffer between the team and any distracting influences. The ScrumMaster ensures that the Scrum process is used as intended. The ScrumMaster is the enforcer of rules. A key part of the ScrumMaster’s role is to protect the team and keep them focused on the tasks in hand. The role has also been referred to as servant-leader to reinforce these dual perspectives.

 

Ancillary Scrum roles

The ancillary roles in Scrum teams are those with no formal role and infrequent involvement in the Scrum process—and must nonetheless be taken into account.
Stakeholders (customers, vendors)
These are the people who enable the project and for whom the project will produce the agreed-upon benefit[s], which justify its production. They are only directly involved in the process during the sprint reviews.
Managers (including Project Managers)
People who will set up the environment for product development.

 Meetings


This entails the following Planning level tasks:
- Organize Features- Defects, New Features
- Prioritize features- according to strategic vision and value
- Sprint Planning Meeting-to select work items per iteration ( at this point each feature is estimated)

Sprint Planning Meeting[8][9]
At the beginning of the sprint cycle (every 7–30 days), a “Sprint Planning Meeting” is held.
  • Select what work is to be done
  • Prepare the Sprint Backlog that details the time it will take to do that work, with the entire team
  • Identify and communicate how much of the work is likely to be done during the current sprint
  • Eight hour time limit
    • (1st four hours) Product Owner + Team: dialog for prioritizing the Product Backlog
    • (2nd four hours) Team only: hashing out a plan for the Sprint, resulting in the Sprint Backlog
At the end of a sprint cycle, two meetings are held: the “Sprint Review Meeting” and the “Sprint Retrospective
Sprint Review Meeting[10]
  • Review the work that was completed and not completed
  • Present the completed work to the stakeholders (a.k.a. “the demo”)
  • Incomplete work cannot be demonstrated
  • Four hour time limit
Sprint Retrospective[11]
  • All team members reflect on the past sprint
  • Make continuous process improvements
  • Two main questions are asked in the sprint retrospective: What went well during the sprint? What could be improved in the next sprint?
  • Three hour time limit

The end to end process:












Thursday 17 February 2011

Agile Deep Dive...


Below, my Mind Map on the Agile basic principles that I find are easier to implement.

The Deep Dive is useful to bring team members up to par on the simplest processes of Agile and on the benefits of its implementation.

oh! one more thing: Mind Maps Rock! I think I will build a blog in order to share the mindmaps that I have built over the years. Maybe...



Wednesday 16 February 2011

The Bridge to Agility...

Transitioning from a Waterfall IT Manager mindset into a disciplined Agile PM role.

Personally, brought up  in a different country,  I started moving places across the world as a young adult while going through my Economics degree at university. The exposure to new cultures, ways of living and beliefs made me who I am today, and makes me think of myself as a person with an agile mind & heart.

Professionally, as an IT consultant, I was trained in the Waterfall world where project scope was RIGID and the triangle of scope, resources and timeline has a wide and solid  base that does not change over time. Delivery was done on a big bang approach where you tried to bundle as much functionality as promises to the product owner and iterative development was not even part of the consulting jargon of then. The PM role was then synonym of a command-and-control PM. Yes, this was well before the Agile manifesto was created...

The bridge to Agility:  four years ago, I initiated my Business Intelligence career in one of my consulting assignments. It was then quite apparent that BI with its unique nature, challenges and required best practices, was quite peculiar and that product owners had to be involved earlier and often.

I then started researching ad reading on the methodology of iterative waterfall and disciplined agile.
The Agile world was then ( 2008)  becoming the Esperanto of the Project delivery methodology, gaining territory over waterfall  sucess delivery rate.



Agile  project management does not need a command-and-control project manager. Agile teams need a facilitator that enables by removing any impediments,  risk-assessing, team-advocate project manager.
Agile project management is a key role bridging the transition from waterfall to an agile place. Agile teams needs someone who enables the team. I have embraced that agile project manager!

At a minimum the least of the Agile projects should practice the items below:

Developed by Isabel Pereira
with MindManager

 I will expand on each of these items in subsequent posts.
IP


Agile reading List

Author
Agile Game Development with ScrumKeith, Clinton
Agile Product Management with ScrumPichler, Roman
Agile Retrospectives: Making Good Teams GreatEsther Derby
Agile Software RequirementsLeffingwell, Dean/ Widrig, Don
Behind Closed Doors: Secrets of Great Management (Pragmatic Programmers)Esther Derby
Brownfield Application Development in .NetDonald Belcham
Certain to Win: The Strategy of John Boyd, Applied to BusinessChet Richards
Coaching Agile TeamsAdkins, Lyssa
Configuration Management Best PracticesAiello, Bob/ Sachs, Leslie
Continuous DeliveryHumble, Jez/ Farley, David
Domain Driven DesignEric Evans
Fearless ChangeLinda Rising
Manage Your Project Portfolio: Increase Your Capacity and Finish More ProjectsJohanna Rothman
Managing Software DebtChris Sterling
Practical Guide to Distributed ScrumWoodward, Elizabeth/ Surdek, Steffan/ Ganis, Matthew
Refactoring to PatternsJoshua Kerievsky
Succeeding with AgileCohn, Mike
Teamwork Is an Individual Skill: Getting Your Work Done When Sharing ResponsibilityChristopher Avery Ph.D.
The Jazz ProcessAdrian Cho
Working Effectively with Legacy CodeMichael Feathers
xUnit Test PatternsGerard Meszaros
Author
Agile Game Development with ScrumKeith, Clinton
Agile Product Management with ScrumPichler, Roman
Agile Retrospectives: Making Good Teams GreatEsther Derby
Agile Software RequirementsLeffingwell, Dean/ Widrig, Don
Behind Closed Doors: Secrets of Great Management (Pragmatic Programmers)Esther Derby
Brownfield Application Development in .NetDonald Belcham
Certain to Win: The Strategy of John Boyd, Applied to BusinessChet Richards
Coaching Agile TeamsAdkins, Lyssa
Configuration Management Best PracticesAiello, Bob/ Sachs, Leslie
Continuous DeliveryHumble, Jez/ Farley, David
Domain Driven DesignEric Evans
Fearless ChangeLinda Rising
Manage Your Project Portfolio: Increase Your Capacity and Finish More ProjectsJohanna Rothman
Managing Software DebtChris Sterling
Practical Guide to Distributed ScrumWoodward, Elizabeth/ Surdek, Steffan/ Ganis, Matthew
Refactoring to PatternsJoshua Kerievsky
Succeeding with AgileCohn, Mike
Teamwork Is an Individual Skill: Getting Your Work Done When Sharing ResponsibilityChristopher Avery Ph.D.
The Jazz ProcessAdrian Cho
Working Effectively with Legacy CodeMichael Feathers
xUnit Test PatternsGerard Meszaros

Agile Business Intelligence

Agile Business Intelligence