Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En...

38
#SemINF @miryamgsm @plasticscm Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! ;) Marzo 2016 UBU #SemINF Míryam Gómez San Martín @miryamgsm

Transcript of Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En...

Page 1: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Cómo dirigir un equipo de desarrollo…

¡Y quedar como un Jefe! ;‐)

Marzo 2016 UBU

#SemINFMíryam Gómez San Martín

@miryamgsm

Page 2: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

DE QUÉ TRATA LA SESIÓN…

Page 3: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿De qué trata la sesión de hoy?

• Has estudiado ingeniería del software• Sabes de análisis, de diseño, programación…

• ¿Sabrías desenvolverte si mañana mismo tuvieras que dirigir un proyecto?

• ¿Cómo coordinas a tu equipo para que no se queden con los brazos cruzados mientras se te ocurre qué hacer?

• Eso es lo que vamos a solucionar hoy ;‐)

Page 4: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

QUIÉNES SOMOS Y QUÉ HACEMOS…Pero antes…

Page 5: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Quiénes somos y qué hacemos?

• Desarrollamos

• Es un control de versiones – es como el “sistema operativo” del desarrollo – como no funcione, nadie trabaja

• Os sonarán sistemas como Git, Subversion… Perforce, TFS…

Page 6: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Quiénes somos y qué hacemos?

• Somos 16 personas en el equipo (ingenieros en informática, de la UVA, USAL y UBU) – los puedes conocer a todos aquí https://www.plasticscm.com/company/team.html

• Y competimos contra gigantes:– Git (USA + internacional)

• GitHub +300 developers• Atlassian +50 developers en Git (Bitbucket, SourceTree, etc)• Collabnet ‐> exSVN ‐> +200!!• GitTower…

– Perforce (USA) ‐> +300– TFS ‐> MICROSOFT ‐> +100– IBM ‐> su producto es RationalTeamConcert

Page 7: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Y muchas veces… les ganamos!!

Page 8: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Cómo es nuestro desarrollo?

• + 1 millón de líneas de código (90% C#, mucho Java, algo de C, JS, etc)• Código de servidor (+ ahora servidor cloud) ‐> implica algoritmos, bases de datos (7)• Protocolos de red (incluso WAN optimized)• Clientes GUI – nativos para Mac, otro Linux y otro Windows• Interfaz web• Integraciones: Visual Studio, Eclipse, IntelliJ, todo tipo de sistemas de continuous delivery, JIRAs, etc• Algoritmos de merge! Incluyendo semantic merge!!• Diff tools…

• Echad un vistazo a https://www.plasticscm.com/gallery.html

En definitiva… no nos aburrimos mucho ;‐)

Page 9: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

LEAD A PROJECT… LIKE A BOSS!!!Y ahora pasamos al tema de hoy

Page 10: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Qué vais a aprender?

• Las prácticas que nosotros aplicamos y que nos funcionan• Cómo es el día a día de un equipo de desarrollo• Técnicas y herramientas que usamos

Page 11: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Nuestro ciclo de trabajo

Page 12: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Nuestro ciclo de trabajo… explicado

Page 13: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Conceptos que salen de aquí

• Iteración, sprint, backlog ‐> métodos ágiles ‐> SCRUM• Gestión de tareas / issue tracking• Branch per task ‐> nuestro patrón de trabajo• TDD ‐> test driven development• Code review ‐> revisar cáda tarea!• Validation + exploratory testing• CI – continuous integration (+ continuous delivery!!)• Integración ‐> merges!!• Crear releases MUY frecuentes!! ‐> core de agile

Page 14: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

SCRUM en 3 minutos!

Page 15: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

• ¿Cómo se alimenta?– servicio vs producto– feedback, uservoice, featuresadicionales requeridas por un nuevo cliente, ideas propias.

– + lista de bugs: detectados por el cliente e internamente.

• ¿Dónde se registra?– excel, wiki, etc…

• ¿Cómo se prioriza? – objetivo: entrega temprana y continua de valor al cliente.

Backlog

Page 16: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Estimación

• Nosotros usamos PERT para estimar:• Para cada tarea, en horas:

– Mejor caso ‐> si todo te va bien– Peor caso– Caso más probable

• Ejemplo: 4h, 10h, 6h ‐> con esto se calcula la estimación• OBJETIVO: controlar el optimismo exagerado.

Para saber más

Page 17: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Cómo gestionamos las tareas?

• Issue tracker – nosotros tenemos el nuestro propio TTS, pero hay muchos: JIRA, Bugzilla, Mantis, OnTime, etc, etc. Lo importante es tener uno.

• En el issue tracker metemos todo lo que se hace (ojo, no cajón de sastre de ideas, eso no funciona): bugs, nuevas features, refactors, etc

Page 18: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Qué es una tarea? ‐TTS

Page 19: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

TTS

Page 20: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

TDD en 1 minuto!!! :‐O

• TDD – test driven development ‐> escribe tests unitarios antes que el código.

• En nuestro caso: escribe tests antes de terminar la tarea al menos, que TODO vaya probado

• Cambio de mentalidad: probar es probar con testsautomáticos, probar a mano es jugar al software, los pros no lo hacen así!!!

Page 21: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Code Review

• Revisamos TODAS las tareas que hacemos• Ninguna tarea va sin code review• Esto ayuda a mantener la calidad del código• Sirve de training para los nuevos (les vas tutorizando todo el rato, no te llevas la sorpresa)

• Herramientas: primero un buen control de versiones, luego un buen sistema de diff (Plastic :P, pero tbGit y otros + Gerrit óSmartBear óGitHub con sus reviews integradas, etc).

Page 22: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Diff the código

