• Stars
    star
    119
  • Rank 287,554 (Top 6 %)
  • Language
    Python
  • License
    MIT License
  • Created about 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Key Performance Indicators of product development teams.

Project Development KPIs

Project Development KPIs monitors quantitative key performance indicators (KPIs) of product development teams. It exports project development KPIs from Jira and Github to prometheus for monitoring in metrics services such as Grafana. The current list of metrics provided is listed below.

  • Lead & Cycle time based on a 5 issue rolling average.
  • Counts of unresolved issues in your backlog by issue type and status. This enables the measures below.
    • Tracking the number of Bugs and Technical Debt issues in the project over time
    • Ratio of items in WIP to number of developers
    • Number of products in WIP
    • Cumulative flow diagrams
  • Sums of additions and commits in open pull requests in your repositories on Github representing "inventory."

Why?

A fundamental part performing as a development team is to deliver quickly with few errors. We aspire to 'move fast and break nothing.'

Engineers love quantitative measures of performance on goals. Lead and Cycle time measure how fast a team is moving. Measures of technical debt and bugs measure how many imperfections they are responsible for. Measures of inventory give visibility into how code moves through the development pipeline.

Use

Build & test

To build and test the project locally simply run the following commands.

$ make
$ make test

Run

A docker-compose configuration is included in this repository to make getting started with the project as simple as possible. To use it, follow the following steps.

Define your environment

Using the sample environment as a base, fill in your Jira and GitHub credentials. You can ignore JIRA_CONTROL_SECRET and JIRA_CONTROL_PATH for now.

$ cp config/sample.env config/production.env
$ vim config/production.env

Configure your Jira project

To add your project for export, create a configuration JSON file.

$ cp config/sample_projects.json config/projects.json
$ vim config/projects.json

There you must specify the fields shown below.

  • project_name is the prometheus label of your project.
  • project_name_synonyms are any other synonymous labels for your group that can be found in manifest.json files.
  • project_id is the jira acronym of your project. It is the prefix of your issues before the -.
  • product_granularity is the issuetype in Jira that maps to a product being delivered. Current granularity levels are 'Story' and 'Epic'.
  • planning_workflow_statuses is an ordered list of workflow statuses an issue on your board goes through before reaching the In Progress status.
  • wip_workflow_statuses is an ordered list of workflow statuses an issue on your board goes through starting with In Progress until, but not including, your completed_state.
  • completed_status is your workflow's status for issues when the work has been successfully completed.

config/sample_projects.json provides a sample of this configuration.

To view your jira workflow, click 'View Workflow' next to the status indicator on any issue page. To check for the correct capitalization of each status check the transitions for an issue that can transition into the state your are interested as show below. Replace ORG_SUBDOMAIN with the jira subdomain of your organization and ISSUE_KEY with the key of the issue.

https://ORG_SUBDOMAIN.atlassian.net/rest/api/2/issue/ISSUE_KEY/transitions

Run with docker compose

To run with your newly configured environment, execute the following.

$ PDK_ENV=$(pwd)/config/production.env PDK_PROJECTS_CONFIG=$(pwd)/config/projects.json ./compose-ctl up

Viewing metrics with Grafana

By default, a grafana instance preloaded with templated dashboards will be started. Use your browser to view http://localhost:3000. The default username is admin and default password is admin. The dasboards are then accessible under the 'Home' tab.

Please note that it takes ~20 minutes for data to start showing up on the dashboards. You may need to change the timescales.

Templated Grafana dashboards

