1
Desarrollo Lean: posponer decisiones
Workshop Software Crafters Barcelona 2022 (v1.2)
(@eferro & @islomar)
2
SUPPORTERS
DIVERSITY
PREMIUM
BASIC
#SCBCN22
IX EDITION
3
Objetivo del taller
5
¿Por qué queremos posponer (algunas) decisiones?
6
¿Por qué queremos posponer (algunas) decisiones?
7
¿Qué NO posponemos?
8
¿Cómo posponemos decisiones?
9
¿Cómo posponemos decisiones?
10
¿Cómo posponemos decisiones?
11
Caso real: ChatOps
Objetivo:
Contexto:
12
Caso real: ChatOps
Restricciones:
13
Introducción al método de la hamburguesa
14
Introducción al método de la hamburguesa
15
16
¡Empecemos la práctica!
Caso de uso: creación de repositorio de contenedores
17
18
Autenticación | | | | | |
Autorización | | | | | |
Capturar repo name | | | | | |
Creación del repo en cloud | | | | | |
Feedback de la creación | | | | | |
19
Autenticación | | | | | |
Autorización | | | | | |
Capturar repo name | | | | | |
Creación del repo en cloud | | | | | |
Feedback de la creación | | | | | |
Autenticación Slack
Canales Slack
Token usuarios harcodeados
Hardcodeado en código
Fichero Hardcodeado
Slack Command
Conversación Slack
AWS API
20
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Capturar repo name | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Creación del repo en cloud | AWS cli | AWS API | Backend wrapper AWS API | Generación cambio codigo terraform | | |
Feedback de la creación | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
RECORDATORIO sobre los criterios de selección
21
22
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Capturar repo name | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Creación del repo en cloud | AWS cli | AWS API | Backend wrapper API AWS | Generación cambio codigo terraform | | |
Feedback de la creación | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
Durante los siguientes tres meses el sistema fue evolucionando con nuevos comandos y más usuarios. Ninguno de ellos necesitó cambios muy importantes en la arquitectura o la infraestructura de la aplicación.
23
🗓
24
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar comando | AWS cli, helm, kubectl | AWS API, k8s API, ... | Backend wrapper API | Servicios externos / No code | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
Caso de uso: asignar rol a usuario de AWS
Este caso de uso evidenciaba la necesidad de sofisticar nuestro sistema de autorización
25
Atención
26
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | ??? | ??? | ??? | ??? | ??? |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar comando | AWS cli, helm, kubectl | AWS API, k8s API, ... | Backend wrapper API | Servicios externos / No code | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
27
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar comando | AWS cli, helm, kubectl | AWS API, k8s API, ... | Backend wrapper API | Servicios externos / No code | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
RECORDATORIO sobre los criterios de selección
28
Caso de uso: crear y borrar usuarios de AWS
Necesidad de aún mayor sofisticación para nuestro sistema de autorización
29
Atención
30
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | ??? | ??? | ??? | ??? |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar comando | AWS cli, helm, kubectl | AWS API, k8s API, ... | Backend wrapper API | Servicios externos / No code | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
31
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar comando | AWS cli, helm, kubectl | AWS API, k8s API, ... | Backend wrapper API | Servicios externos / No code | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
RECORDATORIO sobre los criterios de selección
32
Caso de uso: resetear nuestras credenciales AWS
33
34
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar Reset Own AWS Key | ??? | ??? | ??? | ??? | ??? | ??? |
Notificar Credenciales | ??? | ??? | ??? | ??? | ??? | ??? |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
35
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Ejecutar Reset Own AWS Key | AWS cli | AWS API | Terraform | | | |
Notificar Credenciales | Línea texto Slack | Texto enriquecido | Notificación Slack Privada | SMS | Sistema externo (Ej: 1password, S3 temporal) | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend |
RECORDATORIO sobre los criterios de selección
36
Caso de uso: release a Producción de aplicaciones
Queremos una solución con auditoría, fácil de ejecutar, con feedback para el usuario y con algún tipo de mecanismo que impida que se ejecute por error
37
Atención
38
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Mecanismo anti ejecución por error | ??? | ??? | ??? | ??? | ??? | ??? |
Ejecutar release | ??? | ??? | ??? | ??? | ??? | ??? |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend | |
Traza auditoría | ??? | ??? | ??? | ??? | ??? | ??? |
39
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Mecanismo anti ejecución por error | N/A | Token (No persistencia) | Token (persistencia) | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp |
Ejecutar release | gitlab pipeline (api) | Nuevo pipeline | | | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend | |
Traza auditoría | Canal privado slack | Volumen ficheros | BD | BD + búsqueda | Eventos + BD + búsqueda | SaaS |
40
Autenticación | Autenticación Slack | Canales Slack | Token usuarios hardcodeados | | | |
Autorización | N/A | Hardcodeado en código | Fichero hardcodeado | DB Usuarios / Roles | Auth0, Okta, Onelogin | |
Pasar parámetros | Slack command | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp | | |
Mecanismo anti ejecución por error | N/A | Token (No persistencia) | Token (persistencia) | Conversación Slack | Diálogos dinámicos en Slack | Link a frontend / Webapp |
Ejecutar release | gitlab pipeline (api) | Nuevo pipeline | | | | |
Feedback ejecución | Línea texto Slack | Texto enriquecido (Actualiz. RT) | Notificación Slack privada | Diálogos dinámicos en Slack | Feedback en frontend | |
Traza auditoría | Canal privado slack | Volumen ficheros | BD | BD + búsqueda | Eventos + BD + búsqueda | SaaS |
41
Recapitulación final
Finalmente, hace un par de semanas (año y medio después del arranque) hemos conectado el sistema de autorización con nuestro Inventario de Usuarios (por cierto implementado con No-Code).
42
🗓
43
Resumen final (I)
44
Resumen final (II)
45
RECORDATORIO sobre los criterios de selección
46
Cuidado:
⚠️ Frameworks que cierran opciones
⚠️ Megaconstrucciones (para problemas futuros)
⚠️ Hype / CV Driven development
47
48
Referencias y recursos
49
50
Referencias (I)
51
Referencias (II)
52
¡GRACIAS!
¿Feedback?