Bitbucket Analytics: Why, What and How to Use

October 4, 2022
#Analytics#Bitbucket#Reporting
7 min

It’s no secret that the business world has adapted to making decisions based on data. We analyze conversion and churn rates, track the number of active users and average revenue. We know how much we spend on advertising and how it correlates with web traffic growth.

But what about software development? In contrast to sales and marketing, the world of software engineering is less familiar with the same approaches, and all project development data remains hidden within repository management tools like Github, Gitlab, Bitbucket. It is widespread for software development decisions to be based on theory, instincts, experiments, or gut feelings. Sometimes they are backed up by a few numbers on commits or pull requests, but it is always tedious and time-consuming. Besides, it sometimes causes data errors due to manual work.

A combination of all of these factors can negatively impact the development of any product, leading to:

  • Hidden inefficiencies and costs as invisible bottlenecks hamper team performance and productivity
  • Inability to determine if everyone is on the right track due to lack of transparency and visibility in projects and teams
  • Investing time in manual work instead of new ideas, core tasks, or favorite activities
  • Slow development velocity, missed deadlines, and disappointed stakeholders

And it is up to everyone to decide how long this list should continue.

To simplify work and make processes of software development more transparent many organizations rely on a data-driven approach and comprehensive analytics of commits and pull requests.


64% of companies mark that improved efficiency and productivity as the top benefit of data analytics, while 56% say about faster, more effective decision-making

Source: Finance Online


What is a data-driven approach in software engineering?

Data-driven development means using and analyzing commits and pull request data as a primary source of information for decision-making. In this approach, engineering processes are viewed from a transparent, accurate, and unbiased perspective by defining and using metrics such as KPIs or OKRs. It lets everyone know where the business is moving and how personal work contributes to its success.

However, despite focusing on raw numbers and statistics, data-driven development also relies on people. It is not enough to count lines of code, the number of commits and pull requests, or to determine how long it takes to resolve pull requests. To be successful, metrics-based approaches need individuals and teams to understand the data, analyze it, and use it for continuous learning and improvement.

What are the pros of using data in software development management?

1) Processes transparency and optimization

Collecting and analyzing commits and pull request data on an ongoing basis gives engineering managers a clear view of what is going on in projects and within their teams. It helps to explore similar patterns and find ways to improve them.

2) Predictability of development and time-to-market

Graphs and reports empower teams to find hidden inefficiencies, resolve everyday challenges, and speed up the development process without affecting code quality. It helps reduce time-to-market and deliver on promises.

3) Informed decision-making based on well-rounded insights

Analyzing real-time data with past patterns and getting deeper insights across project development can confirm a new strategy’s success or force you to revisit your choices.

4) Keeping everyone on the same page

Providing greater visibility into in-progress work and enabling developers to see the impact of their efforts on overall project success ensures the commitment of team members as well as keeps them motivated and moving in the right direction.

How to implement a data-driven approach in Bitbucket?

Bitbucket is a real storehouse of information on everything happening inside engineering processes. Unlocking it is all that is required to identify bottlenecks, understand why things go wrong, and find solutions. Unfortunately, Bitbucket does not provide any functionality that allows getting a quick overview of what is happening on projects and within teams.

Here come data-driven apps like Awesome Graphs for Bitbucket that automatically pull data from Git repositories and empower data-driven software management.

Awesome Graphs for Bitbucket helps engineering managers to monitor and measure the activity of the projects and developers from the whole Bitbucket by transforming invisible development activities into easy-to-understand insights and reports. Apart from this, the app:

  • seamlessly integrates into Bitbucket and displays data on the client’s side. No need to expose your source code outside Bitbucket or worry about security issues
  • gives a lot of out-of-the-box reports without requiring complex configuration and additional analytics knowledge
  • exports data to a CSV file or via REST API to create custom graphs or dashboards and merge them with the data from other apps

When using Awesome Graphs for Bitbucket, project planning becomes more accurate since it provides an overview of the project’s dynamics and helps to identify bottlenecks that hold teams back. Apart from this, it is possible to track how your team’s productivity increases compared to the previous period, view the engineering contribution for each repository and project, or recognize hidden talents.

