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

Finding Pivotal (Designer edition).

Jonathan Berger
Tuesday, June 4, 2013

Everyone has an Origin Story. This is mine.

I discovered Agile by accident. I was a self-taught designer who’d travelled to Florida to hand off a project to the development team. My partner and I had spent the summer building this perfect product, and I was completely in love with it. But there was a problem: I knew that when those dummy developers got their hands on it, they’d ruin the thing. So I did the only thing I could: I went down there (in a very hostile frame of mind) to defend my baby.

That’s when everything changed.

Those “dummy developers” weren’t dummies at all. They were amazing. Smart, friendly, wonderful people, working in pairs with a sane process. This wasn’t an exception. I didn’t luck out and meet the one rockstar or the lone unicorn. No, this was a world where there was a system that worked to help people build strong web apps in a sane, sustainable way. The process held the promise that all those late nights, all the stress, all that constant re-invention of the design-wheel could be replaced with a systematic, repeatable, tractable practice for design. I returned to New York determined never to go back to the old way. I wanted to bring these things to design. I wanted to figure out how to do Pairing and Testing. Maybe it wouldn’t be exactly the same for design as for development, but the benefits of these techniques were missing in design—and I wanted them.

So I had a choice: find a shop in NYC that practiced Agile, or move to Florida. Happily, Pivotal Labs had expanded to NY earlier that summer. They were looking for an agile designer, and I signed on.

What would an Agile design practice look like? No one knew, but there were signs: how should a development shop interview a designer? Make him pair on his interview! It was intimidating and exhilarating, and a portent of things to come; of intuititing the right direction to go in, even if we didn’t know how exactly to get there. Of adapting techniques on the fly to invent our way to a practice that married agile and design.

On my first day I came in, said ‘hello’, put on my headphones and started working in Illustrator. It was me at my laptop and two pairs of developers: one pair to my left and another to my right. By my second day, I took the headphones off and started listening to everything around me. One of the affordances of pairing is that there’s talk all day. Listen, and you’ll hear the development process unfold. I started to learn the rhythms of What’s Important and What’s Not, of what’s a Real Problem and what’s not, what’s in interesting domain modeling question and what’s an implementation detail. These are distinctions that the design world lacks good language for. These are also, coincidentally, some of the hardest things to learn when you’re trying to learn to build software. This kind of stuff is really crucial, so I was fortunate to be in an environment where even while I was using Illustrator, these guys were coding and testing and pairing; I was absorbing the technique and practice the whole time. For me, that was the beginning of building an Agile design practice grounded in an Agile development practice that worked.

How’s it gone so far? There’re a lot of smart people working on the same problem. There’s still a lot of work to do. Sometimes it could be lonely being the only designer in a shop full of developers, but now Pivotal’s building out a Product Design practice, and it’s a great environment from which to drive out this practice. (Want to help? We’re hiring!). Pivotal’s mission is to change the way the world develops software, and bringing Agile practice to design fits into that mission seamlessly. Agile Design practice has come a long way, but it’s still years behind development. There’s a lot more to do, and I’m grateful to be part of a team that’s doing it every day.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Ward Penney

When Should I Build a Live Style Guide?

Ward Penney
Monday, June 3, 2013

Over the last several projects, we have chosen to commit to the construction and maintenance of a live style guide as part of the development process. However, the reasons in each case have been varied, and I’d like to give a quick rundown of these cases with some benefits and pitfalls of each.

My primary reasons to build an live style guide are when:

  • On a new codebase,

  • Bringing an existing frontend codebase under control, and

  • Implementing a “phase II” design.

Stipulations

  1. It must be a web-based product. I am unaware of any successful process for an live style guide on iOS, Android or any technology not using CSS and HTML.

  2. The live style guide must exist on a basic page that the developers and designers can affect quickly with HTML (preferring HAML, SLIM, etc), CSS (preferring SASS or LESS) and inline Javascript.

Universal Goals of a Live Style Guide

This is a good point to describe the goals for a live style guide. In all situations, my primary goals for using are:

  1. to showcase and create best practices for the team to use going forward,

  2. to properly factor the frontend codebase so future changes are straightforward and decoupled from each other, and

  3. to enable all members of the team to pair on it’s creation, maintenance and evolution.

Universal Benefits of a Live Style Guide