Page 23: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Code Review

Page 24: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Cómo vamos…

• Iteración, sprint, backlog ‐> métodos ágiles ‐> SCRUM• Gestión de tareas / issue tracking• Branch per task ‐> nuestro patrón de trabajo• TDD ‐> test driven development• Code review ‐> revisar cáda tarea!• Validation + exploratory testing• CI – continuous integration (+ continuous delivery!!)• Integración ‐> merges!!• Crear releases MUY frecuentes!! ‐> core de agile

Page 25: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Validación

• Cada tarea la validamos: es decir, alguien prueba a mano que hace lo que debe hacer.

• NO es testing como tal, es más comprobar que el resultado tiene sentido, como producto!

• Es como un “exploratory test” pero corto.• Qué es un exploratory test?

Para saber más

Page 26: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Exploratory testing

Page 27: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

CI systems

• Sistemas de Continuous Integration (ahora también conocidos como Continuous Delivery, que va más allá todavía).

• Son sistemas que están monitorizando tu control de versiones, y cuando detectan un cambio (o una nueva rama), compilan el código y  pasan los tests!!

• Son muy útiles porque dejan un informe con lo que ha ido bien y mal.

• Si en una tarea fallan los tests… se reabre y no se integra!!

Page 28: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Issue tracker(TTS)

Task

Branch

Task validation

Merge

Atlassian Bamboo

A ne

w br

anch

for

each

tas

k

Each finished

task is tested

prior to be

merged

Code Review

Validation

Each task is code reviewed

Each task is validated

Only tasks arriving here are merged

Monitors branches. Implement branch-per-task CI.On Windows and Linux:1. Builds2. Runs nunit3. Runs CLI tests4. Runs GUI tests

A ne

w re

leas

e

ever

y 24

hou

rs

Release testing

Windows (w2k to w8), Linux (several flavors), macosx: plus all backends (oracle, sqlserver,

mysql, sqlite, postgres) + combined win/linux + mac

>24h o

f

automa

ted

testin

g run

in

parall

el

VMWare

New tests

Taskdoc

Wiki

Page 29: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

CI systems

• Herramientas que os tienen que sonar:– Bamboo (de Atlassian)– Jenkins

• Continuous Delivery va más allá: si los testsvan bien, pone directamente el código en producción!!! (en lugar de tener que hacerlo tu a mano… a mano == desastre!)

Para saber más(aunque es un poco tocho!)

Page 30: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Branch per task

• Muy fácil: para cada tarea en el issue tracker, creamos una rama en el control de versiones!

• De ese modo eres libre de hacer tantos checkins como quieras

Page 31: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Branch per task

• De ese modo, tu desarrollo en vez de ser así:

Page 32: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Branch per task

• Será así: con líneas paralelas

Page 33: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Branch per task

• Y todas esas ramas al final se juntan, se MEZCLAN, se integran (diferentes nombres para lo mismo).

• ¿Sabes lo que es un merge? Es clave en control de versiones!!! Y por tanto en desarrollo de software!!

• Tras el merge se compila el código, se prueba, y se hace una nueva release

Page 34: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Release!

• En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el build master.

• Cada release pasa montones de test: 40h paralelizadas en un montón de VMWares para que tarde menos de 3h en probarse!

• Pasamos tests unitarios, smokes + tests gráficos

• Intentamos hacer una release CADA DÍA: por eso las releases son tan importantes, son el latido del proyecto!! Es lo que hace que todo funcione, que nos demos prisa con las reviews, las validaciones.

• El objetivo de todo el ciclo es lanzar software que no se rompa… que no falle!!

Page 35: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

¿Hemos terminado?

• Iteración, sprint, backlog ‐> métodos ágiles ‐> SCRUM• Gestión de tareas / issue tracking• Branch per task ‐> nuestro patrón de trabajo• TDD ‐> test driven development• Code review ‐> revisar cáda tarea!• Validation + exploratory testing• CI – continuous integration (+ continuous delivery!!)• Integración ‐> merges!!• Crear releases MUY frecuentes!! ‐> core de agile

Page 36: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Información interesante

• ¿Sabes qué pinta tiene un GUI tests? Mira: https://youtu.be/7mEqkUaMxJI• Todo sobre branch per task en nuestra web: https://www.plasticscm.com/branch‐per‐task‐

guide/index.html• Nuestro ciclo de trabajo explicado en nuestro blog:

– http://codicesoftware‐es.blogspot.com.es/2012/07/ciclo‐de‐trabajo‐de‐codice‐software‐i.html– http://codicesoftware‐es.blogspot.com.es/2012/07/ciclo‐de‐trabajo‐de‐codice‐software‐ii.html– http://codicesoftware‐es.blogspot.com.es/2012/08/ciclo‐de‐trabajo‐de‐codice‐software‐iii.html– http://codicesoftware‐es.blogspot.com.es/2012/08/ciclo‐de‐trabajo‐de‐codice‐software‐iv.html– http://codicesoftware‐es.blogspot.com.es/2012/08/ciclo‐de‐trabajo‐de‐codice‐software‐v.html– http://codicesoftware‐es.blogspot.com.es/2012/08/ciclo‐de‐trabajo‐de‐codice‐software‐vi.html

Page 37: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Y libros interesantes

• Clean Code – Robert C. Martin• Implementation Patterns – Kent Beck• Code Complete – Steve McConnell

Page 38: Cómo dirigir un equipo de desarrollo… ¡Y quedar como un Jefe! - … · 2016-03-02 · • En nuestro caso tenemos un ingeniero que se encarga 100% de hacer releases. Es el buildmaster.

#SemINF @miryamgsm @plasticscm

Preguntas@miryamgsm