Candidate Architecture: OpenShift + Java/Spring + React

I am working in a project with some folks at 10Pines. The client is a big company with operations in most countries of LatinAmerica. From a functional point of view, the project is not so complex, but it has some interesting challenges:

  1. The redesign of  delivery process
  2. The enhacement of the SCM strategy
  3. The design and implementation of a new infrastructure based on OpenShift

In this article I want to focused on points 2 and 3.

Regarding SCM we are using Git (BitBucket) to store code …..and configuration, yes, configuration. We store configuration in a Git repository and make it accesible via Spring Cloud Config. At the same time we manage infrastructure as code, that is: the definition of all the infrastructure is written in code, basically Dockerfiles and other scripts. And of course this is also stored in a Git repository.

Regarding the new infrastructure we are using Docker on Kubernetes, or more specifically OpenShift. We consider we are taken too much risk, so we are not using all OpenShift features, for example we are not using the integrated Jenkins or the configMaps. We continue using our previous build process with some minor extensions, that is: our old and solid Jenkins takes care of the CI process, when we have a feature ready we build the corresponding artifact and publish it in Artifactory. Then Jenkins interacts with OpenShift to trigger the build of the corresponding Docker Image. The process of building the Docker image runs inside OpenShift and implies downloading the corresponding artifact from Artifactory. Once the new image is built and publish, a new deployment is automatically triggered. The following picture represents our build pipeline.

openshift_2

In terms of runtime, our application includes 2 artifacts: a RestAPI (built on Spring-Boot) and a React application (that is served by Nginx). Each of these artifacts is packaged into a Docker container. Finally we have 2 pods, each of them runs 2 docker containers: one that contains part of the application and another one that runs Spring Cloud Config. The following picture shows a summary of this runtime architecture.

 

It worth e mentioning that Spring Cloud Config container is instantiated in each pod but it is only accesible inside the pod.

To be continue…

 

 

Contraoferta laboral, mi vuelta a trabajar en una empresa

A pesar de estar trabajando de forma independiente suelo recibir ofertas para sumarme como empleado full-time de una empresa. En general no les presto mayor atención porque estoy muy conforme con mi situación y no tengo intención de volver a trabajar full-time en ninguna empresa.

Pero recientemente recibí una oferta para trabajar en una posición muy interesantes en un esquema part-time. Sin embargo sigue sin convencerme la idea de sumarme a una empresa sin conocerla por dentro. O sea,  me proponen seguir un proceso de entrevistas y si todo va bien… adentro. Demasiado riesgoso para mi gusto.

Trabajando independiente, cuando tengo un nuevo cliente no hago compromisos de más de 2 meses. En general propongo un primer proyecto corto de entre 4 y 8 semanas como para conocernos mutuamente y al cabo de ese período, si ambas partes estamos conformes, entonces vemos de hacer un acuerdo/compromiso de más largo plazo.

Basado en esto, cuando tuve que contestar esta interesante oferta lo hice con una contra-oferta (comparto un extracto del mail en envié):

[…] arrancaría haciendo algo chico en primera instancia y en función de los resultados y la experiencia, decidimos. Se que mi propuesta puede parecerte inusual pero miralo de esta forma: En vez de un proceso de selección basado en entrevistas en las que pueden conocerme parcialmente sin verme en la práctica, les propongo que hagamos un trabajo concreto en un lapso reducido de tiempo que permita conocernos mutuamente y mitigar los riesgos que ambas partes corremos al intentar iniciar una relación sin conocernos lo suficiente. […]

Recursos varios para aprender Node/JavaScript

Como mencioné hace un tiempo, me he visto en la necesidad de meterme de lleno con Node/JavaScript. Para ello he echado mano de 3 recursos:

  • Libros: tengo una lista de libros que me recomendaron, pero por el momento solo he visto dos libros gratuitos de la gente de Syncfusion: Node.Js Succinctly y JavaScript Succinctly.
  • Tutoriales de nodeschools
  • Sesiones de pair-programming con ingenieros experimentados

Y obviamente mas allá de todo esto: práctica, práctica y más práctica.

Si bien aún me queda mucho por aprender, hay algunas cuestiones que ya tengo claras:

  • El lenguaje JavaScript en términos de sintáxis no me gusta
  • La experiencia de desarrollo es muy “suave”, muy parecida a la experiencia en Ruby e incluso mejor en algunas cuestiones.

Continuará…

Encuentro con el Board de Agile Alliance

El jueves pasado en el contexto del Meetup de Agiles@Argentina se realizó un desayuno con el Board de la Agile Alliance. La Agile Alliance (AA) es una organización sin fines de lucro que busca dar apoyo a las personas que pretenden “aplicar agilidad”. En este sentido la AA realiza distintos tipos de actividades entre las que se destacan algunas conferencias muy importantes como AgileXXXX en USA y XP en Europa.

El evento abrió con una breve introducción de Emilio Gutter, un miembro de la comunidad local que colaboró con la AA en la organización de este encuentro. Luego cada miembro del Board se presentó y propuso un temática debate. A continuación los miembros del board se distribuyeron en las distintas mesas y largo la discusión.

Yo estuve en la mesa facilitada por Declan Whelan en la que hablamos sobre cuestiones técnicas. Entre los temas tratados destacaron: camino de adopción de prácticas técnicas, manejo de la deuda técnica y los riesgos de la agilidad sin prácticas técnicas. A la pasada tomé nota de algunos recursos para investigar:

  • Exercism.io, un sitio con ejercicios de programación que propone una dinámica de feedback comunitario
  • Agile Practice Guide, una publicación conjunta de la Agile Alliance y el PMI sobre como utilizar Agile
  • Theagilerevolution, un sitio de podcasts

En encuentro duró unas 4 horas y para mi estuvo muy bien.

Para cerrar: en la convocatoria había cupo para unas 100 personas y en la previa se agotaron todos los cupos. Sin embargo la cantidad de asistentes no superó las 80 personas. El eterno problema de las actividades gratuitas y la falta de compromiso. ¿Será un fenómeno Argentino o también pasará en otros países?