There are some general benefits that the live style guide brings, regardless of the context:

  • It creates a culture that appropriately estimates the scope of new widgets: I personally believe that CSS work is habitually under-estimated by agile teams and designers. New widgets, variance in widgets, conditional behavior, conditional display, and new layouts all increase the entropy of your frontend by a factor that is exacerbated over time. In the same way that adding a feature increases your codebase and maintenance costs, so do new design elements.

  • Eliminate handoffs by pairing with a visual designer: If the team has a visual human resource, pair with him or her as you build. If you don’t have a visual resource, bring in the product owner as you near completion of each bit. Most visual designers nowadays are interested and skilled in frontend development. Anecdotally, every designer I have paired with quickly recognized the advantage of repetition and versatility of widget design and then promptly eliminated unnecessary visual variance from their existing and future designs.

  • Spread best practices by pairing with engineering: It’s amazing how a little CSS best practices, mixed with pairing and with a dash of SASS-magic can transform all team members into competent and exceptional frontend developers. After all, agile engineering is no stranger to pairing. Arrange the pair assignments so the two of you hammer out a complex CSS design. They will appreciate it!

Situation 1: A New Codebase

Honestly, designing in-browser live style guide on a new codebase is one of the most exhilarating experiences us frontend geeks can find. The benefits in this context are:

New Codebase Benefits

  • Agile live style guide construction: Only put what you need for the upcoming iteration(s) into the LSG. If you only need H1 and H2, do not bother with H3, H4 and H5. If you only need one button, design that button (and make it POP!). You need a fancy table? Focus on that. Odds are that what you NEED ASAP is a manageable workload.

  • Make live style guide stories unpointed Chores: Resist acceptance process for the style guide. The consumer user does not see the live style guide. It will be accepted anyway down the line. Why subject it to double jeopardy  Any issue that might hold up the acceptance of the Feature when implemented, can be 90% handled during the live style guide phase by bringing over the designer or product owner and pointing at it on the screen.

New Codebase Pitfalls

  • Engineering catches up: This is in the pitfalls section only because you have to watch out for it and react appropriately. You can not create a bottleneck here. You know they caught up when they are picking Features off the backlog that have a corresponding story to style in the live style guide. This is time to delete your Chore for the style-only. By this time, you should have many elements in place, most notably a file include structure, a framework choice and at least one layout example. Do the style guide in the layout of the app. This way, you set the best practices for grid usage. Your goal is to enable the team so you can roll off, not create a bottleneck that requires you to create every line of CSS.

Situation 2: Bring an existing codebase under control

To be continued… 

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Nina Mehta

Design Pairing: Can two designers really share a screen?

Nina Mehta
Friday, May 24, 2013

This post is pair-authored by David Friermor and Nina Mehta

Traditionally, pairing has benefited both pivots and clients improving productivity and quality of output. We want to see if design pairing is a way to move creative, collaborative work forward. We define design pairing as when two designers, work with two mice, two keywords, two displays but only working off one computer. We paired all this week and want to share our reflections with the community.

This week we did remote user testing, script writing, card sorting, sketching, wireframing  prototyping and some visual design. Because we worked in a pair, we had more fruitful research findings and came to a better site architecture for our current project.

What’s awesome

We found that the quality of what we produced was higher and done faster than if we worked in silos and came together just for reviews or critiques. By working in pairs, we were able to share processes, skills and techniques to find the best answers of the design problems we were facing.

Pairing also allowed us to put our work through a rigorous process and have focused discussions as decisions were made. Real-time critique makes our work better and let us execute and build upon ideas as we were having them.

What’s hard

Design etiquette and pairing etiquette is already difficult; combining the two is no walk in the park. Letting go of control is hard. Letting go of your keyboard, your ideas, and your chance to say something is all hard. And especially when you don’t want to.

Design is traditionally an internal process; it’s difficult to discuss and explain every thought. We are trained to defend our ideas and refine a thought before sharing it. Getting into each others’ minds at first was uncomfortable and made us feel vulnerable. Once we got over the first hurdle teaching each other what we knew became fun and made our work better.

Well, now what?

We only paired for a week and feel like we’re stepping into somewhat uncharted territory. We recognize that design pairing is not feasible for every project, however we want to see what this can do for other product designers.

Do you have experience design pairng? Tell us about your experience.

 

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

Is there something funny about your Standup?

Graham Siener
Monday, May 20, 2013

Agilish

Software development teams that aim to be more “Agile” often pick and choose the pieces of an agile methodology that suit them.  For some reason standup is usually picked first, way before addressing their waterfall ways.  I guess it’s because it’s hard to do “retrospective” but easy to stand up during a meeting (despite teams that sit through their standup).

