Porque jodes tanto con modulos?
Un amigo me preguntó porque me había dedicado desde hace algún tiempo, a trabajar en la modularización de KB, si hasta el momento nos habíamos arreglado sin módulos y podíamos hacer aplicaciones sin problemas.
El conocía las dificultades del proceso de modularización y los cambios que implica introducir módulos al proceso de desarrollo, pero no veia las ventajas de tener todo bien modularizado.
Mi razonamiento para tener una KB modularizada, es bastante sencillo:
Es la única forma rentable que veo, con la que podremos resolver problemas mayores en el futuro, con GeneXus.
Paso a explicar un poco.
GeneXus es una herramienta que resuelve muy bien el desarrollo de pequeñas aplicaciones. Cuando uno trabaja con 10 tablas, es difícil encontrar algo que demore o funcione lento.
Cuando trabajamos con 100 tablas, el proceso de normalizacion y reorganización puede ponerse un poco mas pesado, pero no hay nada que un build all (o en el peor de lo casos un rebuild all) soluciona casi todos los problemas.
Ahora, cuando pasamos a trabajar con 1000 tablas, es donde se cruza el umbral donde los tiempos de desarrollo se empiezan a complicar, haciendo que una gran parte del aumento de la productividad que nos brinda GeneXus se vaya en "tiempos muertos".
GeneXus resuelve de forma buena una cantidad de problemas complejos y utiliza heuristicas para lograrlo, que funcionan muy bien para KB chicas.
Varios de estos problemas tienen complejidades no lineales, por lo que al aumentar la cantidad de objetos de la KB, los tiempos se disparan. Muchos de estos problemas, están relacionados con grafos (árbol de llamadas o dependencias) y esto hace que su complejidad y por lo tanto los tiempos se disparen rápidamente.
Cualquiera que trabaje con una KB grande, sabe que tiene que hay que cambiar algunas propiedades de la KB para que puedas trabajar:
* Deshabilitar el Generate Developer Menu
* Deshabilitar el Full Text Indexer de la KB
* Evitar definir redundancias.
Cuando trabajamos con GXServer (casi todas las KB grandes trabajan con GXServer), empiezan a pasar cosas que son contraproducentes con la productividad de todo el grupo.
Los desarrolladores no quieren hacer UPDATE diario, porque bajarse los cambios y hacer un rebuild les demora 4 horas, lo cual luego les da muchos problemas.
En nuestra experiencia, la cantidad de objetos en una KB con desarrollo activo, tiende a crecer a pesar de trabajar en forma activa de borrar todo lo que no se use y de usar la menor cantidad de objetos posibles. Tenemos un promedio de 100 objetos nuevos todos los meses.
Estas dos tendencias, hace que nuestra capacidad de desarrollar aplicaciones grandes (mas grandes) en el futuro se vea comprometida. Vamos a poder desarrollarlas, pero a un costo demasiado grande o con malos tiempos de desarrollo.
Por todo estos temas, creo que la modularizacion nos va a ayudar en el futuro. Mi sueño es poder tener una KB empresarial (20.000 objetos?) pero poder generarla en forma modular. De esta forma, tendriamos la ventaja de trabajar con KB chicas, pero conservando las enormes ventajas de tener todo junto.
Aun falta bastante trabajo y herramientas para soportar esto, pero una vez que tengamos modularizado, podríamos tener generación/compilación por módulos, paralelizar las compilaciones, reorganizaciones por módulos, build all del modulo que estoy trabajando, etc.
El conocía las dificultades del proceso de modularización y los cambios que implica introducir módulos al proceso de desarrollo, pero no veia las ventajas de tener todo bien modularizado.
Mi razonamiento para tener una KB modularizada, es bastante sencillo:
Es la única forma rentable que veo, con la que podremos resolver problemas mayores en el futuro, con GeneXus.
Paso a explicar un poco.
GeneXus es una herramienta que resuelve muy bien el desarrollo de pequeñas aplicaciones. Cuando uno trabaja con 10 tablas, es difícil encontrar algo que demore o funcione lento.
Cuando trabajamos con 100 tablas, el proceso de normalizacion y reorganización puede ponerse un poco mas pesado, pero no hay nada que un build all (o en el peor de lo casos un rebuild all) soluciona casi todos los problemas.
Ahora, cuando pasamos a trabajar con 1000 tablas, es donde se cruza el umbral donde los tiempos de desarrollo se empiezan a complicar, haciendo que una gran parte del aumento de la productividad que nos brinda GeneXus se vaya en "tiempos muertos".
GeneXus resuelve de forma buena una cantidad de problemas complejos y utiliza heuristicas para lograrlo, que funcionan muy bien para KB chicas.
Varios de estos problemas tienen complejidades no lineales, por lo que al aumentar la cantidad de objetos de la KB, los tiempos se disparan. Muchos de estos problemas, están relacionados con grafos (árbol de llamadas o dependencias) y esto hace que su complejidad y por lo tanto los tiempos se disparen rápidamente.
Cualquiera que trabaje con una KB grande, sabe que tiene que hay que cambiar algunas propiedades de la KB para que puedas trabajar:
* Deshabilitar el Generate Developer Menu
* Deshabilitar el Full Text Indexer de la KB
* Evitar definir redundancias.
Cuando trabajamos con GXServer (casi todas las KB grandes trabajan con GXServer), empiezan a pasar cosas que son contraproducentes con la productividad de todo el grupo.
Los desarrolladores no quieren hacer UPDATE diario, porque bajarse los cambios y hacer un rebuild les demora 4 horas, lo cual luego les da muchos problemas.
En nuestra experiencia, la cantidad de objetos en una KB con desarrollo activo, tiende a crecer a pesar de trabajar en forma activa de borrar todo lo que no se use y de usar la menor cantidad de objetos posibles. Tenemos un promedio de 100 objetos nuevos todos los meses.
Estas dos tendencias, hace que nuestra capacidad de desarrollar aplicaciones grandes (mas grandes) en el futuro se vea comprometida. Vamos a poder desarrollarlas, pero a un costo demasiado grande o con malos tiempos de desarrollo.
Por todo estos temas, creo que la modularizacion nos va a ayudar en el futuro. Mi sueño es poder tener una KB empresarial (20.000 objetos?) pero poder generarla en forma modular. De esta forma, tendriamos la ventaja de trabajar con KB chicas, pero conservando las enormes ventajas de tener todo junto.
Aun falta bastante trabajo y herramientas para soportar esto, pero una vez que tengamos modularizado, podríamos tener generación/compilación por módulos, paralelizar las compilaciones, reorganizaciones por módulos, build all del modulo que estoy trabajando, etc.
Totalmente de acuerdo, Esperemos que alguien de GeneXus este escuchando y leyendo.
ResponderBorrar