2. A veces nuestro código parece una
escena de un crimen: hay muertos,
sangre, cosas rotas…
Si nos fijamos bien podemos ver algún
singleton o trazas de un framework de
Javascript arcano.
3.
4. Por mucho que nos guste dar la culpa a
otros, generalmente el culpable es un tipo
con estas pintas.
5.
6. O sea, un programador. Es decir,
nosotros.
Si trabajamos en un entorno más
enterprise, los culpables tendrán un
aspecto como este…
13. Esta charla está basada en este libro de
Adam Tronhill (
https://pragprog.com/book/atcrime/your-
code-as-a-crime-scene).
No dejéis de leer el libro porque es muy
interesante.
14.
15. Londres 1888. Jack the Ripper acaba de
cometer su quinto asesinato. Al igual que
las cuatro veces anteriores la policía no
es capaz de encontrar al culpable.
16.
17. Más de 125 años después, se sigue
intentado saber quien fue Jack the Ripper.
El profesor David Canter, utilizando
Dragnet, un software desarrollado por The
Center for Investigative Psychology, llegó
a determinar el área donde probablemente
vivía Jack the Ripper.
Dragnet considera cada localización de un
crimen como un centro de gravedad y
combina los centros matemáticamente
considerando sus distancias relativas.
19. En los años 90 se descubrió un diario de
James Maybrick, un “merchant” del
algodón que decía ser Jack the Ripper.
Curiosamente el señor Maybrick
acostumbraba a alquilar una habitación en
Middlesex Street, que está dentro del
hotspot hallado con Dragnet.
20. ¿Como analizar los hotspots en nuestra
base de código?
Una primera opción sería ver qué archivos
tienen más complejidad. Por ahora
asumiremos que complejidad es igual a
tamaño del fichero, que es una métrica
muy fácil de calcular y bastante fiable.
22. Pero que pasa si tengo un archivo muy
complejo pero que hace tiempo que no
toco? Es allí donde tengo que focalizar
mis esfuerzos a día de hoy.
Una métrica que puede ser más útil es
añadir a la complejidad ya calculada la
tasa de cambio del fichero.
Parece razonable pensar que un archivo
complejo que se cambia mucho puede ser
una fuente de bugs.
34. Utiliza los hostspots como guia:
priorizar problemas de diseño
realizar revisiones de código
mejorar la comunicación
35. Otra manera senzilla de calcular la
complejidad es analizar los espacios en
blanco del código.
A más espacios en blanco (tabulaciones)
más complejidad tendrá nuestro código.
37. En la imagen anterior se puede observar
el resultado de un refactoring que se hizo
a principios de enero.
También se puede observar como se
añadió a finales de marzo una nueva
feature que causó que se incrementara la
complejidad.
46. En el 1979 se produjeron una serie de
robos en varios pueblos de Delaware y
Pennsylvania.
La característica común de estos robos es
que fueron realizados de manera muy
“educada”.
47. Varios testigos identificaron al padre
Pagano como el ladrón.
El “pequeño” problema es que el padre
Pagano no era el culpable. De entre todos
los sospechosos, el padre pagano fue el
único que era un clérigo.
Antes de las ruedas de reconocimiento, la
policía mencionó que el culpable podría
ser un clérigo. Es decir, la policía influyo
en la memoria de los testigos.
49. La policía no trató la entrevistas de una
forma cooperativa, comparándola con
datos.
Tenemos que tratar nuestro código
también como algo cooperativo.
50. Podemos estudiar con que frecuencia
diferentes archivos son comiteados a la
vez.
De esta manera podemos descubrir
acoplamientos temporales difíciles de
descubrir con otras herramientas.
51. Algunos de estos acoplamientos serán
normales y correctos, pero podemos
tener otros que puedan indicar un
problema.
56. Pero nuestros tests pueden no estar
codificados de una manera correcta.
Si estudiamos el acoplamiento del código
con nuestros tests, podemos descubrir
malas decisiones de implementación.
Por ejemplo, podríamos descubrir que
estamos modificando demasiado nuestros
tests end-to-end, que deberían ser unos
tests más estables.
58. También podemos estudiar como
evoluciona nuestro código y nuestros
tests en función de los cambios que les
hacemos.
Cuando empezamos a dedicar más tiempo
a nuestros tests que a nuestro código de
producción seguramente es que hay algo
que tengamos que mirar.
60. La universidad de Glasgow hizo un
estudio sobre la belleza del que concluyó
que a la gente les gustaban más aquellas
caras a las que se les habían quitado las
diferencias individuales respecto la
media.
Por tanto podemos decir que la belleza es
aquello que tiene consistencia y no tiene
sorpresas.
64. A principios de los 90 Suecia tuvo su
primer serial killer. Thomas Quick
(encarcelado en una institución mental)
empezó a confesar con todo lujo de
detalles asesinatos no resueltos (sin
cuerpo presente). El problema era que
Thomas Quick no era culpable.
65.
66. Cuando trabajamos nos enfrentamos a
poderosos biases sociales que debemos
entender para intentar evitarlos. Uno de
ellos es process loss, que dice que un
grupo nunca puede rendir al 100% de su
capacidad.
El echo de trabajar juntos tiene unos
costes que debemos entender
(coordinacion y motivacion).
67. En "The Emperor's New Clothes" Hans
Christian Andersen cuenta que al
Emperador le regalaron un cofre vacío
diciéndole que allí había ropa que solo
aquellos dignos de su confianza podían
ver.
El Emperador se las puso y caminó
desnudo por toda la ciudad, pero nadie se
atrevió a decirselo.
68.
69. A este bias social se le llama Pluralistic
Ignorance y sucede cuando en un equipo
todo el mundo en privado piensa una cosa
pero nadie se atreve a decirla en público.
70. Hay otros biases sociales como confundir
una opinión muy repetida por la realidad,
o el de magnificar una opinión minoritaria
porque está en concordancia con las
creencias del grupo.
Hay que intentar luchar contra los biases
sociales con preguntas y con datos.
71. ¿Qué le pasó a Thomas Quick? Fué
drogado para hacer los interrogatorios.
Los terapeutas explicaron a la policia las
confesiones de Quick después de
implantarle falsas memorias. La policia
creyño a los terapeutas.
Cuando Quick no decia una confesion
muy clara, recibia ayuda de los
interrogadores hasta conseguir una
historia plausible.
72. Años después gente relacionada con la
investigación confesó que no veían nada
claros los métodos del interrogatorio,
pero que en su momento no se atrevieron
a decir nada.
73. Una manera de descubrir
comportamientos de nuestro equipo es
hacer una nube de palabras con los logs
de nuestro repositorio de código.
75. También podemos ver la cantidad de
autores que tiene un archivo.
Puede ser razonable pensar que cuantos
más autores tenga un archivo, más
probabilidades haya de que allí haya un
bug.
77. Y también podemos evaluar los costes de
comunicación dentro de un equipo
mirando quien es el autor principal de los
archivos.
Si dos archivos muy relacionados tienen
diferentes autores, tenemos que
asegurarnos que haya una buena
comunicación entre ambos.
81. SearchProvider
Vicenc Garcia: 180, 108
Christopher Monney: 151, 76
Krister Bone: 103, 44
David Winchurch: 99, 41
Alan Gorton: 49, 21
Mark Gwilliam: 33, 33
82. Finalmente, podemos hacer un mapa de
los autores de cada archivo para
encontrar posibles problemas de
comunicación.
Esta técnica nos puede servir, por
ejemplo, para ver que archivos se quedan
huérfanos si un miembro del equipo se va.
86. Hemos visto técnicas que nos pueden
ayudar a determinar problemas en nuestra
base de código.
Es importante hacer notar que estas
técnicas no tienen la verdad absoluta, y
que después de aplicar cada una de ellas
es nuestra responsabilidad estudiar cada
caso en concreto y evaluar si allí hay un
problema o no.
London 1888Jack The Ripper has murdered his 5th victim. But nobody knows who is he.
Dragnet considers each crime location a center of gravity. It then combines the individual centers
mathematically using one small twist; psychologically, all distances aren’t
equal. Thus, the crime locations are weighted depending on their relative
distances.
Interpret evolutionary change frequenciesFrequent changes to complex code generally indicate declining quality
Max complexity over time
Standard deviation
Back in 1979, several towns in Delaware and Pennsylvania were struck by a
series of robberies. The salient characteristic of these robberies was the perpetrator’s
polite manners. Several witnesses identified a priest named Father
Pagano as the robber.
De entre todos los sospechosos, el padre pagano fue el unico que era un clerigo. La policia menciono que el culpable podria ser un clerigo. La policia influyo en la memoria de los testigos. La policia no trato la entrevistas de una forma cooperativa, comparandola con datos. Tenemos que tratar nuestro codigo tambien como algo cooperativo.
Create a safety net for your architecture
Use beauty.
As
she tested the attractiveness of all these photos on a group, the results turned
out to be both controversial and fascinating. Graded on physical attractiveness,
the composite pictures won. And they won big.
The reason for the controversy comes from the process that produced the
apparently attractive faces. When you morph photos of faces, individual differences
disappear. The more photos you merge, the more average the end
result. That would mean that beauty is nothing more than average!
Beauty is about consistency and avoiding surprises
Use hotspot analysis to assess the severity
A principios de los 90 Suecia tuvo su primer serial killer. Thomas Quick (encarcelado en una institucion mental) empezo a confesar con todo lujo de detalles asesinatos no resueltos (sin cuerpo presente). El problema es que Thomas Quick no era culpable.
Cuando trabajamos nos enfrentamos a poderosos bias sociales que debemos entender para intentar evitarlos. Uno de ellos es process loss, que dice que un grupo nunca puede rendir al 100% de su capacidad. El echo de trabajar juntos tiene unos costes que debemos entender (coordinacion y motivacion).
Sweden 1990s -> first serial killer -> no bodies -> thomas quick -> process loss -> the emperor is naked
When you choose a technology you also choose a culture.
"The Emperor's New Clothes" Hans Christian Andersen
Pluralistic ignorance -> Pluralistic ignorance happens in situations where everyone privately
rejects a norm but thinks that everyone else in the group supports it.
Mistake a familiar opinion for a widespread one.
Challenge all with questions and data
Avoid group thinking. Pero con cuidado, puede pasar que una opinion minoritaria este alineada con el ideal del grupo. Entonces nos vemos con mas fuerza para expresar esa opinion, tomamos una posicion mas extrema. Por ejemplo, los tests son buenos verdad? Pues testeemoslo todo, a lo bestia, incluso codigo que sabemos que luego vamos a tirar. Testeemos a lo bestia los spikes, hagamosle integracion continua, etc.
Para evitar todo esto, hagamos preguntas, hablemos con la gente y soportemos nuestras decisiones con datos. Dejemos que expertos externos revisen nuestros datos, que subgrupos trabajen independientemente en el mismo problema y si tenemos una posicion de fuerza, no hagamos saber nuestra opinion demasiado pronto.
Que le paso a Thomas Quick? Fue drogado para hacer los interrogatorios, los terapeutas explicaron a la policia las confesiones de Quick despues de implantarle falsas memorias. La policia creyo a los terapeutas. Cuando Quick no decia una confesion muy clara, recibia ayuda de los interrogadores hasta conseguir una historia plausible.
Identify abandoned code (code developed by a dev that not longer is in the team)