I’m a big fan of standups but have also witnessed ones that are poorly executed or even detrimental.  A traditional standup is a five to fifteen minute meeting where each team member stands together and answers three fundamental questions:

  1. What did I accomplish yesterday?

  2. What will I do today?

  3. What obstacles are impeding my progress (blockers)?

A standup is not:

  • A status report for your managers

  • The forum for discussing details at length

  • A replacement for healthy and timely communication with your product team

  • A way to trick developers into coming in early

Walking the Wall

The intent of standup is to share work in progress and highlight blockers — why not use the tool where you manage your agile development process?  This is typically referred to as “Walking the Wall,” and in my opinion creates a quicker and healthier conversation.  Here’s how:

Open Pivotal Tracker (or your agile tracker of choice) on a screen that’s easily viewed by the team.  Standup stations work well for this, otherwise you can huddle around the monitor with the most space.  Close the Icebox and zoom in on Current.

Step through each story in the Accept/Reject state.  Is it clear how a story should be accepted?  Is it clear [for larger teams] who is doing the acceptance for a story?  Side note for story requesters — do your best to accept stories right away.  Nothing is worse for a developer than seeing a rejection at noon for a story that was delivered yesterday.

Moving onto the first story in progress, let the story owner describe the work and give a gut check on how it’s progressing.  This is a great opportunity to raise concerns about an estimate, e.g., “This was pointed as a 2 but we had to do a lot of refactoring of the css.  We’ve probably got another day of refactoring before we deliver.”  Context is important, and highlighting this discrepancy gives the PM a chance to course correct if need be.

Once you’ve covered WIP, move on to the next set of stories in the Backlog.  If any have blockers like a “needs-discussion” label, drill into the detail and identify if you can resolve them on the spot.  If something needs design/assets, hopefully your designer (along with the rest of the core Product team) is there to confirm that they’ll upload the right files, etc.

Lastly, work out your pairs for the day and cover any housekeeping (“we’ll be reticulating the spines at 3pm, no pushing commits”)

If some important topic comes up and can’t be resolved within fifteen minutes, schedule a follow-up meeting with the people needed to resolve the issue.  You don’t get points for dragging out a standup until every problem has been solved!

This is the format for standup that I default to now.  I encourage you to give it a try if you’re finding standups have lost their value, or if you don’t think product stakeholders are in sync with the development process.  As always, ask your doctor if continuous improvement is right for your team.

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

A Responsible Recipe for the Fewest Possible Meetings

Jonathan Berger
Monday, May 20, 2013

Meetings are crucial to healthy team communication. But they’re also opportunities for waste, occasionally dull, and always expensive. Every team is different, but continuing the theme of “Convention over configuration for process”, I’ve found the following structure keeps meetings to ~7.5% of your week. This minimizes waste, maximizes making-time, and makes for a nice scheduling default for projects.

1. Daily Standup

5x weekly, 10 minutes each

Standup is a short, team-wide orientation meeting. Each morning, the team meets for a the Team Stand-Up meeting. As it’s name implies, everyone should be standing up—even if they’re remote and parked behind a screen. Meetings tend to run short when everyone’s on their feet, and there isn’t much to cover anyway, just three canonical questions:

  • What did you do yesterday?
  • What are you doing today?
  • Are you blocked on anything?

Since the team is pairing, most of the time the second person will say “pass” since their pair already mentioned the stories they worked on, the issues they had, and what they’re doing next: sticking together or seeking a new pairing partner.

2. Iteration Planning Meeting (“IPM”)

1x weekly, 60 minutes each

The IPM is a weekly tactical planning meeting. It’s aim is to ensure that the backlog is in good shape, and that all the team members have a shared understanding of what the stories mean. The product manager leads the meeting by reviewing the backlog. Each story should be reviewed; questions can be answered, clarifications can be issued, and developers can estimate the stories. Ideally, the meeting is on Monday or Tuesday and the team will get through the current iteration’s undone stories and a healthy chunk of next iteration’s stories. On some teams, it helps to take an hour before the IPM to groom the backlog, prioritize, and flesh out poorly-worded stories in a pre-IPM meeting with a small group (usually the Product Owner and a single developer).

3. Friday Afternoon Meeting

1x weekly, 60 minutes each

A useful pattern on recent projects has been to block out an hour Friday afternoon and rotate between three meetings: the Team Retro, the Tech Retro, and the Release Planning. It’s nice to have a regular time, and every-three-weeks is about the right frequency for each of these.

Week 1: Team Retro

