Pivotal Labs

Main menu

Skip to primary content
Skip to secondary content
  • About
  • Case Studies
  • Team
    • Executives
    • Locations
      • San Francisco (HQ)
      • Boston
      • Boulder
      • Denver
      • London
      • Los Angeles
      • New York
  • Community
    • Blogs
    • Tech Talks
    • Events
  • Careers
    • Lifestyle
    • Principles & Practices
    • Benefits
    • FAQ
    • Apply
  • Tools
  • Contact
    • Press Room
    • Press Releases
    • In The News
    • Press Kit
  • All
  • Labs
  • Standup
  • Tracker
Jonathan Berger

Set your sights on the next Milestone with an Idea Board

Jonathan Berger
Monday, April 29, 2013

The Idea Board Technique

A typical Agile Inception ends with a fully fleshed-out backlog for the next few iterations, and some farther-off, coarse-grained, Epic-level ideas written on index cards. What to do with them? Some teams clip them together in a deck of cards that gathers dust and is rarely seen again. I prefer to externalize them on a foamcore board in a riff on a technique Thoughtworks calls an “Idea Board” or “Idea Backlog”.

Making the Idea Board

This is basically an Epic-level reverse-Kanban board that will work in concert with Pivotal Tracker. Create a few columns: “Now”, “Next”, and “Later”. Generally you’ll have 2-3 cards in the Now column, another 2-3 in the Next Column, and the rest (~20-40) in the Later column. The Idea Backlog can often fit on a half-foamcore board (4ft x 4ft), and serves a few uses:

  • it externalizes future epics so everyone 1) is reminded they exist, and 2) can see their relative priority
  • it gives Stakeholders a place to park long-term ideas, and feel that their contributions are included
  • it gives a big-picture view that tactical what-are-we-working-on-this-week systems have trouble displaying succinctly. This is great for strategic-level Release Planning meetings that I like to try to have every 3 or 4 weeks.

On a recent project, we had a bit of Priority Whiplash: every week, we’d go into an Iteration Planning Meeting (IPM) on Monday and agree on priorities. By Friday, someone on the team would say “Why’re we working on this?! What about that other thing?!”. We’d mention the agreed-upon priorities from a few days earlier, but inevitably someone would shake their head and say “I never agreed to that!”.

Idea Board to the Rescue!

We started using the Idea Board and bringing it to planning meetings. Having a tangible representation of the plan helped a lot. “Remember on Monday when we moved the Foo feature set into the Parking Lot to make room for the Bar feature set? I swear no one moved the cards since the last time we looked at this.” This helped a lot. It also really helped that when someone would say “I had a great idea! Let’s make a Baz feature!”, we could write “Baz” on an index card and stick it on the board. It may live in the parking lot for a while, but its visible and everyone is comfortable that we’re prioritizing the feature (rather than forgetting about it).

Some say a big drawback to a strategic paper-based system like the Idea Board is that over time, it falls out of sync with a tactical digital system like Pivotal Tracker. I think this is more a feature than a bug: when the Idea Board has one or two epics that are out of sync with reality it’s no big deal. When the whole board is a big lie, that’s a signal to the whole team that it’s time for everyone to re-asses the alignment between tactical steps and strategic goals: it’s time for a Release Planning meeting.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Luan Santos

Pairing like a Pivot

Luan Santos
Friday, April 26, 2013

Pairing is an amazing activity if you and your pair can do it right, it is one of the things we value most here at Pivotal Labs. It is also one of my favorite aspects of extreme programming since it’s the thing that makes me learn, teach and grow everyday as an engineer.

Being good at it helps you and your pair enjoy the workday, keep motivated and therefore, productive.

During the last months I have learned a lot about pair programming and I am trying to perfect this everyday. I have noticed a couple things that I think can help a person be a better pair.

 

Continue reading →

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Lisa Crispin

Making testing visible in the Tracker workflow

Lisa Crispin
Friday, April 5, 2013