Start a 30-day free trial to discover analytics’s benefits to your projects and teams.

 

Get Even Awesomer Graphs for Your Bitbucket Cloud

September 6, 2022
#News#Bitbucket
4 min

In Bitbucket Cloud, behavior of apps is defined by the app context. There are two app contexts: personal and workspace.

  • With the personal context, you can use the app in all repositories to which you have access, but other users can’t use the app installed by you.
  • With the workspace context, you can use the app only in repositories in a specific workspace the app was installed in, so all users who have access to the workspace can use the app without installing it.

It’s time to move to something new

At the moment, the Awesome Graphs for Bitbucket Cloud has separate versions of the app for each of the contexts.

We’ve been working hard on the development of both versions, but have decided to focus solely on the workspace context version, as it provides us with more opportunities to make an overall better app for the users.

It’s a bit different, but much better

The new version is installed to a particular workspace and available to everyone who’s got access to it.

The transition of the app context allowed us to extend the app’s capabilities and add new features, improve security and an overall experience.

Just to name a few, here’s what’s already in the new version:

  • Graphs and Reports are available for whole workspaces as well as individual repos
  • Lines of code statistics in addition to commits stats
  • New approach to the rate limits resulting in better app stability
  • Bug fixes and minor improvements here and there

Should you do anything at all?

If you’re not sure, which version of the app you’ve been using and if you need to do anything at all, you can check it the Workspace settings → Manage Installed apps:

  • The old one has the old three-color logo and the installation context is personal. If that’s what you have, then read further, and we’ll show you what to do.
  • If you have an orange and white logo app with workspace context, then you are using “the right” version already — good for you!

manage installed apps in Bitbucket

How to get the “right one”?

Rather than going through a complex migration scheme, you just need to install the new app to your workspace — one click, and you’re all set.

P.S. Don’t forget to uninstall the old one. (smile)

What’ll happen to the old version?

The personal context version of the app will be deprecated and no longer maintained after November 1, 2022, so hurry up and install the new app to your workspace now!

In case you need assistance or have any questions, please feel free to contact us.

Analyze How Code Review is Going in Bitbucket Data Center

September 27, 2021
#Bitbucket#Analytics#How To
9 min

Awesome Graphs is one of our most popular apps. It’s a solution that extends Bitbucket, a platform that teams use to host Git repositories and collaborate on code.

Awesome Graphs helps engineering leaders and software teams improve their own processes and deliver products faster by transforming invisible development activities into easy-to-understand insights and reports.

One of the keys focuses of the app is the code review processes analytics. We would like to tell you which features support this use case and how you can benefit from the app. Keep reading if you are interested in:

  • Seeing how actively your team members review code
  • Analyzing what developers may need to improve their work patterns and who’s doing a great job
  • Learning what reviewers are most active and diligent
  • Knowing the average time taken to resolve pull requests.

Code review analysis

code review analysis in bitbucket

The Contributions Report analyzes activity in pull requests (tasks, comments, needs work/approved/declined statuses). It helps you understand:

  • What developers create high-quality code and who might need to improve their approach to work. E.g. when an engineer has fewer taskscomments, and needs work flags in their pull requests, it suggests his work is approved as it is or with minor changes and he creates code of high quality.
  • What reviewers are thorough when they review the work of developers. E.g. diligent reviewers come up with suggestions and improvements, so they have more tasks and comments than others.
  • How the dynamics of code review changes over time. E.g. you can see if the number of pull requests with Needs work flags is getting bigger or smaller if the number of tasks in pull requests is increasing or decreasing over time.

Learn more

The average time taken to resolve pull requests

pull requests resolution time report in bitbucket

Another report, Resolution Time Report, shows the average time taken to resolve pull requests. This is helpful to capture trends in resolution time. It displays resolution times of merged and declined pull requests separately. With this report you can:

  • Notice spikes in resolution time and then dive in to see what went wrong
  • See if an average resolution time is high for a long period of time – it can be a signal to look into your code review process and determine what causes delays
  • Monitor how changes in your processes affect the speed of code review.