The Team Retro is a chance for the day-to-day members of the team to reflect on how things are going, celebrate successes, voice frustrations, and suggest Action Items. While there are plenty of variations, the classic Retro format is to throw three columns on a whiteboard:

  • “Smileys”, or things that are going well, represented by the expected emoticon :-)
  • “Frownies”, or things that are going poorly, represented by :-(
  • “Mehs”, or things that don’t fit cleanly in either category, but bear mentioning :-\

After ~25m of going around the room and throwing out Smileys, Frownies, and Meh’s, the team might spend a few minutes identifying items which have a common theme, and then spend the rest of the time suggesting action items, either for each item (starting with the Frownies) or, if time is short, on a theme-by-theme basis. The action items are recorded and assigned to individuals, and their progress is followed (often at the start of the next retro). For more about Team Retros, see 7 Best Practices for Facilitating Agile Retrospectives.

Week 2: Tech Retro

A Tech Retro is for and by developers. While pair-programming is essentially continuous code review, it can still be useful to take some time to step back and look at the codebase. Tech Retros often take the traditional “Smilely / Frownie / Meh” format, but focus exclusively on the codebase. This is a great time to talk about modeling decisions and suggest refactors. Often the action items resulting from tech retros are a long list of chores. Try to keep each one to a manageable size, and make sure at least a few of them make it into the backlog for the next iteration.

Week 3: Release Planning

“Release Planning” means different things to different Agilists, but in this context it’s a loose title for a long-range planning meeting. While the IPM is a short-term tactical meeting, it’s important to occasionally step back and look at the big picture. What are the product’s medium- and long-term goals? Are we on track? What should our next milestone be? The Release Planning should be attended by the whole team, and by the stakeholders like clients and CEOs who may not be part of the day-to-day workings of the team. It’s a chance to review epic story tracks, dates and deadlines, and to make sure that everyone has a shared vision of where the team is going—and that it’s a place worth going to.

Why Meetings Matter

Communication is crucial, but so striking a balance between waste and on keeping everyone on the same page. I’ve found that teams which hew to this schedule tend to have a healthy rhythm. While circumstances occasionally require additional meetings, especially on the part of the Product Owner or the outward-facing members of the team, this structure is sufficient to maintain healthy intra-team communication without taking developers away from code any more than necessary.

Do you have another default meeting structure that you like? Let’s hear about it in the comments!

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Mark Rushakoff

git rebase vs. git merge: an agile perspective

Mark Rushakoff
Friday, May 17, 2013

At Pivotal Labs, we’ve been using Quandora for about 6 months as an easier way to archive and discover discussions about the hows and whys of consulting and software engineering here. Earlier this week, I asked my colleagues:

There are some git workflows that would have you regularly work in feature branches and then merge back into master only when the feature is ready for acceptance. However, on every project I’ve worked on at Pivotal, we have preferred to rebase and commit to master regularly.

Why prefer rebasing over merging?

I received some excellent answers.

Rasheed explains:

The more code diverges, the more difficult it is to integrate. If you want continuous integration, it’s a lot easier to do so on one branch, not many. It also drives out stories that are small, have the smallest actionable work, and are easy to accept. This leads to tight feedback loops.

Chad had some information to add to Rasheed’s answer:

Tight feedback loops are one of the things that Pivotal values.

We place priority on CI and small stories. This makes it easier to work on master – it’s not a big deal if it is accidentally broken, it’ll be easily fixed or reverted.

In my experience, we still do use topic branches when appropriate. E.g., in the middle of a story at the end of a day, or for a bigger feature that you don’t want to do in one commit, but would break mainline (master) with the intermediate commit. On my project, in this case, we usually merge –squash –no-commit onto master, to squash multiple commits on the topic branch into one commit on master.

Even in git, branching is still painful. The longer a topic branch lives, the harder it is to merge. Yes, you can rebase often, but that means you have to rewrite history to push the rebased changes to the server. This can cause confusion if the branch lives long and is worked on by multiple pairs or on multiple machines. So, it’s usually less net effort to just work on master, because we have good tests and can trust CI to quickly tell us if there’s any glaring logical merge conflicts that were missed. On teams without CI that rely solely on manual QA, this is much more of a risk and more expensive.

And Jacob, the director of our new Boston office, had this to say:

I’ve seen both patterns at Pivotal. Teams that rebase tend to be small and haven’t had a production release. Large teams have a quickly changing repo and feature branches make the history more readable. And teams that have released use feature branches to relegate incomplete code to a future release. They can also (in theory if not practice) easily roll-back an entire feature branch if something goes wrong in production.

Of course, as Rasheed mentions, trying to wrangle large unreleased changes causes all kinds of problems. Better to get faster feedback with smaller releasable features. If your team still feels it needs to have incomplete features in master, or needs to disable misbehaving pieces of the app, read up about feature switches and look into a tool like rollout or flipper.

So, it seems that in general, we tend to prefer rebasing because it helps facilitate some core concepts of agile software development:

  • Continuous deployment
  • Tight feedback loops
  • Small deliverables

Thanks to Rasheed, Chad, and Jacob for helping provide some great content!

  • 0 Shares
  • Share on Facebook
  • Share on Twitter

Gansen and Kunesh on Agile Development in the Obama 2012 Campaign

Paul Davis
Tuesday, May 14, 2013
Juan Camilo Bernal / Shutterstock.com

Juan Camilo Bernal / Shutterstock.com

 

The Obama 2012 campaign has been hailed as the most tech-savvy and data-driven to date, a sophisticated operation led by CTO Harper Reed. Reed had no problem finding developers eager to join the campaign — the challenge was finding people up for the formidable task before them. A Presidential campaign poses unique challenges: an environment where volatility is the only constant, developers must iterate often, yet there is little margin for error. To meet this challenge, Reed and his team placed an emphasis on people who could resolve problems and learn quickly, rather than focusing on a particular skill set.

Within this heady environment, Chris Gansen, the campaign’s Senior Software Engineer, and Jason Kunesh, Director of User Experience and Product, embraced the methodologies of agile software development.

While much attention was paid to the Obama 2012 tech team’s online voter outreach efforts, its on-the-ground campaign was equally impressive, turning information collected by volunteers knocking on their neighbors’ doors into grist for fine-grained data collection and analytics. This was undertaken by roughly “1000 neighborhood teams with tens of thousand of volunteer leaders,” according to Gansen.

A voter outreach campaign of such size and complexity demanded a bi-directional communication and data collection tool. Gansen and Kunesh were deeply involved in building the resulting product, Dashboard, which gave volunteer leaders a way to connect, organize, and report progress. Dashboard became a gold mine of voter-reported data, providing the campaign with insights and strategies to effectively communicate to voters and coordinate volunteers, at both a macro and micro scale. Gansen describes the lauded voter outreach and analytics platform as “the culmination of many years of trying to unify online and offline campaign organizing.”

Dashboard grew to one of the largest projects within the campaign, boasting 40–50 engineers divided between five separate tracks, or “Work Streams,” as they were known within the campaign.

From Agile Skepticism to Proven Success

Comfortable with the proven, tightly managed, topdown management model of campaigns past, veteran politicos were initially skeptical of agile development practices. “We fought really hard to get people in the campaign to embrace iterative development,” says Gansen. “In government, you tend to see technology coming from vendors, and measured by the quarter. When we would say, ‘we’re going to launch this and there are going to be bugs,’ a lot of people in the campaign hesitated. They hadn’t done this before, and we had to be flawlessly representing the brand of the President.”

“Software isn’t like that,” he says. “It can be messy, and so we had to show them through iterating, and being accountable to what we were doing, that things improved over time.” Despite their initial pushback, the clarity and transparency of this approach won converts among the skeptics. “We had great technologists who’d never worked on campaigns, and great campaigners who’d never participated in shaping software,” says Kunesh. “Before we understood each others’ worlds, agile was a way for us to agree on what we were building and how.”

It also allowed them to prioritize high-value goals and milestones, while being able to quickly change course when necessary. “Since the goals of the campaign change depending upon what phase of campaigning you are in, responding dynamically was a requirement,” says Kunesh. “The things that were important in February are meaningless at the end of summer, but they are the features you needed in the spring. Agile helped us stay focused on shipping the most important features.”

The campaign measured every conceivable metric — voter data, usage and performance at every level of the technology stacks, and project velocity, to name a handful of metrics. Gansen, Kunesh, and their teams turned to Pivotal Tracker to collaborate, track progress, and perhaps most importantly, communicate their workload and progress to other stakeholders in the campaign. Tracker’s emphasis on agile development methodology, prioritization and collaboration was well-suited to the environment. For the Dashboard initiative, each of the five work streams were divided into separate Tracker projects. Every feature on the Dashboard project had a corresponding Tracker story, and they used release markers heavily to represent milestones.

“With very constrained time, we had to decide quickly whether to improve a feature or axe it,” says Gansen. “In campaigns, you never make a decision that isn’t backed up with data, so being able to pair data-driven development with agile delivery helped build products that people actually used.”

Gansen found that Tracker and agile development practices helped the team make the case for decisions, clearly demonstrate what milestones had been reached, and accurately predict when upcoming milestones would be hit. “From a product perspective,” he says, “the two things that were most successful was the transparency and the accountability of quick, weekly releases. We were able to say, ‘this is what we’re going to do,’ and then a week later come back and say, ‘we did what we said we would do, and if we didn’t, here’s what came up.’”

It also eased the process of onboarding new developers, Kunesh says. “It gave us a common platform and methodology to follow,” he says. “We were building our team as we were building our products. Pivotal Tracker offered a built-in workflow that let us move engineers from team to team while still having a common process.”

Battle-tested and Unbowed

The members of that team have gone their separate ways, like the tech industry equivalent of a pack of sage cowboys riding off into the sunset. Products such as Dashboard now lay in hibernation until the next election season. Fortunately, the likes of Gansen and Kunesh are sharing the hard-learned lessons they learned during those intense 18 months.

Gansen, who now consults for the civic technology organization Smart Chicago Collaborative, has developed a healthy obsession with collecting and analyzing all the data one might have available. “Measurement is key because you can’t make decisions on information you don’t have,” he says. “Measure everything, and do it early on, because even with a small amount of data, you can make decisions. Over time, the data only grows more and more valuable.”

Both Gansen and Kunesh evangelize for the value of developing and deploying transparently within an organization, and using that openness to engage nontechnical stakeholders. It’s a matter of “Communication and building trust,” Kunesh says. “Operate openly and transparently with what you’re doing with the people involved in the process,” Gansen adds. “When a technical team is interacting with a nontechnical team,” he says, such clarity and transparency “is essential.”

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

7 Best Practices for Facilitating Agile Retrospectives

Jonathan Berger
Monday, May 13, 2013

Facilitating a retro is a very powerful role; it’s almost akin to being a courthouse judge (and stenographer). By asking questions, recording testimony, and shaping the debate, you mold and influence your teammates’ feedback in a very vulnerable and trusting space. If the Product team sets goals (like a Legislature) and Development and Design teams implement them (like an Executive Branch), a retro is a chance to reflect, interpret, and set future direction—not unlike a Judiciary. In practice, that means it’s important to be especially honest and impartial, and to double-check that you’re doing justice to the team’s best interest and the speakers’ intent. Here’re a few patterns I’ve observed that help make the difference between a good retro and a bad one.

1. Explain and Enforce format

At the beginning of a retro, take a minute to explain what’s going on—even for a seasoned team, but especially for a team with new members. “We’re here to reflect and improve on process—this is a safe space, and we’re oriented towards exposing issues and taking action.” If the team isn’t explicitly aligned on why they’re in the room, they can’t get the job done. Speaking up is high value (it ensures the retro is properly oriented) and low-risk (it only takes a minute).

2. Write Everything Down Verbatim

A retro is about listening. Whoever takes notes ought to be respectful of the speakers voice. That means recording their thoughts as faithfully as possible, without interjecting opinion or commentary. If you do need to paraphrase for brevity, be as faithful to the original comment as possible—don’t insert your view, you’ll get your own turn—and confirm that your version does justice to the original. “You said ‘INSERT COMMENT HERE’ and I wrote ‘INSERT PARAPHRASE HERE’. Is that right? “

3. Categorize carefully

If you choose to categorize items, be very conservative about pre-judging what it is you’re talking about. Sure, you’ve spent the last 25 minutes talking about a few categories, but don’t jump to putting names on the buckets—that’s prejudice, and it shapes opinions. Group like items (“Are these two frownies related?”), branch out from there, and labels will emerge. Be careful that the buckets aren’t too broad to be useful; it can be tempting to draw connections among almost everything, but ideally you’ll be slicing things a little thinner, facilitating more focused action items.

4. Action Items Should Have Intent

Unclear Action Items are worse than useless. One trick is to ensure a verb is the first word of every Action Item. By definition, every action includes a verb, but sometimes the verb is glossed-over or shorthanded in the retro. Everyone in the room understands what’s meant, but afterwards that may no longer be the case. Make sure that Action Items remain actionable when viewed later.

5. Action Items Should Be Falsifiable

Be sure to frame Action Items in terms that can be assessed as “done” or not. “Refactor more” isn’t useful a useful task, because there’s no way to meaningfully tell whether it’s done. “Improve the User model’s Code Climate grade from an F to a D” is actionable, and lets the team take small, achievable steps towards improvement. Also: use Code Climate, Errplane, New Relic, Airbrake or other instrumentation services to help put objective measures on code quality, performance, etc.

6. Action Items Need a Single Responsible Party

Not two people. Not “team” or “all”. One person. When an action item involves the whole team, find a volunteer to be the cop and enforce compliance. If one person isn’t responsible, then no one’s responsible. Addendum: review Action Items. Print them up and put them on the team stand-up board. Cross them off as completed. Review the list at the next retro.

7. What Happens In Retro, Stays In Retro

The retro should be a safe place. Active members of the team should the be ones in the room; sometimes it’s helpful to include stakeholders that aren’t present for most of the week (but that’s a judgement call). Action Items may be displayed publicly, but it’s preferable to only share the raw notes with the people present.

These practices aren’t laws chiseled in stone; they’re hacks and ideas borne of observations of patterns and anti-patterns witnessed in many, many retros. Do you agree? Disagree? Have juicy, anonymized stories supporting or contradicting? Let us know (and share your best retro stories) in the comments.

 

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Will Read

Releasing When It’s Ugly

Will Read
Saturday, May 11, 2013

This is yet another post where the tl;dr is “SHIP IT!” but with a Pivotal perspective. It can be easy to hold back an initial launch, especially when you’re trying to attract customers, not offend them. I submit that with the right tools, you can not only minimize the impact of releasing early, but create customer delight from the pain whereas perfection out of the gates would have produced none.

If your software can enable users to do the core thing you want, no matter how tangled the experience is, you should ship today under one condition: You must be able to ship again tomorrow, and the next day, and then two hours after that, and then the following Friday. In his post, 1.0 is the Loneliest Number, Matt Mullenweg talks about how that first hurdle is a big psychological barrier. He speculates that Apple employees were embarrassed at the known shortcomings of the first iPod, anxious to get a better version out before the first one even shipped. A conversation I had with my own PM was reminiscent of this. He, along with myself and the rest of the team, has a lot of pride in his work, and this project in particular. Understandably, he wants the first user to have the best experience possible. And while I agree that I want the user to be happy, I know that his experience could always be improved.

You could rephrase this idea to the proverb, “Perfect is the enemy of good.”, meaning that you shouldn’t let perfection get in the way of doing good things. Another quote, said by one of our team members struck true form most of us: “If you waited until it was perfect, you waited too long.” But I think the thought that really bring it home for me is this, “Would you rather they have an imperfect experience now, or that they have no experience at all?” I like this because if the user has an experience, the user learns something about you, and if you’re lucky (or directed through user testing), the user gives you feedback and you learn something too.

When you learn something, you can take action on it. Before that learning happens, you’re just guessing, shooting wildly in the air hoping to hit something. Delivering perfection on the first try must be near impossible with this method. Thus, like all things Pivotal, we do what we can to shorten the feedback loop – getting feedback, making a decision to act, and delivering must take as little time as possible. To do that in software, that means a few things.

First, priorities must be flexible. If something important comes along, you shouldn’t have to wait six months to get it in the next release, and you shouldn’t have to worry about the implications of  scuttling the sprint. We do this using our own tool, Pivotal Tracker which lets you easily drag the most important story to the top of the work queue.

Second, you must be able to respond quickly. If Joe is the only one who knows that code and he’s got six other high priority things to do today, you’re out of luck. That’s why we pair program and rotate, so that anyone on the team can pick up the next story that needs attention and everyone is familiar with all parts of the codebase that the team is responsible for.

Lastly, you need to be able to ship fast. There’re can’t be a two day release process on a thirty minute code change that only happens on Tuesday’s and Thursdays. It has to ship as close to now as possible, otherwise you’re wasting value by letting it sit on your virtual shelf. At Pivotal, we are always ready to ship because we don’t know any other way, our stories need reviewing, and that usually means shipping to some sort of prod-like environment, so we have to ship multiple times a day to keep the story feedback cycle small. If this process were anything other than dead simple, we’d need a pair on deployment full time just to keep up. Often times we configure our CI server to automatically deploy upon successful test runs, or in the worst case make it a manual one-click to deploy. The same technique is readily applied to production too. From there it’s up to the team to minimize downtime during deployments using whatever strategy is appropriate for the application.

But how does all this create customer delight from strife you ask? Picture the last time you withdrew cash from an ATM. You put your card in, punched some numbers, and hopefully the right amount of cash spits out. How would you rate that experience from these three choices? A) Meets Expectations, B) Excedes Expectations, C) Below Expectations. I’m guessing you didn’t get wowed by the ATM unless this was your first time taking cash out. It probably wasn’t below expectations since you got what you wanted. Rather, it was just a ho-hum experience.