As a feature story progresses through the Tracker workflow, a lot of testing activities are also underway. Team members are collaborating to turn examples of desired behaviors into business-facing tests that guide development. Testers are performing manual exploratory testing on stories as they are delivered. Performance or security testing may be underway at some point in the development process.

A testing workflow?

To keep things simple, Tracker’s states are limited to Not Started, Started, Finished, Delivered, Accepted and Rejected. Only the “Accepted” and “Rejected’ states seem directly related to testing. Testing activities such as specification by example, acceptance testing, exploratory testing, load testing, and end-to-end testing aren’t reflected in the Tracker workflow, but they’re going on nevertheless. Testers, coders, product owners and other team members continually talk about how a feature should work, and what to verify before accepting a story as “done”. But details can still be overlooked or lost. If stories are rejected multiple times because of missed or misunderstood requirements, or problems slip by and aren’t discovered until after production release, testing activities need to get more attention.

We’re working on enhancing collaboration and communication in Tracker, with increased flexibility that will help with tracking testing activities. Meanwhile, how can Tracker users follow testing along with other development activities? It would be helpful to have a place to specify test cases, note plans for executing different types of tests, and make notes about what was tested. Accomplishing this requires a bit of creativity, but it’s possible to keep testing visible in the current Tracker workflow. Here are some ways we do this on our own Pivotal Tracker team.

Testable stories

First of all, we work hard to slice and dice our features into stories small increments that are still testable. We read the stories in the backlog to make sure we understand what each one should deliver, and how it can be tested. If I have questions about an upcoming story when we’re not in a planning meeting, I note it in a task or comment to make sure we talk about it. Iteration planning meetings are a good place for the team to start discussing how each story will be tested. Some teams get together with their business experts to help write the stories with this in mind.

We make sure we know how we’ll test all the stories in the upcoming iteration. There are a couple of different ways to get enough of this information into the story .

Using tasks and comments

Test cases and testing notes can be added to a feature story as tasks. They’re easy to see in the story, and can be marked as completed when done. We often include links to additional details documented in a wiki page, or to automate-able functional tests used for acceptance test-driven development (ATDD). As teammate Joanne Webb points out, sharing test cases before implementing a story clarifies requirements, and gives developers clues on problems to avoid introducing. In our experience, this shortens the accept/reject cycle for stories.

Comments are another good place to add information about requirements and test cases, especially since you can also attach files with additional information, screenshots, pictures of diagrams, and mockups. And if team members have questions they can’t get answered in person right away, comments provide a place to record a written conversation, and email notifications can alert the story owner and requester so they can answer questions.

Visibility and workflow through labels

We can find ways to record conversations about requirements, but how do we incorporate a testing workflow into the larger development workflow for a Tracker story?

TestingExample

Labels are a handy way to keep stories progressing through all coding and testing tasks. In our Tracker project, automating functional tests is part of development. The story isn’t marked finished until both unit tests and functional tests are checked in, along with the production code. Once a feature story is delivered, someone (usually a tester or the product owner, but it could be a programmer who didn’t work on coding the feature) picks up the story to do manual exploratory testing.

To make this visible, we put a label on it with our name, for example, “lisa_testing”. Not only do we conduct exploratory testing, we verify that there are adequate automated regression tests for the story, and that necessary documentation is present and accurate. Once we’re done testing a feature story, we put a brief description of what we tested in a comment, remove the “testing” label, and add another label to show the story is ready for the product owner to verify. This might be “lisa_done_testing” or “ready_for_dan”. Sometimes the product owner gets to the story first, and uses similar labels to show he’s in the process of testing or finished with his own acceptance testing. Once all involved parties are happy with the story, we can accept it. Using labels is a bit of extra overhead, but it gives us flexibility to continually improve our acceptance process.

Putting together a bigger picture