Learn more

Knowledge sharing indicators

reviewers of pull requests report in bitbucket

The Pie Chart Report is a handy way to check if all developers in your team are involved in the code review. This report shows the breakdown of pull requests by different statistics types.

Grouped by reviewer, the Pie Chart Report shows the following:

  • How many pull requests each person reviewed. These metrics help understand how much everyone contributes to the project.
  • Whether all people review code or there are one or two who are doing all job. This is an indicator of poor knowledge sharing.
  • Who is too busy reviewing all pull requests of their team. These people can become a bottleneck that slows the delivery time, because they’re not available for immediate review.

Learn more

Pull requests with a too long or too short resolution time

pull requests resolution time report in bitbucket

The Resolution Time Distribution Report visualizes pull requests grouped by the time taken to merge or decline them and gives an idea of the most frequent resolution times on your project. Using this report. you can easily:

  • find pull requests with the longest resolution time to check the reasons for the delay
  • see pull requests with the shortest time to resolve them to investigate whether they were checked as appropriate
  • predict the resolution time for the future pull requests.

Learn more

Exporting pull requests for the future processing

With Awesome Graphs, the historical data can be exported to a CSV file right on the People page.

exporting pull requests from bitbucket

As a result of the exporting, you receive the CSV file with the list of pull requests (alternatively, the list of commits) with their details about the author, reviewers, state, the date they were created and last updated. The files can be processed in Excel or integrated with analytics tools like Tableau, Power BI, etc. to create custom graphs and dashboards and merge with the data from other apps.

Learn more

What other reports do you need?

Awesome Graphs already has a wide range of graphs and reports that help you answer various questions about project development and the work of your team in Bitbucket. We are open to your feedback and appreciate hearing about what you need. So if you have a problem that you think Awesome Graphs can help you with, contact us – we actually listen.

Try Awesome Graphs for free

 

Pull Request vs. Merge Request

June 28, 2021
#Analytics#How To#Bitbucket
7 min

When it comes to choosing a Git management tool, you need to consider various factors as it significantly affects the workflow. One of the most important aspects is how collaboration is organized in this application. Pull Request in Bitbucket and GitHub or Merge Request in GitLab are the features made for more convenient code review. These features are equivalent as they both do the same git merge command to merge feature branches or forks with the existing code.

You probably want to ask why you need to use a special tool for something that a git command can do, but convenience and efficiency are what makes a difference here:

  • Your team ends up having a much higher quality code in your project as everyone on your team can check it and merge branches only after the code is good enough and meets your coding standards.
  • You get a well-organized process where you can leave comments and see the changes in one tool. So there’s no need to use emails and other communication channels to discuss features. It works perfectly, especially for distributed teams, no matter whether they are located – in different rooms or cities.
  • This feature allows you to get some insights into how effective your team is.

Working with Pull Requests in Bitbucket

Let’s look at how to use pull requests in Bitbucket and what information about your team performance you can get from it.

For instance, one of your developers has just finished working on a feature in a dedicated branch. Now, this feature should be merged with the development branch. But first, other team members should review it.

So, your developer navigates to Create pull request, chooses the feature branch as Source and the development branch as Destination. The developer can add the Title and Description of the pull request and choose who will be Reviewers of it or leave it without a particular reviewer.

create pull request in Bitbucket

Then a discussion of the feature begins. Each reviewer can:

  • see what files have been edited, what commits have been made
  • see what’s been changed since they last reviewed so that there’s no need to re-review everything again
  • add comments to the whole pull request or a particular code line and discuss it

comment pull request or code line in Bitbucket

  • decline a pull request or set Needs work status
  • merge a pull request and delete the source branch if needed.

merge pull request in Bitbucket

Working with Merge Requests in GitLab

Now let’s find out how to use the Merge Request feature in GitLab to improve the code review process.

Navigate to Merge Requests and click New merge request. 

create merge request in GitLab