What if instead, you put your card in, punch some numbers, and it buzzes for a while and shows you your receipt, but never gives you the expected cash money? Now you’re pissed. You wanted to use this service and it let you down. You really want cash, so you call the bank, planning to give them some strongly worded feedback. However you find yourself completely disarmed because the person on the other end of the line is really listening to you, not reading a script, and they quickly identify the problem, add back the money to your account, and tell you that they’re sending out a technician to fix the machine so that you and future customers have a much better experience in the future. WOW! I bet you’re thinking, “I would love to have a bank like that!” By shipping software that works in many cases, but has a compelling story to turn failures in to successes, you create a loyalty that’s a much better engine for your company than “Yeah, it meets my expectations.” Let them see you fix things. Let the users feel empowered to tell you what needs the most attention.

In the end, if you feel like you could ship, you should ship and feel good about it. You’re putting a valuable product in the hands of the users you want to help sooner. And if you’re doing it the Pivotal way, you can address their pain points quickly to change customer dissatisfaction into customer delight while being directed about how you spend your time and resources.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Will Read

“Drinking the Kool-Aid™” How We Create Value Alignment

Will Read
Saturday, May 4, 2013

Over my four year tenure at Pivotal Labs I’ve heard it a lot: “You guys really drink the Kool-Aid around here, don’t you?” and I’d shake it off with a joke, “Yeah, you can grab anything from the fridge you want, so long as it’s powder-based fruit punch.” I thought I knew what they were getting at, we’re pretty rigorous about things that are radically different from the way most software developers work – TDD, pair programing, and a common start time to name a few. But it takes more than common practices to build a culture that is so strong that it consistently elicits cult analogies.