Some testing activities extend beyond one story, especially since we usually keep our stories small. It’s possible to write a feature story or chore for the testing activity. For example, you might write a story for end-to-end testing of an epic that consists of many stories and extends to more than one iteration. Writing a chore for performance testing, security testing, or usability testing may be useful.

However, as my teammate Marlena Compton points out, there are advantages to making sure testing is integrated with the feature stories themselves. If a story remains in delivered state for several days while we complete system testing related to it, the labels we put on the story convey the testing activities underway. Completing all testing before accepting a story helps ensure the stories meet customer expectations on the first day. As Elisabeth Hendrickson says, testing isn’t a phase, it’s an integral part of software development, along with coding and other work. Having our Tracker stories reflect that helps keep us on target.

As we do exploratory testing on a feature story, we might discover issues or missing requirements that don’t make the story un-shippable, but may need to be addressed later. We can create separate feature stories, bugs or chores for those, and link back to the original story via links or labels.

We track some testing information outside of Tracker, for example, on our team wiki. However, we find that tracking testing activities in Tracker helps ensure that they get done in a timely manner, and keeping tests visible helps ensure that stories meet customer expectations the first time they’re delivered. Integrating testing activities with coding tasks keeps our testing efforts aligned with other development efforts.

While we work to make Tracker more flexible for teams and testers, we hope these ideas help you make your testing more visible in the Tracker workflow right now. Check out our blog post http://pivotallabs.com/2013-update-new-features-new-api-new-design/ to get an overview of some of the plans for Tracker this year, and come back periodically for the latest news. We’d also love to hear how your team incorporates testing in agile development. Please leave a comment, or write to us at tracker@pivotallabs.com.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Graham Siener

Running an IPM

Graham Siener
Monday, April 1, 2013

I’m going to take a break from my blog posts on metrics, and was thinking I’d focus more on process.  An Iteration Planning Meeting (IPM) is core to an agile process and provides the opportunity for the product owner(s) to communicate the vision for the upcoming Iteration.

I’ve sat in on enough IPMs to realize that they’re all unique snowflakes, but here’s what the agenda for an ideal IPM looks like to me.

PM as Facilitator

The Product Owner/Manager should run an IPM.  It’s his/her job to ensure that everyone involved with the product development process knows where we just came from and where we’re going.  To that end, I like to start by “walking the wall” to look through any stories still in progress from the last sprint, along with any pertinent information about features just finished.  This should be a quick process to jog everyone’s memories and ground them in the work that’s coming up.

Invest in Stories

Starting at the top of the backlog, step through each story; the INVEST mnemonic is useful in confirming that they’re shovel ready.  Talk through the user-facing value for a feature, ensure that any comps, wires, assets, flows, data, etc. are attached to the story.  Confirm that the requester marked is the person accepting the story and clarify any acceptance criteria.  The goal here is to be crystal clear on when a feature is “done done.”

Complexity Check

If it doesn’t already have an estimate, each developer that could work on a story should roll on the points to deliver.  If the implementation is not clear, they should have time to talk through approaches.  That said, their role is to nail down a level of complexity, not pin themselves to a specific technical implementation.  Based on the estimate size or developer feedback, stories can be nominated for merging or splitting up.  If that’s the case, capture the pieces of work as placeholders and update with details post-IPM.  The worst thing you can do in an IPM is not respect everyone’s time during this kind of housekeeping.

Paying Down Debt

A healthy development process will incorporate refactors and tackle technical debt in concert with new user value.  In addition to explicit tech debt chores, PMs and developers should look for opportunities to wrap this work into feature development.  For example, if a story calls for adding a field to an existing form you should consider also cleaning up the logic that delivers form validation errors.  [Giving canned examples of identifying technical debt is hard -- please forgive this one!]

Two Iterations Max

Tracker will chunk stories into iterations based on Velocity.  You should only step through stories until you’ve got two sprints worth of estimated work.  I like to keep the visibility to two weeks to cover for quicker than intended delivery of features, and to limit the IPM to a reasonable amount of upcoming work.  It’s taxing to keep the mental inventory of features in your head; sticking with the short term future focuses everyone on the team around tangible new features.

