Compilaciones lentas y despliegues rápidos

2 minute read

¿Qué pensarías si tus desarrolladores tuvieran que esperar mucho tiempo antes de probar los cambios de código que acaban de codificar? Recuerdo hace 5 años un proyecto en que la compilación y el despliegue de la aplicación en la que estaba trabajando tardaban 13 minutos y 21 segundos.

Tiempo perdido

Si multiplicas este tiempo por el número de compilaciones al día que un desarrollador puede hacer son 801 segundos * n compilaciones = 801 * n segundos = 0.2225n horas por día. Si multiplicas 0.2225*n * 20 días * 12 meses = 53.4n horas por año que son desperdiciadas debido a una compilación lenta lo que lleva a 6.675*n días improductivos por desarrollador.

En la siguiente gráfica se puede ver la cantidad de días perdidos considerando la cantidad de compilaciones por día de un desarrollador.

Number of days wasted

Si n=15 el número de días perdidos por año són 100 (100/(20*12) -> 41% días de trabajo por año)

En el siguiente enlace puedes ir a google para ver la gráfica Plot 6.675x

No estamos considerando otros factores que hacen decaer la productividad de un desarrollador que durante este tiempo que está esperando empieza a hacer otras cosas perdiendo el foco en aquello que estaba haciendo.

Añade el precio por hora que le pagas a tus desarolladores y es bastante dinero.

6.675 * n * num_devs_en_una_empresa * precio_hora_desarrollador = dinero = tiempo

Si la compilación pasa mucho tiempo posiblemente sea porque tienes que compilar un montón de código y si tienes un montón de código tal vez tengas una gran aplicación que debería dividirse en partes más pequeñas para reducir el tiempo de compilación y crear pequeños servicios. Lo que hoy se llaman microservices.

Ahorrando tiempo

Todo lo que ahorra tiempo, es algo bueno. Es imposible reducir el tiempo de compilación a 0 segundos, pero hacer que la compilación y el despliegue sean rápidos debe ser algo a tener en cuenta mientras se trabaja en el desarrollo de software.

En mi equipo tengo que desarrollar software en diferentes módulos de software y tratamos de hacer que la compilación y el despliegue sea simple y rápido. Una de las cosas que hicimos fue crear un perfil maven que cada vez que se realiza un clean install localmente, copia el ear automáticamente a la carpeta deployment de JBoss utilizando la variable de entorno JBOSS_HOME y el plugin maven-antrun-plugin

        <profile>
            <id>deploy-jboss-64</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>deploy-DU</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <copy overwrite="true" file="target/${project.artifactId}.ear"
                                              todir="${env.JBOSS_HOME}/standalone/deployments"/>
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>  

Esto me ahorra tiempo a mi (y para los otros desarrolladores que se desarrollan en el mismo módulo) cada vez que tenemos que desplegar una nueva versión de un archivo ear en mi servidor de aplicaciones JBoss local . De lo contrario, tendria que copiar manualmente el fichero ear resultante de la compilación en la carpeta de deployment de JBoss cada vez.

Conclusión

Todo esto me lleva a pensar que, en una organización, es importante que todos, un equipo o al menos una persona se hagan conscientes de qué mejoras se pueden hacer para acelerar los procesos de construcción y despliegue. Todo este tiempo podría dedicarse a implementar nuevos productos o servicios que podrían aportar valor a su organización. Esto es lo que se llama el cost of opportunity y se aplica a su vida laboral y también a su vida personal.

Updated:

Comments