Nuestro manifiesto de principios de ingeniería en Macro Securities es lo que nos guía en la forma en que construimos Software. Queremos un equipo de tecnología que pueda entregar valor rápido, de forma confiable y continua.

Radical Ownership

Cada desarrollador es dueño y responsable del ciclo de vida de la feature a implementar. Es por eso que cada uno de nosotros tiene el deber de refinar, implementar, monitorear y dar soporte de cada feature que implementamos. Durante la implementación el desarrollador se compromete con todo el equipo a realizar una implementación correcta y con todos los mecanismos necesarios para asegurar el funcionamiento escalable y sostenible de la feature. Es por eso que los desarrolladores de Macro Securities tienen un celo especial por las features que implementan. Ellas son sus bebés. Los ven gestarse, nacer, desarrollarse y funcionar.

grafica-1-ciclo-owner.png

Continuous Delivery

En Macro Securities hacemos trunk-based development. Lo que está en la rama main es lo que va a producción. Toda nueva funcionalidad o cambio introducido a la rama main pasa por pipelines automáticos que se despliegan en los distintos ambientes de forma segura hasta que llegan a producción. Es por eso que los desarrolladores deben asegurarse de que no están introduciendo ningún problema antes de hacer un merge a main.

Automatizar Todo

Builds, tests, despliegues, comandos, seguridad, observabilidad. Todo se ejecuta automáticamente. Si algo se repite, se automatiza. Esto no es solo una cuestión de eficiencia. La automatización elimina errores humanos en los procesos más críticos y libera tiempo para que los desarrolladores se enfoquen en lo que realmente importa: resolver problemas de negocio. Cada vez que alguien del equipo detecta una tarea manual que se repite, la primera pregunta es “¿cómo la automatizamos?” No es opcional, es parte de cómo trabajamos.

Lotes Chicos

Entregamos cambios pequeños e incrementales. Si algo es demasiado grande para salir rápido, lo partimos antes de empezar. Los cambios grandes son riesgosos. Son difíciles de revisar, difíciles de testear y difíciles de revertir si algo sale mal. Por eso preferimos muchas entregas pequeñas a una entrega grande. Esto nos permite tener feedback rápido, detectar problemas antes de que escalen y mantener un ritmo de entrega sostenible. Cuando un desarrollador trae una feature compleja, lo primero que hacemos juntos es pensar cómo partirla en incrementos que puedan llegar a producción de forma independiente.

grafica-2-lotes.png

Calidad y Seguridad desde el Inicio

La calidad se construye, no se controla. Los desarrolladores son los dueños de los tests, linters y escaneos de seguridad. El rol de QA comienza desde la concepción de la feature y es un trabajo en conjunto con el desarrollador para la construcción de la misma, no un control al final del ciclo de desarrollo.

Observabilidad y Feedback Rápido

Métricas, logs, trazas y alertas son fundamentales en cada nueva feature o cambio. Los desarrolladores implementan feature flags y despliegues progresivos para reducir el riesgo y bajar el MTTR (mean time to recover). No desplegamos nada a ciegas. Cada feature que sale a producción tiene que ser observable desde el primer momento. Si algo falla, queremos enterarnos nosotros antes que los usuarios. Los feature flags nos dan el control de encender o apagar funcionalidades sin necesidad de hacer un nuevo despliegue, y los despliegues progresivos nos permiten validar con un porcentaje pequeño de usuarios antes de abrir al 100%.

grafica-3-feature-flags.png

Aprendizaje sin Culpa

Hacemos postmortems blameless. Es decir, nos enfocamos en resolver problemas, en lugar de buscar culpables. La innovación requiere muchas veces tomar riesgos. En nuestro equipo eso se valora, no se castiga. Cuando algo falla en producción, nuestra primera reacción no es preguntar quién lo causó, sino qué podemos mejorar para que no vuelva a pasar. Esa mentalidad nos permite movernos rápido sin que el miedo al error nos paralice.

Los principios están relacionados entre sí

Todos estos principios están interrelacionados:

  • El Radical Ownership nos permite poder aplicar el Aprendizaje sin Culpa, porque los desarrolladores sienten la responsabilidad de cada acción que toman, por lo que toman todas las precauciones necesarias, sin limitarse en las cosas que pueden probar
  • La Observabilidad y el Feedback Rápido son fundamentales para que los desarrolladores puedan ser dueños de las features. Por medio de logs, métricas, trazas y alertas, ellos pueden monitorear el correcto funcionamiento de sus features.
  • Automatizar Todo es el principio que habilita el Continuous Delivery. Sería extremadamente difícil poder hacer despliegues a producción constantes si no contamos con builds y tests automatizados y no tuviéramos Lotes Chicos.

Principios que nos guían, no buzzwords

Este manifiesto no fue armado como una colección de buzzwords de la industria del desarrollo de software, sino que refleja la cultura de excelencia, innovación y mejora continua forjada en años de experiencia que nuestro equipo tiene construyendo software en esta industria. Confiamos en que estos son los principios que necesitamos para cumplir nuestra misión:

Empoderar a cada argentino para que tome el control de su futuro financiero a través de una experiencia simple y segura, transformando sus ahorros en un motor de bienestar y libertad financiera.

¿Tu equipo tiene principios explícitos? Me encantaría conocerlos.