Block and Promote

If a story is blocked, mark it as such and add a comment with what will unblock it.  If a story won’t reasonably become unblocked during the sprint, I’ll move it to the Icebox to be sure the Backlog only reflects actionable work.  Similarly, this is a good time to call for nominations for bugs/chores/features that should be prioritized out of the Icebox.

Short and Sweet

Once you hit an hour of IPM, developers zone out and business owners get antsy about the emails they’re missing (or worse, they whip out their phones).  You can and should be able to limit sidebar discussions to stay focused on one story at a time.  When you have a large team, it’s especially important to play time cop.  If you don’t have a healthy Backlog and find yourself with a lack of new work, end the meeting.  It’s far better to hold an emergency IPM two days later than to suffer the pain of making up stories in real time!

These are not hard and fast rules, but chances are if you sit in one of my IPMs I’ll focus on these pieces.  What’d I miss?  What parts of an IPM are essential to a successful sprint?

 

Logistics

  • Kill the Icebox and bump up the font size.

  • Use the Tracker Header bookmarklet to get some more real estate

  • Check team strength and set accordingly in Pivotal Tracker

  • Use screen sharing (i.e., join.me) for any remote participants

  • Turn off all screens unless they’re in support of the IPM (note taking, clarifying comments in Tracker)

[1] Tracker Header Toggle Bookmarklet

A Javascript Bookmarklet to toggle the Tracker header on and off, giving you more room to view stories. To use it, copy “javascript:["header","controlPanel"].each(Element.toggle);app.layout._resizePanels();”, paste into a new bookmarklet, go to your Tracker project, and toggle the bookmarklet to hide the header.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Jonathan Berger

Long-term Estimation in an Agile Environment, or: How I Learned to Stop Worrying and Love the Assumptions Label

Jonathan Berger
Monday, April 1, 2013

Estimation is Hard

Flexible plans executed via iterative development are at the core of Agile:

Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.

This is great for figuring out what to build, but all this flexibility can make planning and estimation hard. In practice, developers tend to prefer backlogs containing a few weeks worth of fine-grained stories following INVEST principles, followed by low-fidelity—and unestimated—chunks of epic-sized features. The thinking is that any stories farther out are unstable, and that it’s wasteful to spend time specifying them in detail. Agile planning tools like Pivotal Tracker are built with this perspective in mind, and are great for managing fine-grained details. But what happens when you need to get a more big-picture view of a project? Recently, a colleague said:

As development moves forward, features change. And those changes have implications on the stories later in the backlog or icebox. … Not sure if this the best way since it causes me to not want stories that extend beyond a few iterations.

Isn’t this the perfect distillation of the Agile Manifesto’s notion of “Responding to change over following a plan”? I find the problem isn’t changing stories—this is a natural part of Agile development. Rather, the difficulty is doing the work to 1) figure out which stories are stale, and 2) to re-estimate stale stories, lest 3) clients make plans based on stale estimates and then get upset when we say “sorry, those estimates aren’t accurate any more”. Ideally, the estimates will be revamped downwards (there’s less uncertainty now that we know more about what’s going on, right?), although sometimes we’re discovering hidden complexity and the estimates go up. D’oh!

The Assumptions Label Technique

One technique I’ve used successfully on a few projects is what I like to call the Bullpucky Assumptions Label. I pull it out when the client demands—not unreasonably, I might add—that we estimate out the next 3-12 months of work so that they can get funding / approval from their boss / etc. I’ve seen project teams fight this for weeks (the PM getting more irate and frustrated the whole time), finally lose, and schedule a (miserable) half- or one- or two-day mini-inception during which they proceed to estimate every story for the next few quarters in fine-grained detail. Of course, they inevitably have to re-estimate half those stories in angry IPMs when it becomes clear the estimates are wrong, grumbling “we told you these estimates were bullpuckey”.

