software debt: qué es y cómo gestionarlo holísticamente

54
SOFTWARE DEBT QUÉ ES Y CÓMO GESTIONARLO HOLÍSTICAMENTE

Upload: angel-nunez-salazar

Post on 11-Jun-2015

1.153 views

Category:

Technology


0 download

DESCRIPTION

Software Debt talk - Agiles 2013, Lima - Perú - CAS 2014, Barcelona - España

TRANSCRIPT

Page 1: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

SOFTWARE DEBT QUÉ ES Y CÓMO GESTIONARLO HOLÍSTICAMENTE

Page 2: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

ANGEL NÚÑEZ AGILE CONSULTANT & TRAINER

[email protected] @snahider

Page 3: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

UN CASO REAL M

arch

- 20

01

Oct

ober

- 20

01

May

- 20

02

Dec

embe

r - 2

002

July

- 20

03

Febr

uary

- 20

04

Sep

tem

ber -

200

4 A

pril

- 200

5 N

ovem

ber -

200

5 Ju

ne -

2006

Ja

nuar

y - 2

007

Aug

ust -

200

7 M

arch

- 20

08

Oct

ober

- 20

08

May

- 20

09

Dec

embe

r - 2

009

July

- 20

10

Febr

uary

- 20

11

Sep

tem

ber -

201

1 A

pril

- 201

2 N

ovem

ber -

201

2 Ju

ne -

2013

V1

V2 V3 V4 V4.5 V5 V6 V7 V8

•  Estimado No Cumplido Siguiente Release : Marzo 2013 •  Hoy: June 2013 •  Nuevo Estimado Siguiente Release : Julio 2013

Page 4: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Issues Posted vs Fixed

Page 5: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Drupal Core Versión: 8.0 Dev Uno de los CMS más usados y populares del mundo. •  Casa Blanca •  Warner Bross Records •  Emmy •  Ubuntu

LA VICTIMA

Page 6: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Janu

ary

- 200

1 S

epte

mbe

r - 2

001

May

- 20

02

Janu

ary

- 200

3 S

epte

mbe

r - 2

003

May

- 20

04

Janu

ary

- 200

5 S

epte

mbe

r - 2

005

May

- 20

06

Janu

ary

- 200

7 S

epte

mbe

r - 2

007

May

- 20

08

Janu

ary

- 200

9 S

epte

mbe

r - 2

009

May

- 20

10

Janu

ary

- 201

1 S

epte

mbe

r - 2

011

May

- 20

12

Janu

ary

- 201

3 S

epte

mbe

r - 2

013

May

- 20

14

Janu

ary

- 201

5

RELEASE TIMELINE

V1

V2 V3 V4 V4.5 V5 V6 V7 V8

¿?

Page 7: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

EL PROBLEMA

http://xjm.drupalgardens.com/blog/technical-debt-drupal-8-or-when-will-it-be-ready

Page 8: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

¿QUÉ ES LA DEUDA TÉCNICA? Shipping first-time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite. The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt.

Page 9: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

DEFINICIÓN

"Obligaciones que una organización toma cuando disminuye la calidad interna del producto para lograr metas a corto plazo pero que son perjudiciales a largo plazo"

Angel Núñez (@Snahider)

Page 10: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

¿CÓMO LUCE LA DEUDA TÉCNICA?

https://elearning.industriallogic.com/gh/submit?Action=PageAction&album=trw&path=recognizingSmells/technicalDebt/technicalDebtMismanagement&devLanguage=Cpp

Page 11: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Tiempo

Respuesta al Cliente

Cos

to d

el c

ambi

o (C

oC)

CoC Actual

CoC Óptimo

Deuda Técnica

LA DEUDA TÉCNICA ES MALA

Page 12: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

¿POR QUE NOS DEBE PREOCUPAR?

Consecuencias

Incrementa el tiempo de entrega

Numero significativo de defectos

Aumento en los costos de desarrollo y soporte

Disminuye la predictibilidad

Frustración

Disminuye la satisfacción del cliente

