agile experiences

Slicing the Elephant. Good tips to divide work in small deliverables.

As you may know one of the Agile principles is “early and continuous delivery of valuable software”. Now, one of the major challenges I’ve seen in the attempt to accomplish this, is how to break entire features into smaller deliverable parts in each sprint or iteration (or any name you have for small periods of time).

The concept is easy and you can find it all around the internet, I really like the “Skateboard metaphor” by Henrik Kniberg:

I think we all understand the concept but the problem come when we want to put it in practice.

Force to think in patterns:

Both in software and product development or similar domains, you can apply patterns to divide the work, force you to think in them when you have to slice a feature and you may get very good results. You can even print and take them with you to every backlog refinement session or meeting.

Here you have a few ones that are pretty common in every software/product:

#1 Slice into different actions

Create, read, update, delete, list. Yes, the same design patterns you apply in software development are useful here. Slice big business items managing features into small parts by different action:

Lets use a library system as example.

As a librarian I want to manage books on the system…

You can slice it in:

As a librarian I want to create books on the system.

As a librarian I want to update books on the system.

As a librarian I want to delete books on the system.

As a librarian I want to list books on the system.

#2 Slice by different options

As a library user I want to search books so that I can find them in the shelfs…

This is easy, typically we’re going to make the user’s life great (or we think so) and give him 20 differents options to find the book.

Or we can slice it in:

As a library user I want to search book by name so that I can find them…

As a library user I want to search book by author so that I can find them…

As a library user I want to search book by date so that I can find them…

As a library user I want to search book by code so that I can find them…

#3 Slice using business rules

In almost all products we’ll have a bunch of business rules that describes variations in the use cases.

As a library user I want to borrow some books and take them home…

But… The librarian has to ask the user for his identification.

If the user is foreign he needs to show passport and proof of domicile, if not, he can’t borrow the book.

As a native library user I want to borrow some books and take them home

(The system doesn’t support foreign users yet)

As a foreign library user I want to borrow some books and take them home

#4 Basic Flow First

All of us want a solution that considers every possible flow of the product but this can take lots of time without delivering nothing, so… split them and tackle down the basic first and leave alternate flows for later.

As a library user I want to borrow some books and get them delivered at home…

It would be great to deliver books, but you need to get user address, account, contact info, preferred delivery date and so on. Go the basic first:

As a library user I want to borrow some books and pick them up at the library

As a library user I want to insert an address and get books delivered

As a library user I want to have an address book so that I can pick them from there later

#5 Leave the “fantasy” for later

Start with basic user interactions and leave the fancy stuff for later.

As a library user I want to save my personal data

Leave validations for later, animations for later, fancy error messages for later, etc. Just give the user a simple form and let him save his data.

I hope these few tips help you, please give me feedback or write another patterns/strategies you use! You will find several other patterns that will apply your business, look for them, write them down and train yourself to slice the elephant in every feature you develop.