Here’s the Assumptions Label technique:

  1. Schedule a 2-3 hour Assumptions Meeting with the PM and 1 or 2 devs. (You don’t need the whole team; these aren’t real estimates). Estimate “stories” (they’re really closer to epics) at a multiples-of-8-point level of granularity. Pretend we’ve built the basic shopping-cart and inventory functionality of Hamazon (“The Internet’s Favorite Purveyors of Pork since 2009!”), and now the client wants to fully copy Amazon’s feature set. It might contain rough estimates like “Reviews and ratings? Mmmm…24 points. Recommendation Engine? 40 points.” Rough out the desired feature set. You’re basically estimating at a pair-week level of granularity, so multiply pair-weeks by (velocity/team strength) and you’ve got your pointed estimate.
  2. Write titles in all caps (they’re easier to see that way). Don’t bother writing a description for the story. It’s ok to use multiple 8-pointers to get to the number you need.
  3. Throw an “assumptions” label on all these stories; they’re easier to wrangle (and it never hurts to drive the point home).
The Assumptions Label technique in action.

The Assumptions Label technique in action. Use it to re-prioritize coarse-grained blocks of epic, and watch estimated completion dates adjust.

Now your PM can give a rough estimate to their boss or their boss’s boss, re-prioritize at a rough level of resolution, and cut scope or add pairs. But it remains clear to everyone that these should never be mistaken for actual, deliverable stories. In fact, these “assumption” stories become a decent way to see what’s next when story-writing. IPM or pre-IPM often becomes an exercise in picking the top assumption off the top of the file and fleshing it out into real stories. By reducing the difficulty in seeing what’s a real story and what’s a rough estimate for planning’s sake, everyone gets better visibility into the project. Pivots can set better expectations for their PMs, PMs can set proper expectations for their boss, and trust is preserved on the team.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Dmitriy Kalinin

[standup] [sf] 03/27/13: Metro DC

Dmitriy Kalinin
Wednesday, March 27, 2013

Helps

Sinatra Logger

We have a Sinatra app mounted on Rails. If we raise an error in the Sinatra app, it doesn’t show anywhere. Can we attach the Rails logger somehow?

Interestings

Code Climate Blog: Rails Insecure Defaults

http://blog.codeclimate.com/blog/2013/03/27/rails-insecure-defaults/

Rubymine 5.4 EAP: Rails 4, JRuby Nailgun support, and a feature requested by pivotallabs!

Check out the release announcement here: http://blog.jetbrains.com/ruby/2013/03/rubymine-ichii-early-access-is-open/

This release also includes a small feature requested by the CloudPlanner team here at Pivotal Labs! When you create a new localization property from a view, the dialog will now default your localization file to the last one used: http://youtrack.jetbrains.com/issue/RUBY-13368

Thanks to the two Pivots who up voted our feature requests (Ken Mayer and Justin Richard)! And if you never got around to up voting our team’s RubyMine feature requests, please do so now! It only takes a sec:

http://youtrack.jetbrains.com/issue/RUBY-13332
http://youtrack.jetbrains.com/issue/RUBY-13341
http://youtrack.jetbrains.com/issue/RUBY-13327
http://youtrack.jetbrains.com/issue/RUBY-13326
http://youtrack.jetbrains.com/issue/RUBY-13366
http://youtrack.jetbrains.com/issue/RUBY-13374

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Luke Winikates

[Standup][SF] Upgrade your Rubies

Luke Winikates
Tuesday, March 26, 2013

Interestings

Ruby 1.8.7 end of life – No security fixes after June

More here: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/47201

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Dmitriy Kalinin

[standup] [sf] 03/25/13: Zvezdochka

Dmitriy Kalinin
Monday, March 25, 2013

Interestings

.ruby-version (& .ruby-gemset)

The community appears to be converging on .ruby-version as a standard way to convey a project’s Ruby version. This as opposed to .rvmrc or .rbenv