Bajo Rendimiento

Page 13: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

LA DEUDA TÉCNICA ES ADICTIVA

"La deuda técnica es

como una adicción

a las drogas.

Un vez que empiezas a

hackear el código,

el código pide más."

Tomar Deuda Técnica

Acumula la Deuda

(Más) Incesante Presión

Reduce Velocidad

Equipo

No pagar Duda

Técnica

CICLO VICIOSO

Page 14: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

LA DEUDA TÉCNICA ES BUENA

DECISIÓN ESTRATÉGICA PRUDENTE

•  Entrega rápida al mercado para obtener feedback.

•  Reducir costos iniciales, generar ingresos y autofinanciar el producto.

•  Fechas sensitivas de entrega.

Page 15: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

CLEAN CODE Y DISCIPLINA SON OBLIGATORIOS

•  El código es limpio? El código tiene pruebas?

•  Hay un objetivo que nos permita aprender?

•  He estimado el costo beneficio?

•  Hay un plan para pagar la deuda?

•  No he introducido más deuda sobre deuda existente.

Page 16: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

ENFRENTA LA CRUDA REALIDAD

LA DEUDA DE SOFTWARE ES

INEVITABLE

Page 17: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

EL PROBLEMA NO ES ELIMINAR LA DEUDA

SINO GESTIONARLA

Page 18: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

El responsable no sólo es el desarrollador

El problema

no sólo es el código

La solución no sólo es refactoring

NO CAIGAS EN LA TRAMPA

Page 19: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

SOFTWARE DEBT

Technical Debt

Quality Debt

Configuration Management Debt

Infrastructure Debt

Design Debt

Page 20: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

GESTIÓN HOLÍSTICA Involucrar y

Educar

Visualizar y Medir

Sostener la Calidad

Atender y Pagar

Gestionar el Portafolio

Planificar y Experimentar

Negocio

Dev Team

Page 21: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

INVOLUCRAR Y EDUCAR

Page 22: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

INVOLUCRAR AL PRODUCT OWNER

Patrocinador de la reducción de la deuda

de software

Page 23: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

USAR LA METÁFORA COMO HERRAMIENTA DE COMUNICACIÓN

"El concepto (Software Debt) es 1/3 útil para tomar de decisiones y 2/3 herramienta de comunicación"

Steve McConnell

Page 24: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

EVALUAR DECISIONES

Para utilizar la deuda de software de manera

estratégica y beneficiosa, debemos entender como

nuestras decisiones afectan económicamente.

Page 25: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

EJEMPLO

Alternativa 1 ( Tomando Deuda)

Alternativa 2 ( Sin Deuda)

Page 26: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

EJEMPLO

¿Qué alternativa elegirían?

Tomando Deuda (Opción 1)

Evitando Deuda (Opción 2)

Costo Mensual de Desarrollo $100k $100k

Meses Desarrollo 10 13

Total Costo Desarrollo $1M $1.3M

Perdidas en Ventas $450k

Atender Deuda - Meses 4

Atender Deuda Costo $400

Costo Total $1.4M $1.75M

Otros costos de atender la deuda

X+Y+Z

Costo Total Real $1.4M +x +y +z $1.75M

Page 27: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

VISUALIZAR Y

MEDIR

Page 28: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

MÉTRICAS DE CÓDIGO

Page 29: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

VELOCITY & BUGS

0

5

10

15

20

25

30

35

40

Time

Velocity

Bugs found by PO

Page 30: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

BACKLOGS

Feature C

Defect 23

Refactor X

Feature B

Feature A

Software Debt

Software Debt Backlog Software Debt en el Product Backlog

Page 31: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

CÓMO DRUPAL MIDE LA DEUDA TÉCNICA

Page 32: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

SOSTENER EL RITMO

Y LA CALIDAD

Page 33: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

PULL SYSTEMS

Permite alcanzar un ritmo sostenible de trabajo y que el equipo tenga poder y responsabilidad sobre la

calidad.

Page 34: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

DEFINITION OF DONE

