¿Es bueno usar un servidor de base de datos compartido para desarrollo?
Muchas veces surge la pregunta de que igual que tenemos un único entorno de test, de pre-producción, de producción…¿podemos tener un único entorno de desarrollo compartido para los desarrolladores?
A excepciones de casos particulares, en los que sea muy complicado replicar ciertas características del entorno, lo que me suelo encontrar, es que si hablamos de código, tenemos asumido que un único entorno compartido para todos no es bueno.
Por ejemplo, tener un único servidor de aplicaciones en remoto, compartido por todos los desarrolladores, donde vayamos a subir nuestros cambios no es buena idea.
Primero porque al estar en remoto, es muy probable que al desplegar código en ese entorno tardemos más tiempo que si estuviera en local.
Y en desarrollo solemos hacer muchos cambios y muchas pruebas, por lo que perderíamos tiempo continuamente.
Pero lo más importante de todo es que ese entorno se va a usar continuamente por todo el equipo.
Yo programaré, y querré ver en un entorno real que las cosas que he programado funcionan como yo espero.
A la vez, otro compañero programará algo y querrá probarlo. Y para ello lo subirá a ese entorno, sobreescribiendo mis cambios.
O simplemente alguien subirá algo que romperá el entorno. Estamos en desarrollo, equivocarnos, experimentar, solucionar las cosas y llegar a la solución buena es la norma.
Por ello tener un único servidor de aplicaciones en remoto para todos es un caos.
El enfoque que más me encuentro es que esto lo solemos tener asumido. Así que aunque tengamos un entorno común para probar los cambios de todo el equipo, cada desarrollador suele tener su servidor de aplicaciones, su tomcat (o lo que tu aplicación utilice), en local, para ir probando todo esto.
Peero…lo más frecuente que veo es que esos servidores apunten a un único servidor de base de datos, donde están todos los datos de prueba de desarrollo y donde todo el equipo puede hacer modificaciones.
La verdad es que es tentador. Tendremos la última versión del esquema de base de datos de todo el equipo de desarrollo en ese servidor, y cualquier cambio de base de datos puede verlo todo el equipo.
Además de que tenemos un conjunto de datos de prueba comunes para el equipo.
Pero, igual que tenemos asumido que debemos tener un servidor de aplicaciones en local porque el código va a cambiar muy a menudo para no perjudicar al resto del equipo, ¿por qué no vemos igual la base de datos?
Es cierto que en ciertos desarrollos el esquema no suele variar muchísimo y los cambios que se hacen no suelen afectar a los otros desarrolladores.
Pero puede pasar. Si no hay comunicación, puede que un cambio de base de datos haga que no funcione el código de otro compañero en local (ya que su entorno apunta a esa base de datos común).
Mi opinión suele ser: o tenemos una buena comunicación entre todos, o tenemos un DBA al que le notifiquemos los cambios y avise al resto del equipo…O que cada desarrollador tenga su entorno local, con su base de datos en local, con un conjunto de datos de prueba comunes para todos.
Facilitémonos la vida. ¡Existen herramientas para recrear dichos entornos! ¡Y para recrear automáticamente la base de datos con sus datos de prueba!
¿Qué opináis vosotros?