Follow Zube on Twitter

Announcing Zube’s Public API

When we asked our top companies what feature they’d love to see, being able to access Zube programmatically was top of the list. From day one, the Zube web client has used our internal API, but now we’ve opened up all that power to you! Almost everything that can be done through the web interface can be done through our public API, which means you can easily enhance or automate your workflow.

How it works

The Zube public API is a full featured and powerful RESTful API. Like many of the best contemporary APIs, authentication is done with user tokens (JWTs) so all the requests that you make will be just like you had issued them from the web interface. You’ll be able to access and manipulate the same data and all changes will be properly attributed to you. The details of how to issue yourself a JWT and the full list of API endpoints can be found in our API documentation.

Responsible Usage

Being a responsible user of the Zube public API may be more complicated than you’re used to because of Zube’s seamless integration with GitHub Issues. If you are only making changes to data that are not shared with GitHub (local cards, epics, tickets, sprints), then the Zube API is very performant and you shouldn’t run into any trouble. However, if you’re making changes to data that are shared with GitHub (almost everything on a GitHub backed card), then the Zube API may allow you make changes faster than the GitHub API permits, and you may accidentally hit their rate limit before you hit our rate limit. So, when you’re making requests to the Zube API that have the side effect of changing data on GitHub as well, it’s best to add a second or two between requests.

We’re really looking forward to hearing all about the great things you’ll be able to do now that the Zube public API is live, so please feel free to reach out to team@zube.io with your success stories, or to support@zube.io if you run into any trouble. Happy coding!

Absolutely Nothing?

It might be easy to think that management is good for nothing, but it’s not management itself that’s the problem, it’s that old-school managers inadvertently kill team gel. In this blog post, I’ll share some of my musings of the role of management in contemporary tech companies. I’ve been giving the topic a lot of thought as we gear up for the release of our public API in the next few months. Since the release of our API will allow for even more automation than Zube already has, I’ve mostly been thinking about how the role of management can best complement a more highly systematized workflow. I hope that by the end of this post you’ll appreciate the fact that the role of good management is to create meaningful team goals and to encourage team gel.

Team Gel

You probably already know this, but team gel, above everything else, leads to success. People are social creatures and when you’re working with people you care about, trying to achieve a common goal, you can’t be stopped. Your team will go out of their way to help each other be successful. And when it comes to self-improvement and personal growth, there’s nothing more motivating than the support and encouragement of the people you care about.

As I write this, it’s the start of NBA playoffs, so I’ve been thinking about team gel in the context of basketball. Basketball is easier to think about than the workplace because the structure of the playoffs already imbues the players with purpose, to win the championship. We’ll come back to creating a sense of purpose for your team later on, but for now let’s just talk about team gel. Imagine you’re a star player on a basketball team that’s in the playoffs. It isn’t even a question if you care about your teammates. Of course you do. You need everyone to be firing on all cylinders; playing with intensity; playing unselfishly; playing as a team, because that’s how you win championships. You’ll go out of your way to help your teammates score points, and of course you’ll help defend if one of the opponents manages to slip by. Caring about your teammates extends off the court as well. You’re worried about your teammates’ health and wellbeing, and you’ll be there to support them so they can show up to the next game in top form.

People crave being part of a unified group, and their natural tendency is to form one, so why is so rare to find a unified team in the wild? The answer is that it’s very difficult for teams to form in the first place. Every team member has their own individual emotional needs and in order to get a group to unify, you have to meet everyone’s needs simultaneously. That means that there’s a lot of surface area and a lot of things that can go wrong. But since there’s a natural force driving them together, all you need to do is to remove all the impediments to formation and get out of the way.

A saltwater fish tank with mini coral reef

Let me tell you a story about my 125 gallon saltwater fish tank. Many years ago I became infatuated with saltwater fish tanks like the ones you see in fancy restaurants, so I bought the tank of my dreams, a 6 foot long, 125 gallon beauty. I added the fish and corals and boom, all the corals died. I did some research and figured out that the tap water I had been adding to the tank had too many impurities for the delicate corals to thrive, so I bought an expensive water purification system to fix the problem. But even with ultra pure water, the corals still wouldn’t grow.