First off, I’m not excited to be called a cult member – the term is derogatory and carries a lot of baggage with it. But if we look at this definition from Wikipedia, the word cult is a  ”term for a new religious movement or other group whose beliefs or practices are considered abnormal or bizarre by the larger society.” While we’re not “religious”, I would say we’re a “movement” to change the way software is made, and our practices intentionally push the boundaries of what most organizations are comfortable with. But what makes a cult is beyond practices.

I said I thought I knew what people were getting at, but I didn’t fully understand it until recently when I was sitting down with a candidate who was on the edge about accepting a job offer at Pivotal. She had been trough our usual rounds of interviews and had some really good questions. I did my best to answer them honestly. At the end she thanked me and offered, “If nothing else you’re all very consistent.” I indicated I wanted to know more and she shared that she had also talked to pivots at meetups and even overheard a couple of us on the train and apparently we “… all say the same things about [our] company.” She had to leave, so we said our goodbyes, but what she had said moments before was still washing over me.

How is it that we’re so consistent? Even when we think no one is listening we say the same things that we say when trying to attract new talent. For my specific situation, I wasn’t glossing over any of the parts of our company that are feeling growing pains; I felt confident that reality was not only good enough to stand on it’s own, but that it was the right thing to say. I wanted her to make an informed decision about coming to work with us – one of the hardest things to do is work with someone who doesn’t want to be there. I imagine school teachers feel this way a lot of the time, compared to other classroom settings where students opt-in.