If you use RVM you can also use .ruby-gemset to specify a gemset.

See https://gist.github.com/fnichol/1912050 for more info.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Jared Carroll

Why are all the Stories in Pivotal Tracker Missing Descriptions?

Jared Carroll
Sunday, March 24, 2013

I asked my pair on my first day here at Pivotal.

That’s on purpose. A user story is a promise to have a conversation. When we start a story, we’ll have a discussion with the client to fill in the details.

Ok. So we’ll just ping them on Skype or something?

No. They’re sitting at the desk right over there.

The Onsite Customer

In XP, the onsite customer is a domain expert that is part of the development team. Their responsibility is to answer questions, resolve disputes, and set small-scale priorities [1].

In past projects, contacting a client involved emails, IMs, or phone calls. My stories needed detailed descriptions. Description-less stories risked building the wrong thing. So I labeled them “blocked”, and project velocity suffered.

Benefits of having an Onsite Customer

In my current project, having an onsite customer has made a huge impact.

Eliminating story descriptions has simplified iteration planning meetings. Just write down a short title and move on. Discuss the details later.

Constant client communication has helped avoid misunderstandings. Not once has a pair built the wrong thing. Developer time isn’t wasted.

Delivered stories rarely go untested for longer than an hour. A quicker turnaround has shortened system feedback time.

Get Serious About Succeeding

An onsite customer was one XP practice that was missing from my past projects. What client would be willing to give up one of their full-time employees? After four weeks of working on a team with an onsite customer, to me, the answer is clear: a client that wants their product to succeed.

[1] Kent Beck, Extreme Programming Explained: Embrace Change (Addison-Wesley Professional, 2000), 60.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
David Stevenson

03/13/13: [SF] Use postgres!

David Stevenson
Wednesday, March 13, 2013

Helps

eager-loading nested polymorphic associations

We have a controller action that performs n+1 queries to present associated models as nested hashes. The typical solution is to use :include to eager-load associations. Unfortunately, the models are related polymorphically, and :include can’t eager-load nested polymorphic associations. What can we do?

Interestings

Use postgres!

Because in rails it automatically puts a transaction around for DDL statements and rolls them back when things don’t work. Fixing this in mysql can be a huge pain.
  • 0 Shares
  • Share on Facebook
  • Share on Twitter

Topics

  • agile (783)
  • rails (117)
  • testing (90)
  • ruby (86)
  • ruby on rails (71)
  • jobs (62)
  • javascript (59)
  • techtalk (44)
  • ironblogger (42)
  • rspec (39)
  • bloggerdome (34)
  • productivity (34)
  • activerecord (30)
  • rubymine (30)
  • git (29)
  • gogaruco (29)
  • nyc (27)
  • design (24)
  • mobile (23)
  • pivotal tracker (22)
  • process (21)
  • cucumber (21)
  • jasmine (19)
  • ios (18)
  • tracker ecosystem (17)
  • webos (17)
  • objective-c (17)
  • fun (16)
  • android (16)
  • palm (16)
  • ci (16)
  • "soft" ware (16)
  • bdd (15)
  • tdd (15)
  • cedar (15)
  • rails3 (14)
  • performance (14)
  • css (14)
  • gem (13)
  • mouse-free development (12)
  • selenium (12)
  • goruco (12)
  • bundler (12)
  • api (12)
  • keyboard (11)
  • meetup (11)
  • railsconf (11)
  • nyc-standup (11)
  • capybara (10)
  • mac (10)
Subscribe to agile Feed
  1. ←
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. ...
  10. 79
  11. →
  • About
  • Case Studies
  • Team
  • Community
  • Careers
  • Tools
  • Contact
  • Labs
  • Events

Contact Us

contact@pivotallabs.com
+1 415-77-PIVOT
TwitterLinkedInFacebook

Pivotal Tracker

Tracker is the award-winning agile project management tool that enables real-time collaboration around a shared, prioritized backlog.
Visit pivotaltracker.com >