Originally posted here.
At Teachers Pay Teachers (TpT) we put a lot of thought into how to get stuff done effectively*. We have a core set of guiding principles: we keep processes lightweight, remind ourselves that perfect is the opposite of good, and we have specific engineering principles we follow. We then let each team determine what works most effectively for them. I’m going to lay out how some of our product teams use JIRA to help collaborate, coordinate, and get stuff done.
As a Technical Lead on one of TpT’s cross functional product teams, I’ve worked on our Professional Development product as well as key pages across our core marketplace. I’d like to share with you a deep dive into the tools ecosystem we’ve used to successfully deliver new products to our amazing community of educators.
Our core team consists of a technical lead, five engineers (some are remote), a product manager, a designer and a community specialist. We also get lots of help from core engineering teams (infrastructure, API, web platform), our QA team (based in India), and sometimes even the legal department! Coordinating work across continents amongst such a diverse set of people is the challenge that we’re facing. We’ve been iterating on solutions by finding a good meeting cadence with some great tools to make sure those meetings are effective.
We follow a relatively standard agile workflow - weekly planning meetings where we calibrate our short term goals, daily standups, and weekly retrospectives. We also have quarterly planning meetings to realign and adjust our higher level goals (OKRs).
Finding tools that would enable us to easily collaborate without incurring overhead was one of our primary goals. This ties back to one of our overarching principles: keep processes lightweight. Currently we’re using the following ecosystem of tools:
We modeled our OKRs in JIRA with the following relationships: Objective:Epic, Key Result:Task, work related to a Key Result:Sub-Task. This hierarchy makes it easy to see how our daily work ladders up into our high level objectives. We use a Kanban board with swimlanes and the following columns: To Do, In Progress, In Review, QA, and Done.
JIRA is incredibly configurable, so we simplified our tickets to only “Name,” “Description,” “Assignee,” and “Epic Link” fields so that creating tickets is a seamless process.
When you have your entire team “living in tickets”, everyone becomes more efficient. If you’re an engineer, you tag PRs and commits with JIRA ticket IDs so that the code you’re writing is linked to tickets in JIRA. If you’re a Product Manager, you can always ensure that work is happening on the most important initiatives. If you’re in management, you can track the status of high level initiatives with ease! If you’re on the QA team you can easily find features that need testing.
We also use JIRA to help us run our weekly planning meetings. At the beginning of each week our focus for the week is translated into JIRA by pulling items from the Backlog into To Do. At the conclusion of each week, we release** to clean the board and generate status updates and provide transparency about what we accomplished to the rest of the organization.
JIRA is at the core of our daily standups. We’ve simplified status updates by using an awesome Slack integration named Jirio. We worked together with Sergei, the creator of Jirio, to create aliases. Our most frequently used alias is
/jirio standup which provides a customized update for each person listing all of the work they did the prior day***.
* We also put a ton of thought into what to do. To provide some helpful context on how we decide what to work on here at TpT, we use OKRs at both the company and team level. This means our company-wide yearly OKRs help inform our quarterly team objectives which help inform our weekly sprint goals which help inform our day-to-day work. Look for a blog post that details our planning process soon!
** We have continuous delivery set up - so a release in JIRA doesn’t actually correspond to a release of functionality but rather a duration of time.
*** The Jirio command to set this up is
/jirio setalias standup find project = $$project AND assignee = currentUser() AND modified<=-1d which assumes
/jirio setdefault :project MYPROJ was run in that channel.