If you aren’t the biggest saltwater tank aficionado, growing coral is very tricky. You have to get everything just right, so it serves here as a metaphor for team unity. I poked and prodded at the tank in a bunch of different ways after that, but nothing helped. There was no magic mixture of chemicals I could add to the water to bring it into balance. It turned out that the corals weren’t growing because of me, because I kept messing with the tank. I figured this out by leaving the fish tank alone for an entire year. It wasn’t the prettiest thing. The water turned greenish brown and algae covered the glass. But over time, the water cleared, the ecosystem stabilized, and the corals flourished. I succeeded because I had removed all of the impediments to formation and got out of the way.

Common Purpose

What kills team gel with 99.9% effectiveness is top-down micromanagement with a smidge of unnecessary reporting. A good manager doesn’t try to control what their team does, but helps them flourish on their own. Like a gardener tending to a garden. But facilitating team unity is only half the job, and this is where the gardener metaphor breaks down, because your team isn’t your product. Your product is what your team produces. You have to get your team to act as a cohesive unit, not just exist as one, and that means giving them a sense of purpose. For the teams in the NBA playoffs we were discussing earlier, their purpose was clear, but in the business world we’re going to have to create our own goals.

I’m a big fan of creating purpose by emphasizing the importance of what the team’s trying to accomplish. Each team, in my mind, should be working toward a goal that’s vital for the company’s success and that they’re uniquely qualified to do. Every team really should be of vital importance to the company. If the team isn’t important, then the team needs to be disbanded and the organization rejiggered so that every team is essential once again. This may be unattainable in some industries, but it’s certainly possible in highly creative fields like software development. It starts with good hiring, of course. You can’t have a high functioning team without high functioning people. After that you place the people together who complement one another well, and give the team a singular focus, their raison d’etre. For example one team could be the Hyper Growth team that looks for hacks that will 10x the number of new customers, while on the other end of the spectrum you could have the Bug Squashers, a team who has a zero tolerance policy for bugs of any kind in production. The important thing here is that each team has a mission statement that clearly defines who they are and a metric by which they can measure themselves.

As a manager, you’re the bridge between the team and the rest of the company, so a big part of your job is to make sure your team’s mission is aligned with the company’s objectives. This means that you need a way to communicate those objectives to your team in a way that bolsters their sense of purpose. This is easy to do with an Agile framework like Zube. I was asked recently what I think is a good workflow for Zube, and while it really does depend on your team, I’ll briefly describe a simple workflow that is in line with principles of good management.

A Reasonable Workflow

As a manager you really only want to do two things, create Epics and order the global Backlog. After that, your aim should be to get your team to assign the work to themselves. In a little more detail, you, as the manager, should create Epics that represent some unit of value to the company. You then need to fill out the Epic with a bunch of Cards (tasks) that need to be completed in order to realize the value of the Epic. You can either attach the required cards to the Epic yourself, or preferably, have your team spec out the work. From there, head over to the Sprint Board and organize the global Backlog. You’ll most likely collocate cards that are on the same Epic in the Backlog. You should think of the Backlog as an indication of what you think the company would find most valuable to be completed first, and order it accordingly.

When the workweek starts, create a new Sprint that’s one week long. Name the Sprint something the represents the intent of the work to be done, something like “20190429 - Signup Flow”. Then, work with your team to move the appropriate number of cards from the global Backlog to the sprint’s Ready column. As part of this process, you may want to add story points to the cards. And that’s all there is to it. Your team should be able to take it from there. During the week they’ll choose the cards that they find interesting, assign the cards to themselves, and move them down the board as their work progresses. When the next week rolls around, your team should have finished all the cards in the sprint and you’ll be ready to start the process all over again.

The workflow described here has been proven to be successful for many world-class software teams, but represents what I’d consider to be a high touch workflow. What you really want is for your team to take ownership over the process. You’ve worked hard to create a gelled team with purpose, don’t ruin it by getting overly involved. On the flip side, all the team members should be highly involved. A tool like Zube helps teams self organize and become more present with the current state of their project. They can see how their teammates are doing and how the week’s progressing as a whole. And that’s really the beauty of Zube. Zube makes it seamless for your entire team to work together to achieve their goals, whether they’re developers or not, which is essential if you want your team to maintain their gel.