Page 35: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

PRÁCTICAS TÉCNICAS

Page 36: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

ATENDER Y PAGAR LA DEUDA

Page 37: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

ENFOQUES PARA PAGAR LA DEUDA

Enfoques

No Hacer Nada (No todas las deudas tienen que ser pagadas)

Pagar la deuda incrementalmente

Aplicar “Boy Scout Rule” (Atender la deuda cuando te topes con ella)

Pagar la deuda mientras se realiza trabajo valioso para el cliente

Page 38: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Test case

Change skin Security alert See transaction history Block account Add new user Sort query results Deposit cash Validate transfer

PRIORIZAR EL BACKLOG 1. Listar/Visualizar la Deuda (Test Automation)

Page 39: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Test case Riesgo Automation Cost (points)

Change skin Security alert See transaction history Block account Add new user Sort query results Deposit cash Validate transfer

PRIORIZAR Y EL BACKLOG 2. Clasificar (Riesgo y Costo)

Page 40: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Test case Riesgo Automation Cost (points)

Change skin low 20 sp Security alert high 13 sp See transaction history med 1 sp Block account high 0.5 sp Add new user low 3 sp Sort query results med 8 sp Deposit cash high 1 sp Validate transfer high 5 sp

PRIORIZAR Y EL BACKLOG 2. Clasificar (Alto Riesgo – Bajo Costo)

Page 41: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Test case Riesgo Automation Cost (points)

Manual Test Cost (hours)

Change skin low 20 sp 0.5 hrs Security alert high 13 sp 1 hr See transaction history med 1 sp 3 hrs Block account high 0.5 sp 5 hrs Add new user low 3 sp 0.5 hrs Sort query results med 8 sp 2 hrs Deposit cash high 1 sp 1.5 hrs Validate transfer high 5 sp 3 hrs

PRIORIZAR Y EL BACKLOG 2. Clasificar (Columnas adicionales si es necesario)

Page 42: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

Test case Riesgo Automation Cost (points)

Manual Test Cost (hours)

Block account high 0.5 sp 5 hrs Deposit cash high 1 sp 1.5 hrs Validate transfer high 5 sp 3 hrs Security alert high 13 sp 1 hr See transaction history med 1 sp 3 hrs Sort query results med 8 sp 2 hrs Add new user low 3 sp 0.5 hrs Change skin low 20 sp 0.5 hrs

PRIORIZAR Y EL BACKLOG 3.Priorizar

Page 43: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

DISTRIBUIR EN CADA SPRINT

http://www.jfokus.se/jfokus11/preso/jf11_ScrumAndXPBeyondTheTrenches.pdf

Page 44: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

PLANIFICAR Y EXPERIMENTAR

Page 45: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

TOYOTA KATA

Page 46: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

INCLUIR LA CALIDAD EN LA GESTIÓN DEL PORTFOLIO

Page 47: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

MEDIDA DE ÉXITO TRADICIONAL

Schedule Cost

Scope

Problemas •  Se debe medir Outcomes

no Outputs. (Business Value).

•  No considera la Calidad.

Page 48: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

“Podremos ignorar la calidad pero los problemas de la

calidad nunca nos ignorarán”

Page 49: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

AGILE TRIANGLE

Constraints (Scope, Schedule, Cost)

Quality

Value

Page 50: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

MÉTRICA Medida cuantificable y monetaria

de la "NO CALIDAD".

Distribución

Ratio de la Deuda

Costo de reparar la deuda

Page 51: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

CUANTIFICAR LA DEUDA

•  El riesgo de ejecución es aceptable?

•  El producto puede continuar dando valor en el futuro?

•  Definir límites para tomar decisiones informadas.

Page 52: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

SQALE

Page 53: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

PREGUNTAS

[email protected] @snahider

ANGEL NÚÑEZ

Page 54: Software Debt: Qué Es y Cómo Gestionarlo Holísticamente

SOFTWARE DEBT ASSESMENT

Te ayudamos a entender y mejorar tu software desde una perspectiva de riesgo