The files under dashboards/*.json contain two sample grafana dashboards described below.

Project Development KPIs dashboard

The Project Development KPIs dashboard presents all metrics in detail and is meant for finer-grained analytics. See an image of the dasboard with data below.

overview!

Project Development KPIs | Summary dashboard

The Project Development KPIs | Summary dashboard is meant to be displayed in a team area as a simple visual control. It's color coded stats recommend actions for maximizing flow.

overview!

I want to contribute!

If you want to contribute to the project please read CONTRIBUTING.md.

Copyright

Copyright (c) 2017 SoundCloud Ltd. | Process Optimization Group

See the LICENSE file for details.

More Repositories

1

roshi

Roshi is a large-scale CRDT set implementation for timestamped events.
Go
3,107
star
2

lhm

Online MySQL schema migrations
Ruby
1,808
star
3

lightcycle

LightCycle lets self-contained classes respond to Androidโ€™s lifecycle events
Java
706
star
4

soundcloud-custom-player

The SoundCloud custom javascript based player
JavaScript
699
star
5

chunk-manifest-webpack-plugin

Allows exporting a manifest that maps entry chunk names to their output files, instead of keeping the mapping inside the webpack bootstrap.
JavaScript
393
star
6

soundcloud-javascript

Official SoundCloud Javascript SDK
JavaScript
382
star
7

areweplayingyet

html5 audio benchmarks
JavaScript
312
star
8

cosine-lsh-join-spark

Approximate Nearest Neighbors in Spark
Scala
175
star
9

Axt

SwiftUI view testing library
Swift
163
star
10

Widget-JS-API

This is the official SoundCloud Widget Javascript API
JavaScript
149
star
11

delect

The Gradle Plugin for Dagger Reflect.
Kotlin
137
star
12

api

A public repo for our Developer Community to engage about bugs and feature requests on our Public API
136
star
13

periskop

Exception Monitoring Service
Go
123
star
14

soundcloud-python

A Python wrapper around the Soundcloud API
Python
95
star
15

split-by-name-webpack-plugin

Split a Webpack entry bundle into any number of arbitrarily defined smaller bundles
JavaScript
80
star
16

spark-pagerank

PageRank in Spark
Scala
74
star
17

intervene

A machine-in-the-middle proxy for development, enabling mocking and/or modification of API endpoints
JavaScript
71
star
18

normailize

Normalize emails like [email protected] into [email protected]
Ruby
67
star
19

SoundCloud-API-jQuery-plugin

SoundCloud API jQuery plugin
JavaScript
52
star
20

spdt

Streaming Parallel Decision Tree
Scala
51
star
21

twinagle

Twinagle = Twirp + Finagle
Scala
50
star
22

prometheus-clj

Clojure wrappers for the Prometheus java client
Clojure
49
star
23

simple_circuit_breaker

Simple Ruby implementation of the Circuit Breaker design pattern
Ruby
28
star
24

git-sha-webpack-plugin

Tag your webpack bundles with a Git SHA linked to the latest commit on that bundle
JavaScript
27
star
25

remixin

Mixin library for Javascript
JavaScript
24
star
26

cando

A simple access rights gem with users, roles and capabilities
Ruby
22
star
27

move-to-parent-merging-webpack-plugin

JavaScript
19
star
28

MinimalPerfectHashes.jl

An implementation of minimal perfect hash function generation as described in Czech et. al. 1992.
Julia
16
star
29

ogg

Mirror of http://svn.xiph.org/trunk/ogg/
C
11
star
30

sc-gaws

Glue code to wrap around AWS and do useful things in Go
Go
9
star
31

vorbis

Mirror of http://svn.xiph.org/trunk/vorbis/
C
8
star
32

collins_exporter

Simple Collins exporter for Prometheus
Go
8
star
33

dns-endpoint-pool

Manage and load-balance a pool of service endpoints retrieved from a DNS lookup for a service discovery name.
JavaScript
7
star
34

tremor

Mirror of http://svn.xiph.org/trunk/Tremor
C
5
star
35

soundcloud-ruby

Official SoundCloud API Wrapper for Ruby.
Ruby
5
star
36

periskop-scala

Scala low level client for Periskop
Scala
3
star
37

knife-scrub

Knife plugin to scrub normal attributes
Ruby
1
star
38

go-runit

go library wrapping runit service status
Go
1
star