@gil_zilberfeld
A horror story
@gil_zilberfeld
Hello!
I AM GIL ZILBERFELD
www.gilzilberfeld.com
www.everydayunittesting.com
@gil_zilberfeld
@gil_zilberfeld
What’s the story?
◉ Some theory
◉ Stakeholders
◉ Effective stories
◉ Slicing heuristics
◉ Examples
@gil_zilberfeld
Some theory…
It’s slicing all the way down
@gil_zilberfeld
@gil_zilberfeld
Smaller is better
Why?
@gil_zilberfeld
Testing
◉ Simpler to do the smaller it gets
◉ Easy to focus
◉ Easy to explore
@gil_zilberfeld
Shorter feedback cycles
◉ Ideas
◉ Products
◉ Releases
◉ Features
◉ Stories
@gil_zilberfeld
Ideas
Products
Releases
Features
Stories
MVPs
Small frequent releases
Minimal user journeys
Minimal functionality
Working testable functionality
Slicing down
@gil_zilberfeld
Pyramid slicing
@gil_zilberfeld
@gil_zilberfeld
Testicorn – A killer app
The ghost of the
testing unicorn
that terrorizes the
city of Potsdam
@gil_zilberfeld
@gil_zilberfeld
Stakeholder
“An individual, group, or
organization, who may
affect, be affected by, or
perceive itself to be affected
by a decision, activity, or
outcome of a project.”
@gil_zilberfeld
Stakeholders
◉ Users
◉ Customers
◉ Builders
◉ Regulators
◉ Bystanders
@gil_zilberfeld
Categorizing stakeholders
◉ Roles
◉ Jobs to be done (JTBD)
◉ What’s important for them?
◉ How does the product impact their lives?
@gil_zilberfeld
Who are the stakeholders of Airbnb?
@gil_zilberfeld
Exercise: Testicorn stakeholders
◉ List them
◉ Categorize them
◉ Rate them
@gil_zilberfeld
Let’s review!
@gil_zilberfeld
@gil_zilberfeld
@gil_zilberfeld
Goal
“A goal is a desired
result that a person or a
system envisions, plans
and commits to
achieve.”
@gil_zilberfeld
@gil_zilberfeld
Capability
“An ability to perform or
achieve certain actions or
outcomes through a set of
controllable and measurable
faculties, features, functions,
processes, or services.”
@gil_zilberfeld
Exercise: Stakeholders goals and capabilities
◉ What is important to our stakeholders?
◉ What do they want to achieve?
◉ What options do we have to meet the goals?
◉ Prioritize them
@gil_zilberfeld
Let’s review!
@gil_zilberfeld
Why do we need to slice stories?
@gil_zilberfeld
Questions about stories
◉ Are the stories ready for work?
◉ Do they fit in a sprint?
◉ How complex are they?
◉ What will we learn?
◉ What options do we have for implementation?
◉ Do we need to do a POC?
◉ Does the story have sub-stories?
@gil_zilberfeld
@gil_zilberfeld
Mind Map
“A diagram used to visually
organize information.”
@gil_zilberfeld
Mind maps
◉ A collaborative tool
◉ Usually a tree, but doesn’t have to be
◉ Helps in slicing stories and cases
◉ Helps in prioritizing what we’re going to build and
test
@gil_zilberfeld
Exercise: Slicing stories
◉ Review the story maps
◉ Create a mind map for stories
◉ What are the regular and special cases?
◉ What is the happy path? How do we know we’re
there?
@gil_zilberfeld
SFDIPOT – A slicing heuristic
@gil_zilberfeld
Exercise: Slicing stories
◉ Enhance the mind maps
◉ Think of the others aspects as well
◉ Types of users
◉ Types of complexity
◉ Types of “what ifs”
@gil_zilberfeld
Let’s review!
@gil_zilberfeld
Why do we call them stories anyway?
@gil_zilberfeld
@gil_zilberfeld
The template
As a …
I want a …
In order to …
@gil_zilberfeld
The template
As a killer unicorn
I want to get near a victim
In order to kill it
@gil_zilberfeld
What is the acceptance criteria?
@gil_zilberfeld
Give me an example!
@gil_zilberfeld
The template
As a killer unicorn
I need to be at least 12 steps
from a victim
In order to kill it
@gil_zilberfeld
Good user stories
Independent
Negotiable
Valuable
Estimable
Small
Testable Bill Wake, 2003
@gil_zilberfeld
Good user stories
Independent
Negotiable
Valuable
Estimable
Small
Testable
@gil_zilberfeld
Ron Jeffries said
As an author of the Agile Manifesto
I want that stupid story format to go away
So that people can get to the essence of user
stories
@gil_zilberfeld
“A story is a ticket for a conversation”
@gil_zilberfeld
@gil_zilberfeld
Better user stories
◉ Drop the template
◉ Tell the story in a sentence
◉ Anchor it
◉ Unveil the motive
@gil_zilberfeld
Better user stories
◉ Imagine the demo
◉ Give context
◉ The general rules
◉ Exception to the rules
@gil_zilberfeld
Exercise: Writing stories
◉ Write and present stories
◉ What are the essential parts?
◉ What must work?
◉ What are the fail safes?
@gil_zilberfeld
@gil_zilberfeld
@gil_zilberfeld
Thanks!
ANY QUESTIONS?
You can find me at:
@gil_zilberfeld
http://www.GilZilberfeld.com
http://www.EverydayUnitTesting.com

