A lo largo de mi carrera, trabajé en compañías que tenían una colección de diferentes entornos para diferentes propósitos. Siempre tuvimos más o menos nuestro entorno de escritorio, un entorno de prueba, un entorno de control de calidad, un entorno de preparación y un entorno de producción. Esto fue para ambos servidores / aplicaciones y cualquier fuente de datos que estuviéramos usando.
Cuando comencé en mi empresa actual, descubrí que el 90% de las aplicaciones se desarrollaron en un entorno de escritorio contra fuentes de datos de producción o se desarrollaron directamente en el servidor de producción, según la plataforma. Esto no fue particularmente sorprendente, ya que fui contratado en parte para hacer cambios para mejorar la forma en que funcionaba el equipo de desarrollo, lo que quedó claro en mi proceso de entrevista. Lentamente, comenzamos a cambiar la filosofía y muy pronto, la mayoría de las aplicaciones podrían ejecutarse en un entorno de escritorio, prueba o producción. No mucho tiempo después de esa puesta en escena también.
Ahora, la mayoría de nuestros desarrolladores ven el beneficio de esta metodología y la defienden con vigilancia. Sin embargo, tenemos una serie de aplicaciones heredadas que nunca se migraron. También tenemos varios programadores heredados que piensan en esto como una pérdida de tiempo. Desafortunadamente, obtuvimos el servicio de labios pero nunca la aceptación total de la gerencia. Obtuvimos lo que pensamos que era un compromiso de invertir sustancialmente en esto hace aproximadamente un año, pero nada se materializó a pesar de la considerable planificación que pusimos en ello. Ahora estamos descubriendo que necesitamos más y más entornos. Necesitamos ayuda de los equipos de administración del servidor / red para la configuración y la participación de las partes interesadas del negocio para apoyar el ciclo de lanzamiento. Ahora estamos en un lugar donde un proyecto puede funcionar lo que los desarrolladores razonables considerarían "normalmente"
Me encantaría presentar un argumento completo, pero la gerencia realmente no tiene tiempo e interés en escucharme hasta que haya un problema crítico. Realmente no puedo articular los beneficios simplemente porque siempre me pareció una segunda naturaleza. Me preguntaba si hay razones buenas, simples e irrefutables para la separación de entornos que harían que los gerentes carezcan de experiencia en desarrollo para respaldar esta idea. . ¿Hay buenos recursos / literatura sobre el tema?
Respuestas:
La respuesta: dinero
No me importa cuál es la razón real. El dinero DEBE estar en la raíz de todo su razonamiento, especialmente cuando se trata de la administración.
Si ambos estuvimos sentados en una habitación durante 2 horas, podríamos encontrar docenas de razones por las cuales es mejor tener múltiples entornos.
Aquí está el problema: si las razones no se basan en el dinero, entonces ninguna de ellas importa .
Los programadores no son contratados para ser inteligentes. No son contratados para ser creativos. Son contratados para aumentar los ingresos , ya sea ganando dinero o ahorrando dinero. Si no está haciendo ninguna de esas cosas, será mejor que reúna su currículum.
Al mirarlo desde ese punto de vista, la respuesta es simple:
Repítelo todos los días.
Hay algunos comentarios excelentes a continuación que agregan un valor real a esta respuesta, por lo que los mencionaré:
Karl Bielefeldt tuvo un gran punto cuando mencionó que el análisis de costo / beneficio es un factor importante. Un economista podría referirse a él como el costo de oportunidad de buscar múltiples entornos. Si bien puede ser sorprendente escuchar, ¡hay escenarios en los que múltiples entornos pueden no ser la respuesta! Si el sitio web de su empresa es una adición muy pequeña, el tiempo de inactividad inesperado puede ser la forma más rentable de hacer negocios. Esto no suena como la posición en la que se encuentra, pero vale la pena mencionarlo.
BlairHippo tenía un buen punto en que debería sentirse libre de hacer que parezca una catástrofe (¡y si pierde sus datos, lo es!). La responsabilidad es una gran herramienta para persuadir a los gerentes, pero aún por la misma razón: las demandas son caras. Evitarlos ahorra dinero.
Como anexo, este artículo me pareció bastante bueno. No responde directamente a su pregunta, pero le permite reconocer cómo los programadores son vistos por la administración, lo que a su vez conduce a esta respuesta. Buena lectura.
fuente
Punto único de fallo
Al no tener un entorno de desarrollo o preparación, tiene un punto único de falla para esas aplicaciones heredadas. La gerencia lo escuchará si describe las aplicaciones heredadas en esos términos.
Debe poder lanzar su mensaje en bytes de sonido que tenga sentido para ellos. Quite el " Hablador del programador " de la discusión y reemplácelo con " Habla del gerente ". También imagina que tienes un viaje en ascensor de 30 segundos para obtener tu punto de vista.
Tuve una situación en la que mi jefe era un infante de marina. Seguí diciéndole que necesitaba herramientas de software y capacitación en informática para que mis marines fueran más productivos. No lo entendió. Finalmente fui a su oficina un día y le dije que las cosas estaban mal.
Dije algo al respecto ... "Si estuviera peleando en una guerra estaría usando palos, rocas y ramas de árboles. Lo que necesito son granadas, bazucas y ametralladoras". Recibió el mensaje.
fuente
¿Es realmente crítico?
Puedo entender el deseo de usar entornos separados. La pregunta no obvia es:
¿Es realmente crítico migrar un sistema heredado ?
Creo que la mayoría de las personas con mentalidad técnica tienden a centrarse en la cuestión académica de qué manera es mejor y qué está bien en la academia. En los negocios, aunque lo mejor no siempre gana. No estoy diciendo que esto sea negativo o que comience una guerra de llamas. Estoy afirmando lo obvio, o lo que debería ser obvio para aquellos de nosotros que hemos estado en el negocio del software durante algunos años.
Todas las decisiones comerciales generalmente se toman en función del costo / beneficio percibido. Entonces, la pregunta que probablemente hace el negocio es:
¿Vale la pena el costo del sistema adicional y la inversión en desarrollo en una aplicación heredada en lugar de poner esa misma inversión en otro proyecto / producto?
Tengo y sigo haciendo análisis de costo-beneficio regulares para hacer determinaciones no solo en la migración / reescritura de software, sino en las decisiones cotidianas en las que generalmente participa un cliente potencial. He pasado la reescritura / migración de software antiguo porque tenía una vida limitada y por lo tanto valor.
Ambientes separados
Las razones comerciales para separar ambientes.
fuente
Parece que ya tiene todos los argumentos "correctos" en su lugar. En cambio, está experimentando un "arenque rojo", si lo desea. O "persiguiendo la zanahoria"
Eso es lo que considero el verdadero problema. En mi experiencia, si una empresa tiene prácticas de desarrollo por debajo de la media tan pobres como usted describe. No se trata simplemente de "no sabíamos nada mejor". Más bien, es una compilación de deuda técnica causada por un equipo de alta gerencia que no sabe (¿le importa?) Acerca de los problemas que presenta.
En tales casos, una buena charla no cambiará repentinamente las cosas en su dirección. Tal vez sea un trauma severo (falla del producto visible para el cliente y directamente vinculada a prácticas inadecuadas), pero estoy seguro de que los expertos en tecnología son cuerdos antes de que haya intentado hablar.
Mi sugerencia es absorberlo y tomar las cosas como son o buscar una nueva posición.
fuente
¿Cuántos grupos de personas planean trabajar en la aplicación a la vez? Usualmente, he visto un entorno para cada grupo de personas. Estos son los desarrolladores (obtienen un entorno DEV y un entorno de integración DEV; algunos dirían que no es 100% necesario, diría que varía según el proyecto), dos entornos de prueba (un grupo de probadores que realizan pruebas muy detalladas, el otro para probadores de control de calidad de alto nivel: generalmente son usuarios comerciales reales, no probadores capacitados). También suele haber un entorno de pruebas de rendimiento aislado (para que pueda probar grandes volúmenes de datos, simular grandes volúmenes de usuarios, etc. g).
¿Por qué todos estos entornos? Por lo tanto, diferentes grupos pueden probar diferentes características sin pisar los dedos de los demás. Si los desarrolladores y los probadores trabajan en el mismo entorno, es una pesadilla: un probador puede abrir un defecto en una característica que un desarrollador está cambiando activamente cada minuto. Si hay dos niveles de prueba, pueden enfocarse en diferentes actividades y no preocuparse por estropear los datos del otro. Tener un entorno de rendimiento aislado le permite ejecutar pruebas que pueden bloquear la máquina, pero si está aislada, ningún otro probador se verá afectado.
Cuando demasiadas personas intentan hacer muchas cosas diferentes en el mismo entorno, terminas desperdiciando mucho tiempo mientras un grupo espera a que termine la prueba de otro grupo para que puedan ejecutar la suya. Y eso desperdicia tiempo, y el tiempo desperdiciado puede conducir a desperdicio de dinero, lo que Stargazer712 señaló que podría ser el argumento más fuerte.
Otra razón (no tan común) son los datos: si su aplicación tiene datos personales confidenciales o datos de tarjetas de crédito, generalmente no puede ponerlos en entornos de prueba, y generalmente hay requisitos de enmascaramiento para todo excepto los entornos de control de calidad y producción.
fuente
Parece que ha invertido un gran esfuerzo para lograr un cambio cultural en su lugar de trabajo. Este es un gran logro ya que el cambio es difícil en el mejor de los casos, pero el cambio cultural no se trata simplemente de cambiar las mentes de las personas, sino de cambiar los hábitos, romper los prejuicios y, en última instancia, abrir las mentes potencialmente cerradas a mayores posibilidades. Entonces, la pregunta que debe hacerse en este momento es "¿Qué me perdí?". La respuesta fácil es que es posible que no se haya comprometido completamente con la administración.
Obtener la aceptación de la administración es fácil, pero aún más difícil es obtener la aceptación. Independientemente de los argumentos sobre el dinero, etc., la realidad es que debe poder influir en la visión de prioridad de la gerencia. Su gerente tendrá un presupuesto y querrá demostrar que ese presupuesto se ha aplicado con sensatez y de acuerdo con los valores y prioridades de la empresa. Algunas de esas prioridades serán fiscales, pero otras serán para atender otras necesidades. En algunos casos, esto puede significar engrasar las palmas de otros gerentes para obtener la promoción que su jefe siempre ha querido. Sin embargo, en la mayoría de los casos, se tratará de encontrar formas de ganar más negocios o mejorar las relaciones con socios y clientes. Si no puede presentar su caso en estos términos, solo podrá llegar tan lejos antes de encontrarse en un punto muerto.
Mi sugerencia es tratar de presentar un caso sobre la productividad y cómo esto afecta el presupuesto, como lo han sugerido otros, pero también presentar el caso en términos de las prioridades de su empresa y cómo su productividad podría impactar directamente en las relaciones de la empresa con otras empresas.
fuente
Aquí hay uno: comprobabilidad.
Tener un entorno de prueba le da la libertad de realizar pruebas en una base de datos que sería desaconsejable realizar en un entorno de producción.
fuente
¿Desea cambiar la forma en que su organización desarrolla su software? Olvídate de las "razones" para "hacer las cosas de manera diferente". Los humanos no cambian el comportamiento debido a argumentos racionales. Cambian debido a las influencias psicológicas en sus hábitos.
Entonces, ¿a dónde voy con esto?
Si bien ocasionalmente puede cambiar con éxito el comportamiento de una organización a través de la argumentación, existen otras tácticas que funcionan mejor. Éstos incluyen:
Soporte de base: encuentre otro desarrollador "heredado" que esté dispuesto a darle una oportunidad. Asóciese con él y cambie la forma en que funcionan las cosas. No anuncies el cambio. Solo haz el cambio. Si alguien alguna vez te pregunta al respecto, solo di "Oh sí, así es como lo hacemos ahora".
Asumir la responsabilidad. Voluntario para manejar implementaciones para las personas heredadas. Actúa como si lo amaras. Pueden estar felices de renunciar a esa responsabilidad. Luego ejecútalo como quieras.
Culpe a las personas adecuadas por sus errores. La próxima vez que se introduzca un error de aplicación heredado en producción debido a su mecanismo de implementación de la edad de piedra, indíquelo. Hazlo sutilmente ... No en un correo electrónico. La próxima vez que se encuentre en una reunión con un gerente, mencione casualmente el ejemplo de una razón por la cual la implementación fue problemática. "Sí, ¿recuerdas cómo estábamos luchando el viernes pasado debido al error de Foo que Bob registró en la producción? ¡Sí, eso fue un gran esfuerzo desperdiciado!"
Haz que sea fácil hacerlo de la mejor manera. Mira el iphone, por ejemplo. Hay UN botón en él. (Bueno, dos) Es MUY fácil de encender. Haga que la implementación en entornos múltiples sea una locura estúpida fácil. ¡Hazlo tan fácil que todos los gerentes puedan hacerlo!
fuente
Humans don't change behavior because of rational arguments. They change because of psychological influences on their habits.
Qué deprimentemente cierto es eso. Ya se trate de software o del "mercado libre", la creencia de que las personas toman decisiones racionales en su mejor interés es una falacia.Es más un problema cuando comienzas a tratar con sistemas interconectados o heredados, sistemas de los que depende el negocio para que funcionen y sean precisos. Es importante porque debe haber segregación entre las etapas, es la razón por la que no DEV en PROD porque tiene el potencial de causar daños por valor de millones de dólares en tiempo perdido .
Siempre hacemos DEV -> QA -> PROD (ocasionalmente esos pasos se dividen en partes más pequeñas) con hardware idéntico detrás de ellos. Los datos de producción actuales siempre se envían de PROD a QA a DEV.
DEV: está destinado a ser el entorno limitado de desarrollo, donde las cosas se prueban, iteran y superan en cualquier dato en este entorno, nunca se debe confiar y los desarrolladores lo rechazan regularmente simplemente buscando formas de resolver un problema.
QA: Una vez que sus desarrolladores estén satisfechos con las pruebas unitarias, es hora de que el grupo de prueba los vea. Ejecutan casos de prueba, pruebas de rendimiento y encuentran errores. Esos errores / mejoras se envían a DEV y el ciclo continúa hasta que todos estén contentos.
PROD: una vez que llegue a esta etapa, debe asegurarse de que el código funcione junto con los datos actuales y que su grupo de control de calidad / usuarios empresariales estén contentos con la implementación. Si hiciste todo correctamente, simplemente deberías poder actualizar el código y terminarlo.
De la misma forma que nunca lanzaría un producto no probado a los clientes, nunca debería lanzar código no probado a un entorno de producción.
Si la empresa no está dispuesta a invertir el tiempo para hacerlo correctamente, pagará el costo en mantenimiento de emergencia y los errores 10 veces.
Como un pequeño ejemplo: tuvimos una empresa que decidió hacer un cambio en un informe en producción por su cuenta. Nadie sabía que había cambiado hasta que llegamos a abordar una variedad de problemas un año o dos más adelante.
Cuando señalamos la irregularidad en el informe, el rostro del CFO se puso blanco, resultó que estaban perdiendo ~ $ 250,000 por trimestre debido a que alguien hizo un cambio rápido.
Ocurre más a menudo de lo que piensas, si no puedes permitirte hacerlo correctamente, entonces no lo hagas.
fuente
La administración tiene una gran parte detrás del éxito de las compañías de software y los productos de software que requerían generar estos entornos. Déjame tomar un ejemplo de tu proyecto. Si su software se desarrolla a gran escala, entonces si no gestiona los requisitos de su proyecto, el control del proceso, las compilaciones de prueba, etc., esta es una posibilidad de falla. para que exista la gestión de proyectos.
Hay muchos artículos que demuestran que lo que importa es el éxito. Marque este paso Organizando para un desarrollo de software exitoso
Un gran conjunto de desarrolladores de software tendrá dificultades y, en última instancia, no cumplirán sus objetivos si tienen que pasar todo su tiempo luchando contra una estructura organizativa inapropiada.
Muchas startups de software comienzan su vida con no más de un par de desarrolladores trabajando en un garaje. No se requiere mucha estructura organizativa en este momento en la historia de una empresa, pero la estructura organizativa todavía existe. Por ejemplo, en 1977, cuando Bill Gates y Paul Allen formaron su sociedad y lo llamaron oficialmente Microsoft, la compañía tenía una estructura organizativa mínima. Menos de una docena de empleados trabajaban en la primera oficina de Microsoft en Albuquerque, Nuevo México, y todos sabían quién estaba a cargo. No se necesitaban organigramas complicados para determinar la estructura de informes de todos. Al mismo tiempo, todos los empleados conocían su papel en la empresa y lo que estaban tratando de lograr. Esto se debía a que cualquier estructura organizativa que se necesitaba podía comunicarse informalmente entre cada uno de los empleados.
fuente
Olvida el tiempo, el dinero, la capacidad de prueba, la calidad ... ¿qué tal la reputación ?
Uber envió recientemente un código a github que contenía contraseñas para su entorno en vivo , permitiendo a los 'hackers' descargar todos los detalles de sus clientes. Uber dice que fue una violación, todos los demás dicen "no pongas las llaves de tus cerraduras a la vista del público. Si sus desarrolladores trabajaron completamente en un entorno de desarrollo, podrían haber liberado las claves de su entorno de desarrollo en Github, pero eso es completamente inofensivo. Que los de producción fueron lanzados muestra cuán pobre es esta idea de realizar un desarrollo en el entorno de producción.
Solo recuérdele a su gerente que ocurren errores, por lo que la forma de evitar que sea arrastrado ante el CEO que está a punto de enfrentarse a los periodistas y se ríe del público técnico es tomar medidas simples y obvias para evitar que esos errores sean catastróficos unos.
fuente
Parece que tiene muchos entornos diferentes y le cuesta mucho tiempo a las personas configurar un "entorno".
¡Debe tener el menor número de "entornos" diferentes con los que pueda salirse con la suya, pero poder clonar muchas copias por todas las razones que usted y la empresa deseen (¡usar "entorno para significar la configuración del sistema)!
Óptimamente, las únicas diferencias deberían ser:
ENTONCES, la pregunta de cuánto y qué tipo de pruebas se deben realizar es una evaluación comercial de riesgo / costo y se decide a nivel de la empresa, porque es el negocio en su conjunto el que sufrirá si se producen fallas significativas en una gama de clientes .
Edición posterior: esto me llevó a racionalizar mis convenciones de nomenclatura con mis productos web (gracias por la pregunta). Me he decidido por cuatro "entornos", con pruebas divididas entre qa (nivel único mínimo solo para probar la funcionalidad) y etapas (misma arquitectura que la producción, para pruebas de carga / rendimiento / volumen).
La única diferencia real en el aprovisionamiento es la producción / puesta en escena. Instale una base de datos en un sistema separado, que yo controlo por los grupos en los que se encuentran los diferentes servidores. Qa / dev tiene los roles de servidor web y db. El equilibrio de carga se realiza mediante cloudflare.
También tengo una variable ENV_NO, que se pasa a los sistemas para poder elegir tener tantos ejemplos de "qa" o "puesta en escena" como yo elija.
Entonces, para configurar un segundo entorno qa que incluya mi último respaldo de live, los comandos serían:
Por último, tengo un servidor adicional (opcional) llamado "solo lectura" como la última red de seguridad antes de tocar el suelo. Está aprovisionado como un sistema qa pero con la copia de seguridad y actualización de anoche desactivada (el software también se actualiza a la noche anterior).
Utiliza un enfoque de "Todos los huevos en una cesta diferente": está provisto de una ubicación diferente / registrador DNS, host DNS, proveedores de servicios de host del sistema. Esta es la última / última red de seguridad, por lo que si todo se incendió, al menos puede acceder a los datos hasta anoche. Los scripts de aprovisionamiento aíslan la diferencia entre los diferentes proveedores, por lo que el 99% es el mismo, solo el indicador de solo lectura. Cloudflare Load Balancer redirigirá el tráfico al sitio de solo lectura si todos los servidores en vivo han fallado.
fuente
Cuando se trata de hacer un cambio, tendrá la suerte de tener a alguien que simplemente escuche su opinión profesional e implemente los cambios sugeridos.
Según mi experiencia, cada vez que tenía que hacer un cambio importante, tenía que justificarlo en términos de ahorro que la empresa haría. Por ejemplo, introducir ReSharper en la tubería de desarrollo fue bastante fácil, ya que pude decir algo en las líneas:
ReSharper cuesta alrededor de £ 50 por desarrollador. El costo promedio del desarrollador por año es de £ 40k. ReSharper debería aumentar la productividad de los desarrolladores en al menos un 20% dado que se utiliza a su máximo potencial. Digamos que el desarrollador pasa el 75% de su tiempo escribiendo código en IDE. 75% de 40k es £ 30k. £ 30k es ahora el costo de la productividad del desarrollador. Un porcentaje adicional de productividad (1%) por año cuesta £ 300. Para obtener una productividad adicional del 20%, la empresa tendría que gastar £ 6k.
Si tuviera que poner esto en perspectiva para el negocio, puede decir que puede contratar a otra persona y obtener una productividad adicional del 20% por £ 6k, o puede obtener el mismo resultado al gastar £ 50 en una licencia ReSharper. Una vez que las cifras estén al frente del negocio, la decisión será fácil de tomar.
Ahora, en lo que respecta a sus preguntas sobre tener múltiples entornos, todo lo que tiene que hacer es encontrar una manera de calcular cuánto le cuesta a la empresa cada año tener estos entornos.
Puede solicitar a sus colegas desarrolladores que realicen un seguimiento de las horas dedicadas cada semana a la configuración de aplicaciones para el desarrollo, la implementación, etc. Por ejemplo, diez horas de tiempo para desarrolladores senior pueden costar a la empresa 500 libras esterlinas. Son 10 horas que se pueden dedicar al desarrollo, o algo mucho más importante. Reúne las cifras durante un período de tiempo y proporciona a las empresas un costo anual.
Personalmente odio este tipo de política, pero es común y tenemos que vivir con ella.
fuente