Choose the Source branch that you want to merge and the Target branch which will be the destination.

merge source branch with target branch

Same as Bitbucket, GitLab allows you to choose who will review this request. It’s also possible to see the changes in edited files, the commits included in the merge request, discuss the feature, and make suggestions.

When reviewers approve the changes, click Merge to merge branches.

how to merge branches in GitLab

Insights on Your Team Performance in Bitbucket

While working in Bitbucket, you can also evaluate your team performance using the Awesome Graphs for Bitbucket app. It is possible to:

contributions report in Bitbucket

Improve your development process

Such collaboration while working on the project positively affects the quality of the code your team produces. Moreover, pull requests definitely reduce the number of bugs in the code.

As a result, the quality of your product gets better, and your customers become much more satisfied. Thanks to the detailed analysis of your team’s performance using Awesome Graphs for Bitbucket app, it’s possible to improve it and increase the speed of the development process.

Try it for your team!

How to Search for Commits in Bitbucket Server and Data Center

May 17, 2021
#Reporting#Analytics#How To#Bitbucket
14 min

Bitbucket has greatly improved the development workflow of teams and companies that use Git with its friendly interface and features. However, sometimes it lacks opportunities for convenient work with commits. Have you ever wasted time scrolling the mouse wheel trying to find some of the old commits? Luckily, there are some ways to make your life easier and search for commits in Bitbucket. In this article, you will learn how to find:

  • projects and repositories in your Bitbucket that a certain user contributed to (filter by author)
  • commits that were made long ago to a repository with high activity (filter by time)
  • the commits of a user made to a repository or project (filter by author and project/repo)
  • all the commits made to a project (filter by project).

We’ll also show you how to automate the process using the Bitbucket REST API, as well as the Awesome Graphs REST API and the Export to CSV feature.

Sourcetree search opportunities

Sourcetree is an Atlassian desktop client for working with Git and Mercurial repositories. It provides an opportunity to search for commits by an author, a commit message, and a file.

search for commits by an author, a commit message, and a file in Sourcetree

Its user-friendly interface helps find commits easier, but it’s impossible to look at them for all repositories at once as you need to go to each repo manually. Besides, it needs to be installed on each computer separately and is not available for Linux.

Use Awesome Graphs to search commits in Bitbucket

Awesome Graphs for Bitbucket helps engineering leaders and software teams improve their processes and deliver products faster by transforming invisible development activities into easy-to-understand insights and reports. Convenient search for commits isn’t its main purpose, but a nice bonus.

This app indexes information about commits, which makes searching by author, time, or repository faster and does not affect even huge Bitbucket instances (70,000+ repositories).

The Contributions graph shows the activity of each developer during a year as a calendar. So it’s an easy way to find all the commits made by a person to all projects and repositories. Here you can also filter the commits of a particular user by time period (up to a year) and by project or repository.

Contributions graph in Bitbucket

Below the calendar, there is a list of all commits made during the selected time span. By default, it’s a year, but it’s possible to choose any period to display.

activity stream in Bitbucket

In order to find the commits made to a certain repository regardless of their author, use the Activity graph. It shows all commits for the last year or a shorter time span in the Activity section below the charts.

contributor activity in Atlassian Bitbucket

And if you need to find commits made long ago, the Top Committers Report can be a good solution. In general, its use-case is to find the most active contributors of the project or repository, but you can configure the Period of time and choose Authors of the commits you’re searching for.

top commiters report in Atlassian Bitbucket

As a result, it shows the list of all commits for the selected time span in the Activity section below as well as their distribution in time.

Top Committers report in Atlassian Bitbbucket

Export commit data to CSV

Awesome Graphs for Bitbucket also gives you the capability to export commit data to CSV in different ways. As a result, you’ll get a list of commits with their details:

export commit data to CSV

To export raw commit data to CSV directly from Bitbucket, you need to go to the People page. There you’ll notice the Export menu at the top-right corner, where you can choose CSV.

Developers list in Atlassian Bitbucket