A Horror Story

Editor's Notes

  • #19 15 mins?
  • #39 Good narrative, but cannot be tested
  • #40 Good narrative, but cannot be tested
  • #41 A scenario has 3 parts, like AAA. In fact 4, also clean up. We need to specify an acceptance criteria, otherwise we can’t know if our “test” passes really or by accident. In unit tests we have Asserts. This is different than DoD For each test/story/scenario we need the same.
  • #43 Good narrative, but cannot be tested
  • #46 Good narrative, but cannot be tested
  • #49 Drop the template.  Like everything, once we have a hammer we start looking for nails. Sometimes the template doesn't fit. That's ok. In that case... Tell the story in a sentence. Maybe two. When people are presented with a new idea, don't make them read heaps of documents. Sum it up, so they can grasp it quickly. Details can come later. And make sure it's a story, with a beginning, middle and an end. People remember and consume stories better. You can even sing it if you want, that would make it more memorable. Next you want to... Anchor it. You know the "It's like Uber, but for...?" pitch form every start up  is using? Everybody knows Uber, so they have something to reference the new information. In story-land it's how the story fits into the application. "It's like the log-in story from last week, but with extra validation". Or, "Once we've done with the simple path, we can add more informed algorithms". You're showing where we were, where we're going, and where this story fits. Then it gets interesting. Unveil the motive. Why are we developing this anyway? Who is going to benefit and how? The user may be able to go through registration quicker, and that means more happy users. Or we, the company, gets more money from the dog accessories suppliers, if we're able to connect our users based on their level of pet appreciation. There's a reason we're developing the feature, and it really helps to know the final goal. In some cases, we can debunk it, and choose something better to do with our time. Once people understand the motive... Make a show. How does it look like? You have prepared some mock-up screens, or sketches, or drawing of a flow, or anything that has more meat, right? Ah, you need to prepare for this, young Padawan. It will help, not just with explaining it, but it's a also the setting for... Give it context.Now that things begin to materialize, it's time for an example. You can present the flow on those mocked screens. Or how a different application might be using our new API. How future features will be using our back-end  calculation results. Context is awesome! We can use it to direct the team towards... Generalize. Do we start with the example and just implement it? Should we write a more extensive data validation layer, and then test it? Somewhere in between? An example is not enough for development, because we need to know where to stop. And we need to know how to test. This really helps with defining the acceptance criteria. The final step is... Draw a line in the sand. Some things do not fall into our general rule.  VIPs do not need to enter their credentials again. Anonymous users can use the applications, but will go through a separate flow we'll define later. Anything that does not fall within our boundaries, should be presented. Otherwise, we would implement it, and test it, and we will be surprised. And we don't like surprises.
  • #50 Drop the template.  Like everything, once we have a hammer we start looking for nails. Sometimes the template doesn't fit. That's ok. In that case... Tell the story in a sentence. Maybe two. When people are presented with a new idea, don't make them read heaps of documents. Sum it up, so they can grasp it quickly. Details can come later. And make sure it's a story, with a beginning, middle and an end. People remember and consume stories better. You can even sing it if you want, that would make it more memorable. Next you want to... Anchor it. You know the "It's like Uber, but for...?" pitch form every start up  is using? Everybody knows Uber, so they have something to reference the new information. In story-land it's how the story fits into the application. "It's like the log-in story from last week, but with extra validation". Or, "Once we've done with the simple path, we can add more informed algorithms". You're showing where we were, where we're going, and where this story fits. Then it gets interesting. Unveil the motive. Why are we developing this anyway? Who is going to benefit and how? The user may be able to go through registration quicker, and that means more happy users. Or we, the company, gets more money from the dog accessories suppliers, if we're able to connect our users based on their level of pet appreciation. There's a reason we're developing the feature, and it really helps to know the final goal. In some cases, we can debunk it, and choose something better to do with our time. Once people understand the motive... Make a show. How does it look like? You have prepared some mock-up screens, or sketches, or drawing of a flow, or anything that has more meat, right? Ah, you need to prepare for this, young Padawan. It will help, not just with explaining it, but it's a also the setting for... Give it context.Now that things begin to materialize, it's time for an example. You can present the flow on those mocked screens. Or how a different application might be using our new API. How future features will be using our back-end  calculation results. Context is awesome! We can use it to direct the team towards... Generalize. Do we start with the example and just implement it? Should we write a more extensive data validation layer, and then test it? Somewhere in between? An example is not enough for development, because we need to know where to stop. And we need to know how to test. This really helps with defining the acceptance criteria. The final step is... Draw a line in the sand. Some things do not fall into our general rule.  VIPs do not need to enter their credentials again. Anonymous users can use the applications, but will go through a separate flow we'll define later. Anything that does not fall within our boundaries, should be presented. Otherwise, we would implement it, and test it, and we will be surprised. And we don't like surprises.