Fleshing out Epics and Stories
Our team has come quite a long way from that initial concept for MyFlix. Now, we'll watch them break down their scenarios into Epics and Stories, in preparation for development.
-
Kelly: Pete, I think you are going to be pretty excited about this stage in the Agile Planning process.
-
Pete: Oh yeah, why's that?
-
Kelly: Because this is the last step before we can begin development!
-
Pete: Awesome, so what are we going to do?
-
Kelly: We are going to break down our scenarios into epics and stories using our storyboards and wireframes to inform them.
-
Pete: Ok... I think I've heard a user story, is that like the "as a bla bla bla, I want to x y z..." but what's an epic?
-
Kelly: Sorta Pete, you are mostly right, stories are in the form "as a user, I want to do some functionality, in order to achieve some value." There are three parts, and each is important in describing the feature. Epics are larger, more complex stories.
-
Pete: So an epic might be "As a MyFlix consumer, I want to rate movies, so I can share my opinion with others." But a story might be "As a MyFlix consumer, I want to choose a star rating after a movie ends, in order to create a rating?"
-
Kelly: Yeah that is pretty close Pete, most of the time epics can represent larger blocks of functionality that have a total end user value, but stories are little bits and pieces that make up the epic. They still have value in and of themselves, but not always to support one main interaction. Like that star rating is kind of pointless, outside the context of some sort of site wide rating systems; why add a rating if you can't also view it?!
-
Pete: You lost me.
-
Kelly: Ok, let's work though a brief example, if we were talking about our scenario where a user engages with a movie, we might have an epic like this:
As a MyFlix Consumer User,
I want to rate movies,
So I can share my opinion with others.
-
Kelly: Right? So this captures the idea that a user wants to rate movies, and share their opinion with others... and presumably there is a way that others can see these opinions.
-
Pete: Ok...
-
Kelly: Now look at the stories that could come from this:
As a MyFlix Consumer User,
I want to add a star rating at the end of a movie,
So I can create a review.
As a MyFlix Consumer User,
I want to see the average star rating,
So I can select movies that are popular with other users.
As a MyFlix Consumer User,
I want to browse movies by star rating,
So I can ignore mediocre movies.
-
Kelly: See, three stories, that are a little more detailed can be created with one initial epic.
-
Pete: Is this just like with everything we have been talking about, how we start more general, and then get into the details, so that we defer more detailed work and save my valuable development time?
-
Kelly: Very good Pete, "you are starting to believe!"
-
Pete: Yeah I am like Neo aren't I...
-
Kelly: Anyway, I like what you said about "defer more detailed work." There is a concept that a "user story is a placeholder for a conversation," isn't that what we have kinda been doing all along. Each thing, or artifact, we've made has been a way to defer detailed work till we have as much information as possible. This will continue into Epics, then Stories, and ultimately down into the code. It's not uncommon for final details to be hammered out during the development process, it's just the best time to ask certain questions.
-
Pete: Like what kind of questions?
-
Kelly: Hmm, like "what type of alert should this be?" or "what icon image should we use here?" stuff that can be deferred as long as possible, because hammering it out ahead of time, is just not that necessary.
-
Pete: All right, let's do it, let's have some conversations!
-
Kelly: Cool, well now we have a few more columns on our Trello board, here we are going to drag our scenario into the "Epic Generation" column and then when we make epics they will go in the "Epics" column. We'll start with our highest priority scenario: "Joining MyFlix."
-
Kelly: Now, let's brainstorm all the epics that arise out of this scenario. Any ideas?
-
Pete: Well, we need a public movie page.
-
Kelly: That's a page, not an epic, tell me epics.
-
Pete: Ok well... As a MyFlix User...
-
Kelly: How about "a potential MyFlix consumer user?"
-
Pete: As a potential MyFlix Consumer User, I want to discover MyFlix movies in search results, so that I can create an account?
-
Kelly: "Creating an account is not the user's motivation here, what is?"
-
Pete: Oh, watching a movie... at home?
-
Kelly: Ok good, all together now:
As a potential MyFlix Consumer User
I want to discover MyFlix movies in search results
So that I can watch movies at home.
-
Kelly: Good, let's add it to the board.
-
Kelly: Ok, what could be some other epics for this scenario?
-
Pete: Here's a couple:
As a potential MyFlix Consumer User,
I want to sign up for MyFlix,
So that I can watch a movie.
As a MyFlix Consumer User,
I want to watch a movie,
So that I can enjoy it.
-
Kelly: Great Pete, this is perfect, let's add these two to the board as well, in fact, I think that wraps up creating the epics for this scenario.
-
Pete: Kelly, what's the point of making these Epics if we are just gonna break them down immediately into stories?
-
Kelly: Well first of all, didn't we just discuss that we want to defer some of the detail work? Second, we won't always be breaking them down immediately. Because third, we might prioritize them differently.
-
Pete: What do you mean?
-
Kelly: Well if you were to build the software the way the scenario reads, we would build the public movie page first then the account creation system, and then the internal movie page.
-
Pete: Yeah, let's do that!
-
Kelly: Not so fast, it might actually make sense to make the internal page first, basically, making a single page where you can watch a movie.
-
Pete: But then everyone on the internet could just watch our movies for free!? That would be bad.
-
Kelly: Hold on, I didn't say we would release it that way, we'd just develop things in that order.
-
Pete: Why?
-
Kelly: Because, as with all of this, if we start with the most simple thing, the "seed" if you will, and we get that working well end-to-end. It can easier to grow and add on more components and parts of the software.
-
Pete: And how does the idea of epics help with this?
-
Kelly: Well we can now re-order epics, and soon stories as we see fit, and also we won't always do just one scenario at a time, we might have a few scenarios epics competing for highest priority. I'd suggest that we start with the main watch movie page, then add on a sign up system, and then finally add in the idea of a public movie page. The epic queue would look like this:
-
Kelly: And Pete, because there might be several epics, in this list, from different scenarios, we might only break down the top few into stories, because we won't be developing every one at the same time. Remember that idea of the "gravel factory" I showed you in that book the other day?
-
Pete: Ah yeah, so we just break down the highest priority stuff, as we need it.
-
Kelly: Right!
With three higher level epics, the team is ready to break them out into user stories. You may want to review the "Gravel Factory" metaphor mentioned back in the Epics and Stories chapter.
-
Kelly: All right, let's drag the first Epic into the "Story Generation" column:
-
Pete: What's with the "Backlog?"
-
Kelly: That's where the stories will go, now which stories can be created from this Epic? As a consumer user...
-
Pete: I want a movie page?
-
Kelly: Try again.
-
Pete: I want an HTML5 movie player?
-
Kelly: Remember, no implementation details.
-
Pete: I give up, what's the story here?
-
Kelly: Ha, Pete, this is the story!
-
Pete: Wait, I though this is an Epic!?
-
Kelly: Well it was, but we sometimes find that epics are small enough to become stories in and of themselves, we just can't break it down much further without specifying implementation details or acceptance criteria.
-
Pete: That wasn't fair to make me guess, so what I can move this one, as is, right into the backlog?
-
Kelly: That's right.
-
Kelly: Ok so for this next one, we have to think about a few things with regards to signing up, what are some of the things going on based on our storyboard and wireframe?
-
Pete: Well, signing up, which includes payment details, and confirming sign up.
-
Kelly: Ok, well that sounds like these three stories:
As a potential MyFlix Consumer User
I want to sign up for the service
So that I can have an account
As a potential MyFlix Consumer User
I want to add my credit card details
So that I can pay the required fee
As a MyFlix Consumer User
I want to receive an account confirmation email
So that I know my my account was established successfully
-
Kelly: Any other stories we can add from this?
-
Pete: Hmm, that seems like all there is.
-
Kelly: What about resetting password? Updating payment details? Or closing an account?
-
Pete: But Kelly, none of those things are mentioned in the scenario, storyboard, or wireframes, do we need to go back to the beginning for those?
-
Kelly: Not necessarily, as we drill down further, we'll come up with features that seem reasonable to want to implement and we can create them as stories while fleshing out a particular epic focused on one specific value add. Just like we added in the email confirmation step earlier in the wire-framing process.
-
Pete: That could mean a lot more stories!
-
Kelly: Well yeah, that's why we are doing this brainstorming, it doesn't mean we have to build them all in this order, we'll still focus on the core, but that's what building the backlog is all about.
-
Pete: Ok, in that case, I'd suggest we also add:
As a MyFlix Consumer User,
I want to reset my password,
because I've forgotten it.
As a MyFlix Consumer User,
I want to change my password,
to make my account more secure.
As a MyFlix Consumer User,
I want to change my payment details,
because my card has expired.
As a MyFlix Consumer User,
I want to close my account,
because it is no longer useful to me.
-
Pete: Why would we want to let users close their accounts?
-
Kelly: Well it's not our choice, it may very well be something the user wants to do, and part of providing a good user experience is taking our users' interests in mind. Besides, something like this we can put at the bottom of the list until someone actually asks to close the account.
-
Pete: Ok, now that we have several stories for this epic, what happens to the epic?
-
Kelly: We'll just delete it.
-
Pete: Delete it!? We just made it a little while ago, now we are just going to delete our hard work? We should keep it around in case we might need to refer back to it.
-
Kelly: Ah Pete, but if we do, we might be looking at old information, think of the Epics as temporary artifacts that aid in planning and organization and then once they have allowed stories to be created, they can be removed, or archived in the case of Trello:
-
Pete: It just seems odd to delete those things, isn't this documentation useful?
-
Kelly: Well think back to that gravel metaphor, you don't keep around the big rocks do you? And ultimately the stories will get deleted as well, and the storyboards and the wireframes, because once all of this turns into the real software, that will be the single source of truth, that will be the living documentation.
-
Pete: This seems like a lot of work to just eventually throw it away.
-
Kelly: You could say the same things about scaffolds and architectural drawings, once the building is finished the scaffolds are removed, and even the plans will be dated if the building is modified, and only the building serves as the best example of what the building is.
-
Pete: You're getting deep. So now what?
-
Kelly: Just one more epic to break down, any thoughts on this one?
-
Pete: Well this one seems like it could just be turned into a story, but it looks like we could also use a story about a user logging out because they might want to prevent others from accessing their account, plus that ties in with the desire to create public movie pages, that don't need accounts, so search indexers will find them.
-
Kelly: Very impressive Pete, you are a natural, so what are the stories?
-
Pete: How about:
As a MyFlix Consumer User,
I want to log out of my account,
so that no one else can access it.
As a MyFlix Consumer User,
I want to view movie pages without logging in,
so I can browse quickly.
As a potential MyFlix Consumer User,
I want to discover movie pages though search engines,
So I might be able to watch them at home.
-
Kelly: Pretty good, you know that the last two might represent similar functionality?
-
Pete: Yeah you're right, let's only keep the first two then. Sorry.
-
Kelly: Don't worry about it, that is what it's all about, coming up with things then honing them down a bit.
-
Pete: All right cool, I've added those two to the backlog and archived the epic card.
-
Kelly: Looks like this is a good stopping point for story creation, just one more step before we can start development.
-
Pete: Really? What is it?
Our team has created a pretty detailed backlog from an initial scenario, let's see if they can finish the Agile planning process and start development in the next chapter.