Another way to export commit data to CSV is to use the Awesome Graphs REST API, which allows you to automate the processes and retrieve this data easier using the dedicated resources.

You can access the in-app documentation (accessible to Awesome Graphs’ users) by choosing Export → REST API on the People page or go to our documentation website.

Search for commits in Bitbucket via REST API

Bitbucket REST API provides a possibility to get the list of all commits in the repository using this request.

https://example.com/rest/api/1.0/projects/exampleprojectkey/repos/example-repository-slug/commits

The request can be extended by specific parameters to receive a more accurate result. For instance, since and until options help to get the commits made after or before a certain commit, or between two commits defined by their IDs. Merges parameter controls how to handle merge commits – exclude merge commits, include both merge commits and non-merge commits, or only return merge commits.

https://example.com/rest/api/1.0/projects/exampleprojectkey/repos/example-repository-slug/commits?merges=exclude&since=ea3eea9dcbd&until=f4240bf022a

As a result, you receive a JSON response with the list of the commits and their IDs, author’s names and email addresses, commit messages, and parents.

{
    "values": [
        {
            "id": "f4240bf022a69815241a883c03645444b58ac553",
            "displayId": "f4240bf022a",
            "author": {
                "name": "Max Desiatov",
                "emailAddress": "max@desiatov.com"
            },
            "authorTimestamp": 1557113671000,
            "committer": {
                "name": "Tomer Doron",
                "emailAddress": "tomer@apple.com"
            },
            "committerTimestamp": 1557113671000,
            "message": "Add internal section link to README.md (#71)",
            "parents": [
                {
                    "id": "ea3eea9dcbd46887d846696261f54b3d2f74fecd",
                    "displayId": "ea3eea9dcbd"
                }
            ]
        },

Alternatively, you can use the Awesome Graphs REST API that provides global, user, project, and repository data. The solution allows you to retrieve data faster while decreasing the load on the instance compared to Bitbucket REST API. 

Use this request to get a list of commits from the specified repository.

https://example.com/rest/awesome-graphs-api/latest/projects/exampleprojectkey/repos/example-repository-slug/commits

The response will look as follows:

{
  "values": [
    {
      "user": {
        "emailAddress": "yorlov@stiltsoft.com",
        "displayName": "Administrator",
        "name": "admin"
      },
      "author": {
        "displayName": "admin",
        "emailAddress": "yorlov@stiltsoft.com"
      },
      "authorTimestamp": "2020-03-05T22:58:18Z",
      "linesOfCode": {
        "added": 1,
        "deleted": 0
      },
      "parents": [],
      "repository": {
        "slug": "Commit Hook",
        "name": "commit-hook",
        "project": {
          "key": "TESTCONTAINERS",
          "name": "Testcontainers",
          "type": "NORMAL"
        }
      },
      "id": "9f2e24a147bb8f5a5a3d10b692703cc5784df8b5"
    },
  ],
}

Learn more about the available REST API resources.

Find out what works best for you

We’ve described different ways to work with commits effectively:

  • Sourcetree as a free application that is suitable for searching among a small number of repositories.
  • Awesome Graphs for Bitbucket add-on as a tool with wide search opportunities and various analytical features.
  • Bitbucket REST API as a more advanced and technically demanding option.

Try them all and find the best solution!

You can also read how other teams benefit from using Bitbucket in a bundle with Awesome Graphs:

 

Pull Request Analytics: How to Visualize Cycle Time / Lead Time and Get Insights for Improvement

March 30, 2021
#Reporting#How To#Bitbucket
12 min

Cycle Time / Lead Time is one of the most important metrics for software development. It can tell a lot about the efficiency of the development process and the teams’ speed and capacity. In the previous article, we showed you how to get a detailed report with the pull request statistics and Cycle Time / Lead Time calculated on the repository level. 

Today we’ll tell you how to use this report:

  • How to visualize the pull request data.
  • What things to pay attention to.
  • What insights you can get to improve performance.

Please note that we define Cycle Time / Lead Time as the time between the developer’s first commit and the time it’s merged and will refer to it as Cycle Time throughout the article.

Analyzing your codebase

First, you need to understand the current state of affairs and how it compares to the industry standards. According to the Code Climate’s research, the industry-wide median for Cycle Time is 3.4 days, with only the top 25% managing to keep it as low as 1.8 days and the bottom 25% having a Cycle Time of 6.2 days.

© Code Climate

To get a better understanding of the development process, it might be helpful to look at the teams’ dynamics and monitor the changes over time. The following chart shows how the average Cycle Time changes month after month with a trend line, so you can see objectively whether the development process is getting faster or slower and check how your rates compare to the industry average. Follow the instructions to build this chart.

For a more precise analysis and evaluation of the current code base, you can also use the Cycle Time distribution chart that provides pull request statistics aggregated by their Cycle time value, making it easy to spot the outliers for further investigation. Learn how to build this chart.

In addition to the Cycle Time, Awesome Graphs for Bitbucket lets you analyze the pull request resolution time out-of-the-box. Using the Resolution Time Distribution report, you can see how long it takes pull requests to merge or decline, find the shortest and longest pull requests, and predict the resolution time of future pull requests with the historical data.

While Cycle Time serves as a great indicator of success and, keeping it low, you can increase the output and efficiency of your teams, it’s not diagnostic by itself and can’t really tell what you are doing right or wrong. To understand why it is high or low, you’ll need to dig deeper into the metrics it consists of. The chart below gives you a general overview of the pull requests on the repository level and shows the Cycle Time with the percentage of the stages it’s comprised of (which we’ll discuss in detail in the following paragraphs). You can build a chart like this using the Chart from Table macro, available in the Table Filter and Charts app.

Breaking down the Cycle Time

We break down Cycle Time into four stages:

  • Time to open (from the first commit to open)
  • Time waiting for review (from open to the first comment)
  • Time to approve (from the first comment to approved)
  • Time to merge (from approved to merge)

Now we’ll go through each of these stages, discussing the things to pay attention to.

Time to Open

This metric is arguably the most important of all, as it influences all the later stages and, according to the research, pull requests that open faster tend to merge faster.

Long Time to Open might indicate that the developer had to switch tasks and/or that code was rewritten, which might also result in large batch sizes. In one of the previous articles, we described how you can check the size of your pull requests in Bitbucket, so you can also use it for a deeper analysis.

One of the things you can do to improve your Time to Open is to decrease the pull request size to be no more than 200 to 400 lines of code. Thus you’ll influence each stage of the cycle, as the smaller pull requests are more likely to be reviewed more thoroughly and be approved sooner.

Time to Review

Time to Review is a great metric to understand if your teams adopted Code Review as part of the daily routine. If it’s high, then it might not be part of their habit, and you’ll need to foster this culture. Another reason might be that the pull requests are not review-friendly and the reviewers procrastinate dealing with them. You can change this, once again, by keeping the pull request size small and by writing a reasonable description so it’s easier to get started with them. If the long Time to Review rate is caused by organizational issues, then it might require reprioritization.

Time to Approve

This is the stage you don’t really want to minimize but rather make it consistent by reducing inefficiencies in the code review process. While there are many strategies for Code Review, there is hardly any industry standard for Code Review metrics, so you’ll need to focus on the organization of the process and try to find a way to get constructive feedback.

Time to Merge

Long Time to Merge might be an indicator that there are obstacles in the delivery workflow. To improve it, you need to find out if there are any blockers in the process, including manual deployment, and check if your tooling satisfies your current needs.

Wrapping up

Cycle Time’s importance is difficult to overestimate, as this metric can tell a lot about the way you work, and controlling it, you can optimize the development process and deliver faster.

Once again, we built the initial pull request report with the help of the Awesome Graphs for Bitbucket app as a data provider and used the Table Filter and Charts for Confluence app to aggregate and visualize the data.

These are just a few examples, but you can get much more even from this one report. Check out the other guides for charts based on data from Bitbucket. Share your feedback and ideas in the comments, and we’ll try to cover them in future posts.