Una forma común de medir la productividad de equipos de desarrollo de software es mediante el uso de indicadores clave o KPI (key perfomanse indicator), tener una forma de medir la productividad actual nos permite darnos cuenta cuando ésta mejora o empeora en base a los parámetros que sean definidos. Por lo que en este artículo veremos cuales son los KPIs para equipo de desarrollo.
En este ejercicio veremos como automatizar la obtención de datos analiticos sobre los repositorios de código, que nos sirvan luego para fijar objetivos y calcular sus indicadores clave.
Usaremos Node.js como lenguaje de programación para backend y la integración de webhooks disponible en todos los repositorios de Bitbucket , aunque la misma logica puede aplicarse para otros lenguajes de programación y/o para otros servicios de alojamiento de repositorios.
Inicializar proyecto
$ npm init
Instalar Dependencias
$ npm i –save body-parser express mongodb
Crear Webhook
En el archivo principal (index.js por defecto)
Agregamos módulos e inicializamos la aplicación express:
const bodyParser = require(‘body-parser’)
const express = require(“express”)
const MongoClient = require(“mongodb”).MongoClient
const app = express()
Definimos constantes para la aplicación y base de datos:
const APPLICATION_PORT = 3000
const MONGO_URI = “mongodb://localhost:27017”
const MONGO_DB_NAME = “kpis”
Agregamos el body parser a express:
app.use(bodyParser.json())
Creamos la conección a la base de datos, creamos el endpoint para el webhook e iniciamos el servicio:
MongoClient.connect(MONGO_URI, { useUnifiedTopology: true }, (error, client) => {
if (error) throw error
console.log(“Connected to database: ” + MONGO_URI)
const mongo = client.db(MONGO_DB_NAME)
app.post(“/webhook”, (req, res) => {
console.info(“incoming webhook data”)
console.debug(req.body)
mongo.collection(‘kpis’).insertOne(req.body)
.catch((error) => { console.error(“error while saving:”, error) })
.finally(() => { res.end() })
})
app.listen(APPLICATION_PORT, () => {
console.log(`Listening at http://localhost:${APPLICATION_PORT}`)
})
})
Guardar y ejecutar la aplicación
$ node index.js
Al ejecutar el comando deberiamos ver en la consola algo similar a:
$ Connected to database: mongodb://localhost:27017
$ Listening at http://localhost:3000
Podemos probar que la aplicación funciona abriendo otra terminal y ejecutando:
$ curl -d ‘{“foo”:”bar”}’ -H “content-type: application/json” -X POST http://localhost:3000/webhook
Si todo esta correcto se guardara en la base de datos kpis un nuevo registro con el campo foo y el valor bar en la coleccion kpis.
Publicar Webhook
Ahora que sabemos que el webhook funciona correctamente podemos publicarlo en nuestro servidor y cambiar los valores coneccion de la base de datos de ser necesarios. Supondremos que ya esta publicado en la url: https://mi-app-kpis.net
Configurar el repositorio
Para configurar el repositorio en bitbucket:
Entramos en nuestra cuenta de bitbucket
Seleccionamos el repositorio a configurar
Repository Settings > Workflow > Webhooks
Add Webhook
En Title podemos poner KPIS y en URL ponemos https://mi-app-kpis.net/webhook
Hay una larga lista de eventos que pueden guardarse y la seleccion de estos dependera de que objetivos se quieran definir:
Por ejemplo, si uno de nuestros indicadores sera “cuanto tiempo se tarda un pull request en ser aceptado”, necesitaremos los triggers de Pull Request Created y Approved para luego comparar el tiempo entre uno y otro. Asi mismo podriamos agregar los eventos Pull Request Created, Approved y Declined para calcular el porcentaje de pull requests que se aprueban contra los que se declinan. Esto se debe realizar por cada repositorio al que queramos darle seguimiento.
Una vez que habilitemos el webhook en el repositorio obtendremos un payload con todos los datos del autor, la accion, los datos del repositorio, los datos del pull request o comentario en nuestra base de datos, de donde podremos comenzar a crear las consultas que creamos necesarias para definir nuestros reportes.
Te invito a leer sobre los Beneficios de automatizar reportes y te invito a preguntar cualquier duda o dejar tus comentarios.
Definir cuales son los mejores KPIs para equipos de desarrollo nos ayuda a medir la productividad para poder mejorar tiempos y poder atender mas proyectos con el mismo numero de manos.