Okay, being open is a pretty good thing, but it doesn’t fully explain how I was giving the same message that the rest of my coworkers were giving. Each person has a unique perspective on life, and there certainly isn’t someone coming over the speakers every morning telling us what to think. Upon reflection, I think the reason we have a common appreciation for our work place is because we pair program and rotate through projects. While I’m sharing my technical skills when at the keyboard, I’m also learning about what’s going on in the company, on the team, and with the individual between keyboarding times (see future post “Why Slow Tests Aren’t Always a Bad Thing”). Face-time, and pairing specifically, homogenates a workforce.

This constant sharing of ideas and perspectives quickly creates a value alignment without anyone ever having to say what those values are. We even pair when interviewing so we’re selecting for those values from day zero. And since we have this strong alignment, it’s easier to identify pivots as a group, or a “cult” if you must, rather than as individuals who works for a faceless brand. If you want your company values to be represented at all levels, you have to talk about and challenge those values every day so that there is shared understanding, and pairing is a great way to do just that.

As it turns out, that interview candidate accepted the job the day after we spoke. I also checked the fridge, and though it is well stocked with a variety of beverages including fancy tea, Kombucha, over thirty kinds of beer, and a plethora of juices, Kool-Aid is no where to be found. We understand why we’re at our job better than anyone else in the business, plus we can message those values even when we think no one is listening, and that’s a powerful thing to find in the workplace.

  • 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. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. ...
  9. 79
  10. →
  • 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 >