Cards on the Kanban Board and the Sprint Board now show related GitHub Pull Request information right on the front of the card. Previously, it was possible to see all the related Pull Requests (and other cards) on the card show view, and that hasn’t changed. What’s new is that Pull Request information is now available on the front of the card, so you can get a handle on related Pull Requests and their statuses at a glance.

Kanban Board showing Cards with Related Pull Requests

Using Pull Requests

There are two common ways teams use Pull Requests. One approach is to use Pull Requests to scope code that’s supposed to be deployed together, perhaps as a release. These Pull Requests tend to be quite large and include lots of code changes. The benefit of using Pull Requests in this fashion is that once the Pull Request is merged, you know that your code is ready to ship. Another benefit is that there tends to be only a few Pull Requests open at a time, and there may only be one active Pull Request. This makes it easy to focus on getting your code ready to ship without extra management overhead. The downside is that your Pull Requests drag out for a very long time and become quite bloated with code that might not sum up to solve any business objective.

Another approach to using Pull Requests is to have them define a feature that you’re building. This approach is more popular with teams that have implemented continuous deployment. The benefit of having your Pull Requests define a feature is that the code that’s wrapped up into them works together to solve a business objective. Merging the Pull Request means that you’ve successfully implemented at least one unit of value for the company. This aligns itself more naturally with the philosophy of Agile project management, where a collection of user stories (Cards) sum up to describe a feature (Pull Request). The downside of using Pull Requests to define features is that there tends to be a lot of them around at the same time and you need to make sure none of them are slipping through the cracks.

We hope the new Pull Request information on the front of cards will make it easier for you to quickly determine which cards are part of your pull requests and let you ship with confidence, no matter what approach your team uses.

Custom tailor your notifications across every channel

You’ll love the new level of control you have over your notifications. You can now configure project and workspace notifications separately, so you can receive just the events you’re most interested in. We’ve also extended our Slack notifications with new events and restyled our own notifications.

Beautifully clear and concise

At Zube, we’re all about data clarity, and the style of our new notifications reflects that. Each notification is designed to be recognizable at a glance and fully digestible as quickly as possible. The new style unifies the way email and in-app notifications are presented so you can enjoy the same level of clarity in both places.

New Email Notification

Workspace Notifications

The great thing about being able to control your workspace notifications is that you can zero in on the boards that are most import to you. You can follow, not follow, or mute individual workspaces so you’re only subscribed to the most relevant cards. You can also go one level deeper and customize which specific events you’re interested in.

Project Notifications

We’ve also beefed up project level notifications for Tickets, Epics, and Triage Cards. Just like workspace notifications, you can configure your subscription level as well as select which individual event notifications you’d like to receive.

Slack Notifications

We’ve also enhanced the Slack notifications even more. You can specify exactly which status changes you’d like your channel to receive for Tickets, Epics, and Cards. In addition, you now have finer control over Triage and Workspace notifications.

Happy Configuring

The new notification system is very powerful because it gives you full control over which notifications you’d like to receive and where you’d like to get them. We highly recommend that you take a few minutes to configure your notifications just how you like them. There are quite a few places where you can do this, so be sure to check your Notification Settings and Triage Notification Settings at the project level, and then visit every workspace to adjust your workspace notification settings there. We really do hope that the clarity of our new notification system will bring a smile to your face.

The notifications you want, right where you want them

Keep your team in the loop with what’s happening on your Projects and Workspaces with Zube’s new and improved Slack integrations! You can now customize your Slack notifications based on Project or Workspace so every team gets the information they need without any extra noise.

Installing a Slack integration

To install a custom Slack integration, navigate to the Project Settings page and click the Integrations tab. Then, click the Create a New Slack Integration button to open the Slack Channel Integration builder. In the integration builder, chose the Project or Workspace scope and then select which notifications you’d like to receive in Slack.

Slack Channel Integration Builder

After you’ve configured your integration, click the Add to Slack button and follow the directions to select the Slack workspace and channel for your integration. Once you’ve authorized the integration, Zube will begin sending your custom notifications to Slack.

You can create unlimited Slack channel integrations to send custom notifications to everyone on your team.