¿Cuáles son algunos ejemplos en los que ir en contra del desarrollo de software funcionó la sabiduría convencional?

En la empresa para la que trabajo, hemos tenido un proyecto en el que los desarrolladores escribieron una aplicación por lotes que leería una gran base de datos y consumiría algunos servicios (no exactamente servicios web … algunos eran interfaces basadas en sockets para sistemas heredados). Eligieron Spring Batch (porque era un estándar de la casa) y JPA e Hibernate por estar familiarizados con la tecnología y comenzaron a desarrollar esta aplicación por lotes. Pero había muchas otras cosas pequeñas y complicadas, como la integración con sistemas y bases de datos heredados.

Sin embargo, cuando me acerqué al equipo para revisar su código, les aconsejé que no usaran relaciones uno a muchos para evitar consultas N + 1, almacenar en caché los sistemas externos, hacer que partes del trabajo sean paralelas, aumentar el tamaño del fragmento en lugar de enfocarse únicamente en consistencia, evite 2PC siempre que sea posible, escribiendo flujos alternativos para que el trabajo considere la tolerancia a fallas y otro tipo de cosas. Sin embargo, algunos miembros del equipo argumentaron que todas esas afirmaciones eran algún tipo de optimización prematura y, en parte, tenían razón. Muchos de mis consejos no fueron seguidos de inmediato.

Cuando estaba cerca de la fecha límite de lanzamiento, realizaron una prueba en una base de datos de producción con un volumen realmente alto (miles de millones de registros). La aplicación por lotes fue tan lenta que estimamos que llevaría un año y medio realizar todas las operaciones. Entonces, mi equipo fue convocado para ayudar a los desarrolladores a mejorar el rendimiento de la aplicación.

Bueno, no fue bonito. Lo que se suponía que era inicialmente un proyecto fácil, llevó a todos los equipos al límite. Hemos tenido menos de un mes para realizar una revisión completa de la solicitud, con muchas horas extras. Afortunadamente, había mucho espacio para mejoras, por lo que pudimos reducir el tiempo de ejecución completo a menos de una semana. Tuvimos que tomar algunas decisiones arriesgadas porque tuvimos que pasar un tiempo de la ventana para ejecutar el lote para hacer algunas optimizaciones y ajustes finales en la infraestructura.

La cuestión es que las personas generalmente siguen “mantras” sin comprender realmente su contexto, como si fuera algo sagrado. Si bien realizar una optimización prematura en un dominio del que no sabe nada es malo, porque ciertamente pasará mucho tiempo para mejorar algo que no importará una vez que obtenga una visión general, es imprudente ignorar la experiencia y el conocimiento previos sobre problemas que ya has resuelto.

Lo importante fue que, al final, todos hemos aprendido mucho. ¡Hemos hecho un buen estudio de caso sobre toda la experiencia para el resto de la compañía! Y, por supuesto, el equipo de desarrollo hizo un gran trabajo.

Tengo la sensación de que la Sabiduría Convencional verdadera es sabia y encontrar contraejemplos puede no tener mucho significado porque son triviales o lo suficientemente pocos como para ser una casualidad irrepetible.

No violaría las leyes del universo que un proyecto no trivial se inicie con una justificación perfecta, se valide como perfectamente factible, se diseñe por primera vez correctamente, dado como una especificación prístina a un solo programador que lo codifica perfectamente, lo construye por primera vez a la derecha y envía un sistema completamente probado y validado a un equipo piloto que valida por completo con datos en vivo para que el sistema pase a una versión general sin problemas y funcione como se esperaba originalmente.

Como cuestión práctica, lo anterior nunca sucederá porque la eventual muerte por calor del universo detendrá los intentos mucho antes de que algo se acerque.

Hay mucha ‘sabiduría convencional’ (o anteriormente sabiduría convencional) que ha resultado incorrecta en la práctica, pero ya no es sabiduría convencional.

Érase una vez, las grandes empresas pensaron que podrían llegar a un caso de negocios razonable y, a través de una cascada, construir e implementar un sistema casi perfecto como se firmó originalmente. La gente todavía puede pensar eso e incluso puede ser un pensamiento convencional, pero está lejos de ser sabio.

Creo que prevalece el instinto de que las cosas se pueden hacer con sensatez la primera vez (ish) si las estrellas están alineadas y todos siguen la última metodología de desarrollo. Sin embargo, no puedo imaginar que un programador experimentado del mundo real realmente lo crea.

More Interesting

¿Hay herramientas decentes disponibles para medir el desempeño de los empleados desarrolladores de software? Tal vez algo con un sistema de recompensa incorporado? (Gamificación)

¿Cuánto tiempo se requiere para convertirse en desarrollador de software?

¿Los desarrolladores necesitan leer un libro CSS, o leer un libro sobre un tema como ese es una pérdida de tiempo abrumadora en cosas fáciles?

Recientemente recibí una oferta de Amazon como desarrollador de software a tiempo completo, pero me cuesta aceptarla. Estuve internado allí hace dos veranos, pero la experiencia fue bastante estresante. No tengo otro o entrevista a mano. ¿Debo tomar la oferta de Amazon? Agradezco cualquier opinión!

Cómo avanzar en freecodecamp cuando el mapa cambia constantemente

Cómo cambiar el trabajo de desarrollo de Java desde el desarrollo de salesforce.com (Apex y VF)

¿El desarrollo de software es inherentemente marxista?

¿Cuál es la mejor herramienta para implementar indicadores de características en mi empresa?

Como ingeniero de software, ¿qué idioma / marco debo aprender a trabajar por cuenta propia (móvil, web, servidor, empresa, front-end, back-end, base de datos, etc.)?

Mi IPC es bajo, alrededor de 6.5. ¿Cómo puedo obtener un buen trabajo de ingeniería de software?

¿Puedes crecer como ingeniero de back-end con Ruby on Rails?

¿Los desarrolladores de software a menudo tienen que trabajar de viernes a domingo?

¿Cómo puedo convertirme en desarrollador de software SIG?

Como ingeniero de software junior, ¿cuáles son las cosas que debo tener en cuenta cuando estoy construyendo un nuevo proyecto, de modo que pueda escalar?

¿Quiénes son los mejores desarrolladores de aplicaciones para niños?