Slide 1

Slide 1 text

Instrumentación de 
 Producto (101) SeedRocket - Noviembre 2018 @diegomarino — [email protected] 1

Slide 2

Slide 2 text

¿Por qué querríamos almacenar todas las interacciones de nuestros usuarios? •Para consolidar datos de forma única y confiar plenamente en ellos •Actualizar KPIs en tiempo real •Tener insights con los que mejorar nuestro producto •Ver un timeline de las acciones de nuestros usuarios •Crear tareas para ventas y soporte de forma automatizada 2

Slide 3

Slide 3 text

¿No tenemos ya hoy esa información en nuestra base de datos? •Probablemente no. En tu base de datos guardas principalmente objetos y relaciones entre ellos, pensando más en dar un servicio que en generar informes •Si *dominas SQL*, puedes hacer consultas que te devuelven detalles sobre los objetos, métricas de los mismos, o informes con estados y/o totales… pero no puedes obtener respuestas a consultas complejas de forma directa: • ¿Por qué cayó la conversión la semana pasada? • ¿Cuál es el camino más habitual entre los usuarios que convierten? ¿En qué momento abandonan el resto? • ¿Qué campaña de captación me está dando mayores retornos? etc,etc,etc… 3 Demo

Slide 4

Slide 4 text

Madurez 4 No se recogen métricas, o los datos no son fiables :( Informes básicos bajo demanda. SQL es la principal interfaz Informes dinámicos segmentados y datos unificados en diferentes servicios Tareas y eventos generados automágicamente

Slide 5

Slide 5 text

Ejemplo básico de instrumentación analytics.track("Subscription Started", { plan: "Pro Annual", amount: "12900", }); 5

Slide 6

Slide 6 text

Esquema final 6 Aplicación Gateway de datos Event Analytics (Amplitude) CRM Soporte (Intercom) …

Slide 7

Slide 7 text

7 Ejemplo real Demo

Slide 8

Slide 8 text

8 ¿Por qué la mitad de mis usuarios no crean ni un widget?

Slide 9

Slide 9 text

9

Slide 10

Slide 10 text

Hipótesis •La webapp no les carga 10

Slide 11

Slide 11 text

Hipótesis •La webapp no les carga •La webapp les carga, pero el JS falla en algún punto 10

Slide 12

Slide 12 text

Hipótesis •La webapp no les carga •La webapp les carga, pero el JS falla en algún punto •La webapp carga, el JS no falla, pero no saben por dónde empezar 10

Slide 13

Slide 13 text

Hipótesis •La webapp no les carga •La webapp les carga, pero el JS falla en algún punto •La webapp carga, el JS no falla, pero no saben por dónde empezar •La webapp carga, el JS no falla, saben cómo crear un widget pero no tenemos servicios que les interesen 10

Slide 14

Slide 14 text

Hipótesis •La webapp no les carga •La webapp les carga, pero el JS falla en algún punto •La webapp carga, el JS no falla, pero no saben por dónde empezar •La webapp carga, el JS no falla, saben cómo crear un widget pero no tenemos servicios que les interesen •La webapp carga, el JS no falla, saben cómo crear un widget, tenemos servicios que les interesan pero no pueden crear una integración con el servicio 10

Slide 15

Slide 15 text

Hipótesis •La webapp no les carga •La webapp les carga, pero el JS falla en algún punto •La webapp carga, el JS no falla, pero no saben por dónde empezar •La webapp carga, el JS no falla, saben cómo crear un widget pero no tenemos servicios que les interesen •La webapp carga, el JS no falla, saben cómo crear un widget, tenemos servicios que les interesan pero no pueden crear una integración con el servicio •… 10

Slide 16

Slide 16 text

Hipótesis •La webapp no les carga •La webapp les carga, pero el JS falla en algún punto •La webapp carga, el JS no falla, pero no saben por dónde empezar •La webapp carga, el JS no falla, saben cómo crear un widget pero no tenemos servicios que les interesen •La webapp carga, el JS no falla, saben cómo crear un widget, tenemos servicios que les interesan pero no pueden crear una integración con el servicio •… •Etc, etc hasta completar el proceso de creación de widgets 10

Slide 17

Slide 17 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 18

Slide 18 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 19

Slide 19 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 20

Slide 20 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 21

Slide 21 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 22

Slide 22 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 23

Slide 23 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 24

Slide 24 text

11 0 25 50 75 100 Fallo 
 general Error 
 JS UX 
 botón (+) Servicios 
 interesantes Integración etc… widget
 creado

Slide 25

Slide 25 text

12

Slide 26

Slide 26 text

Pasos a seguir •Definir objetivos •Análisis del estado actual •Especificar un esquema de datos •Intrumentar nuestra aplicación •Implementar flujos de datos entre herramientas •Crear tareas automatizadas •Generación de informes y/o paneles 13

Slide 27

Slide 27 text

Definamos objetivos •¿Qué esperamos conseguir de este proceso? • ¿Tener reporting fiable? • ¿Dar inteligencia a producto y/o marketing? • ¿Conocer los principales KPIs? • ¿Automatizar tareas en el backend? • ¿Mejorar el onboarding y el lifecycle? • … 14

Slide 28

Slide 28 text

Definamos objetivos •¿Tenemos recursos suficientes? • Financieros, para pagar más herramientas • Tiempo de desarrollo y **gestión de proyecto** •¿Podemos empezar por las principales KPIs e ir expandiendo? •¿Hay algún quick-win que podamos conseguir fácilmente? •BriConsejo: implementar lo necesario para el AARRR framework 15

Slide 29

Slide 29 text

Análisis Previo •Inventario de fuentes de tráfico •Inventario de fuentes de datos •Inventario de servicios (usados y necesitados) •Revisar el workflow del producto • Sign-up • Activación • Conversión • Principales features • Acciones relevantes •Requisitos para las herramientas a usar •Decidir KPIs y Dashboards 16

Slide 30

Slide 30 text

Ejemplo: atribuir conversiones por campañas •Hemos de guardar la campaña que nos trae a cada usuario (guardar los registros UTM en el momento del sign-up) •Conocer el momento y el importe de la conversión •Conocer el gasto total de la campaña y otros signups y conversiones para calcular el UAC y CAC •Compartir los datos en una herramienta de BI a la que sólo se pueda acceder desde la IP de la empresa •Guardar datos agregados en un spreadsheet que compartir con el board 17

Slide 31

Slide 31 text

Esquema de Datos •Tenemos (al menos) 2 tipos de objetos: eventos y usuarios. Cada uno requerirá de parámetros diferentes. •Los parámetros son, simplificando, parecidos a las columnas de una BBDD. •Hemos de revisar el tipo de datos para simplificarlo/unificarlo (por ej, podemos tener problemas con arrays, con coordenadas, etc). •Hay que tener en cuenta que algunas herramientas: • Permiten extender los parámetros de los eventos, incluyendo los del usuario que los genera • Capturan automáticamente parámetros necesarios (ip, timestamp, device, sessionID, etc) 18

Slide 32

Slide 32 text

Esquema de datos: ejemplo real para eventos 19

Slide 33

Slide 33 text

Ejemplo: Esquema de datos - eventos • Event Name: • Category: • Event: • Event Type • Src: • Version: • Global params: (además del userId) • Category params: • Event params: 20

Slide 34

Slide 34 text

Ejemplo: Esquema de datos - eventos • Event Name: Billing - UI Error • Category: Billing • Event: UI Error • Event Type: error • Src: android • Version: 4.1.7.stable • Global params: orgId, (userId) • Category params: • Event params: errorMessage, errorTrace 21

Slide 35

Slide 35 text

Esquema de datos: ejemplo real para usuarios 22

Slide 36

Slide 36 text

Esquema de datos: Recomendaciones •Documéntalo todo •Sólo un grupo pequeño de personas debieran poder modificar el esquema (1xProd, 1xDev, 1xMkt). Igual 3 son muchos •Todo despliegue a producción relacionado con la instrumentación, debiera necesitar el sidekick de un responsable •Enlaza desde el esquema a los commits que instrumentan cada evento •Apunta si algún evento debiera disparar otro de forma automática •Recuerda documentarlo todo 23

Slide 37

Slide 37 text

Instrumentación analytics.track("Subscription Started", { plan: "Pro Annual", amount: "12900", }); 24 Hasta un VC podría hacerlo

Slide 38

Slide 38 text

Flujo de datos entre herramientas •Necesitamos: •Datos estandarizados (oh!) •Un servicio para canalizar los datos a múltiples servicios • Se acabaron los procesos nocturnos de hacer ETL entre servicios •Sugerencias: •Escoge servicios que permitan enviar y/o recibir webhooks para automatizar tareas •Guarda todos los eventos en una BBDD 25

Slide 39

Slide 39 text

26

Slide 40

Slide 40 text

27

Slide 41

Slide 41 text

Tareas automatizadas: webhooks a Integromat 28

Slide 42

Slide 42 text

Tareas automatizadas: webhooks a Integromat 29 Marcamos el deal como cerrado Envíamos por curl un webhook a IFTTT que hace sonar un altavoz en la oficina :) Crea tareas en el CRM asignando la máxima prioridad Avanzamos el deal en el pipeline al estado “Firmando”. Si se mantiene 24h ahí se ejecutan otras tareas

Slide 43

Slide 43 text

30 Generación de informes Daily Check Monthly Check Acquisition Activation Retention Revenue Performance Feature tracking

Slide 44

Slide 44 text

Ej: Daily Check •Daily Check • % visit to sign up • New visitors • New users (segmented) • DAUs • Warnings (segmented • Exceptions (segmented) 31

Slide 45

Slide 45 text

Resumiendo •Empezar a instrumentar en detalle tu servicio es la mejor decisión que puedes tomar hoy •Nombra a una persona responsable (en ambos sentidos) para documentar y mantener el esquema de datos •Empieza con quick-wins y tus principales KPIs •Y usa los datos para automatizar todas las tareas que puedas 32