Showing posts with label Rayadas. Show all posts
Showing posts with label Rayadas. Show all posts

Sunday, September 06, 2015

Coste basal del software vs capacidad infinita


En mi opinión, el coste de desarrollo por cada grupo de funcionalidades se puede dividir de la siguiente forma:
  • Coste inicial de desarrollo
  • Coste de existencia (coste basal):
    • Coste de existencia / complejidad añadida
    • Coste de existencia para otras funcionalidades


Coste inicial de desarrollo

Este es el coste/gasto en el que incurre el equipo durante el desarrollo inicial de la funcionalidad. Incluye desde que el equipo comienza a trabajar en la funcionalidad o grupo de funcionalidades hasta que el cliente la tiene disponible y comienza a usarla. Por supuesto este proceso debería incluir múltiples puestas en producción para ir obteniendo feedback y realizando los ajustes necesarios...

A partir de este momento, comienzan a producirse de forma continua y hasta el final de la vida de la funcionalidad o del producto, un coste de existencia o coste basal.

Coste de existencia o Coste basal

Este coste, continuado en el tiempo y que solo termina con la retirada de la funcionalidad o el fin de la vida del producto, es el coste en el que incurre el equipo por la existencia de ese código y esa funcionalidad en el producto.
Es importante tener en cuenta que este coste no se refiere al coste de realizar modificaciones a la funcionalidad o corregir errores, se refiere al coste que conlleva simplemente que el código esté ahí...

¿Por qué se produce este coste?
  • El equipo tiene que conocer ese código (dónde está, qué dependencias tiene, con quien interactua, cómo está escrito...)
  • El conocimiento y técnicas del equipo están en continua evolución. Cuando el equipo mejora en alguno de estos aspectos tiene que decidir si actualiza el código de la funcionalidad, si lo hace es un coste, si no lo hace, también puesto que será diferente que el resto de código de que dispone.
  • Cuando aparezcan nuevas funcionalidades se debe ver dónde impactan y no es lo mismo tener que identificar esos impacto en una aplicación de un tamaño X que en una de un tamaño X más el tamaño de la funcionalidad.
  • Lo mismo pasa cuando entra un nuevo miembro del equipo y tiene que conocer la base de código que existe.
Y lo peor de todo es que este gastos es continuo hasta la "muerte" de la funcionalidad, es decir el fin de vida del producto, hasta que no la use ningún usuario o hasta el fin del mundo (lo que sea que ocurra antes).

Además, si se sobrepasa el punto de obsolescencia tecnológica (versión de lenguaje obsoleto, dependencias que desaparecen, etc) antes de la "muerte" de la funcionalidad el coste de mantenimiento se dispara y podemos entrar en una situación en que la capacidad del equipo quede ocupada al completo intentando mantener bajo control funcionalidades que ya han pasado el punto de obsolescencia tecnológica.

En mi experiencia, siempre me he encontrado que este coste se obvia y tanto los desarrolladores como los clientes y managers simulan que no existe, tomando decisiones (sin sentido) que no lo tienen en cuenta.

Capacidad no infinita

El problema es que la capacidad de un equipo de desarrollo no es infinita y aunque cambia (en positivo o negativo) con el tiempo debido a distintos factores (el conocimiento del negocio, de las técnicas...), existe una tendencia clara a que la capacidad usada en el coste basal de las funcionalidades ya hechas vaya mermando la capacidad disponible para nuevas funcionalidades.

Coste acumulado
Por tanto de forma general, independientemente de la calidad del software desarrollado, poco a poco la capacidad disponible de un equipo para nuevas funcionalidades disminuye con el tiempo.
Si el equipo desarrolla sin usar buenas prácticas y sin alta calidad, este colapso es prácticamente inmediato en el caso de tener muchos bugs o en unos pocos meses cuando aún no teniendo muchos bugs la calidad interna del software es baja.

Si el equipo es bastante bueno y se preocupa por la calidad esta tendencia será muchísimo menos pronunciada y se podría tener una capacidad "razonable" para nuevas funcionalidades durante años, pero por supuesto poco a poco iría disminuyendo y a la larga desaparecería.

A lo largo de los años las estrategias que he visto para lidiar con este problema son:
  • Ignorarlo y esperar al colapso.
  • Hacer crecer de forma constante tu equipo para mantener una capacidad para nuevas funcionalidades constante (este enfoque es el que parecen tener empresas de tecnología puntera que crecen en ingenieros de forma constante; google, amazon, netflix, spotify ...)
  • Crear equipos de mantenimiento a los que pasar el producto despues del desarrollo inicial (por supuesto esto es similar al punto anterior).
Claramente este problema sólo afecta a los departamentos de desarrollo interno o a los equipos de desarrollo dedicados a producto. Para el caso de consultoras o equipos que trabajan en proyectos este tipo de problema no les afecta puesto que pasado el desarrollo inicial se suele entregar el proyecto y el mantenimiento es problema del cliente.

La solución

Y ahora viene cuando planteo la solución que he encontrado....
Pues no, no tengo ni idea de cómo solventarlo, como mucho se retrasar las consecuencias del problema, minimizarlo, pero no solventarlo.



Me encantaría opiniones sobre como tratar a medio largo plazo este problema. Lo único que se me ocurre es el crecimiento continuo de equipo o tener una política de "end of life" de los productos muy agresiva.

Se aceptan sugerencias, experimentos, opiniones, cualquier comentario será bienvenido.

Friday, October 31, 2014

Verbos vs Nombres



Flujo análisis (continuo) en un proyecto
  • Centrar conversaciones en identificar comportamientos (behaviours). Intentamos identificar acciones, verbos, flujos, eventos. Viene fenomenal para OOP centrado en casos de uso o para un enfoque DDD y flujos de negocio complicados.
  • Centrar conversaciones en identificar comportamientos concurrentes en el sistema. Nos obliga a identificar relaciones entre esos comportamientos y nos ayuda a hacer un diseño escalable y fácilmente implementable mediante servicios independientes que encapsulan estado y que se comunican mediante mensajes (perfecto para implementaciones con Actores, Pipelines, microservicios, etc.)
Como se puede ver estos dos enfoques se centran en las interacciones de los usuarios con nuestro sistema o las acciones del propio sistema (Verbos) y  no tanto en las entidades con las que trabaja (Nombres)
Sin embargo el análisis más típico que se suele hacer en OOP (mal entendida por supuesto) se centra en identificar primero las entidades, perdiendo el contexto de las interacciones (mensajes, flujo, reglas, etc...)  derivando, no necesariamente, pero si típicamente, en modelos anémicos y pobres.

Conclusión:

Valoramos la identificación de las entidades (Nombres) con las que trabaja nuestro sistema, pero valoramos mucho más la identificación de los comportamientos (Verbos) que definen cómo interactuamos con nuestro sistema y qué tareas facilita.

Recordemos que los clientes NO quieren software/sistemas, quieren facilitar sus tareas o resolver sus problemas.

Nota adicional:

Este análisis de negocio se puede hacer a distintos niveles en el sistema, por lo que este enfoque de centrarnos en los verbos, nos puede servir para identificar servicios de nuestro sistema o eventos de negocio, o en un nivel mucho más cercano a una aplicación concreta para poder identificar los hilos de ejecución concurrentes o orientar el diseño hacia un sistema más reactivo.

Wednesday, July 03, 2013

El problema de explicar el object relacional impedance mistmatch


Si realmente no has entendido la orientación a objetos y casi todos los objetos que creas son contenedores de datos planos, es imposible que sufras el impedance mismatch entre el mundo de objetos y las bases de datos relacionales, simplemente no estás haciendo objetos... no pasa nada, esta bien, pero no me calientes la cabeza diciendo que usas objetos... :-)

En ese escenario no tiene sentido hablar del object relational impedance mismatch... en realidad casi no tiene sentido hablar de nada relacionado con orientación a objetos (diseño, patrones, polimorfismo, composición, herencia, etc)

Sunday, January 30, 2011

[Meme] Los 10 comandos que más utilizo

Otro más para el meme sobre los 10 comandos que más utilizo...

La lista se consigue ejecutando:
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10

Los resultados en el equipo de mi trabajo son:
202 ls
149 bosrmt
136 cd
72 ssh
55 svn
46 ping
32 sudo
19 emacs
18 scp
15 cat

En mi equipo personal en casa, son:

143 ls
122 sudo
111 ssh
110 cd
58 bosrmt
36 ping
23 axel
20 rm
20 find
17 mtr
Se nota la diferencia de perfiles de uso entre el trabajo y mi equipo de casa, pero en cualquier caso el "ls" es el rey...

Tuesday, June 16, 2009

Gato antigravedad

Todos sabemos que los gatos caen siempre de pie y siguiendo las leyes de Murphy, sabemos que la tostada siempre cae por el lado de la mantequilla


Luego el dispositivo con antigravedad más barato es... el gato con la tostada de mantequilla pegada a la espalda... por su puesto con la mantequilla hacia arriba...




Wednesday, June 10, 2009

Internet speed meme

Siguiendo el meme de moda, aquí está el resultado del test de velocidad realizado con speedtest.net

Wednesday, June 03, 2009

Friday, May 15, 2009

Uno de los mejores momentos de The Big Bang Theory




Señores de la SGAE. creo que esto se podría considerar "uso legítimo" de contenido con Copyright, así que mejor vayan a ver si alguna ONG u hogar de Jubilados organiza algún concierto y pueden meterle mano (Ver La SGAE cobró 3.324 euros de otro concierto benéfico que tuvo pérdidas)....

Libro de citas (IV)

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Martin Fowler

Thursday, April 09, 2009

Libro de citas (II)

Las tres mentiras más gordas del desarrollo del software:
  • El programa está completamente testado y está libre de errores
  • Estamos trabajando en la documentación
  • Por supuesto que podemos modificarlo

WTFs/min "Métrica Calidad Código"

Friday, April 03, 2009

Libro de citas (I) (bis)

Tal como me han sugerido pongo aqui una frase que se ha oido muchas veces en conversaciones entre informáticos, o entre informáticos y fauna relacionada con la tecnologia (JPs, charcuteros-proxenetas, etc Ver dic informático y Comerc. RRHH / Proxeneta)

Bueno a los que íbamos, La cita dice así:

"Y por qué no me comes la poll....."
Apa

Friday, October 17, 2008

Cabalística


Hoy, cuando me he conectado a leer el correo de gmail me he sorprendido con una serie de números cabalísticos que me han dejado con una sensación de irrealidad geek extraña.....
Como podéis ver en la imagen, en el momento de conectarme tenia en mi inbox 42 mensajes y en la bandeja de spam 666 mensajes....

Como sabéis 42 es simplemente El sentido de la vida, el universo y todo lo demás tal y como indica La Guía del autoestopista galáctico y 666 es Número de la Bestia...

Curioso, curioso...

Tuesday, September 23, 2008

Bueno empezamos de cero.... ya me gustaría!!!

Quién no conoce (o por lo menos reconoce no conocer) el famoso Capability Maturity Model Integration (CMMI)...

En este modelo se habla de cinco niveles de madurez en el proceso de desarrollo de software por una organización. A saber:
  • 1. Initial Ad hoc and Chaotic
  • 2. Repeatable Intuitive
  • 3. Defined Standard and Consistent
  • 4. Managed Predictable
  • 5. Optimizing Continuous

Yo hasta ahora sólo he visto el 1 y el 2, con despuntes del 3 en algún grupo pequeño...

Lo que queda claro (por lo menos para mi) es que esta clasificación tiene dos errores fundamentales:
  • Si es referido al desarrollo de software, a quién coño se le ocurre empezar a contar por el uno en vez de por el cero.
  • La clasificación no es muy buena si en el punto uno "Initial Ad hoc and Chaotic" se puede considerar un 90% de la población que se pretende clasificar...

Menos mal que con cierta ironía se ha generado una propuesta de clasificación que completa la inicial, dividiendo o ampliando ese peldaño inicial en otros cuantos de forma que cuando nos enfrentemos a estar en el nivel uno de CMMI podamos subclasificar el estado del proceso de desarrollo de ese nivel uno positivo en el nivel que corresponda pero negativo.

Esta propuesta, de la que podemos encontrar varias variantes se denomina A Software Process Immaturity Model y básicamente añade los siguientes estados al proceso de desarrollo de software:
  • 0. Negligent Indifference
  • -1. Obstructive Counter Productive
  • -2. Contemptuous Arrogance
  • -3. Undermining Sabotage

En otras referencias los dos últimos estados los denominan:
  • -2. Antagonistic
  • -3. Psychotic

Desgraciadamente tengo que reconocer que si que he visto sitios con niveles 0 y -1. Incluso en alguna ocasión he podido ver individuos con ramalazos de -2 y -3 (que miedo).

Así que cuando en una empresa que entre otras cosas se dedica al desarrollo de software te dicen la famosa frase:
Bueno empezamos de cero....

Te entran unas ganas locas (y aseguro que es mejor no reprimirlas) de gritar:
ya me gustaría!!!

Más información sobre el "A Software Process Immaturity Model" en:

Wednesday, September 10, 2008

Friki TV III (ShinChan StarWars)



Alguna vez creo haber comentado por aquí que la serie de dibujos animados Shin Chan es uno de mis programas de TV favoritos.... Por otro lado, siendo informático y teniendo treintaitantos años, es casi obligatorio que la saga de películas de Star Wars me hayan marcado.

Hace un par de días pude ver lo que sería la apoteosis Friki TV (desde mi punto de vista, claro). Tres capítulos de Shin Chan en que parodiaban las tres pelis clásicas de Star Wars.... Vamos un descojone, la unión de mis favoritos...

Ya sólo me queda que mezclen un poquito de Star Trek....

No os voy a relatar los capítulos, pero tan sólo diré que el abuelo de Shin Chan hacia de Obi Wan y que el emperador era el mafioso... el resto os lo imagináis o buscáis los correspondientes vídeos para verlo....

Wednesday, July 09, 2008

Open Solaris / Zonas Horarias




Qué es fácil instalar Open Solaris para x86 lo sabe todo el mundo, pero lo que yo no sabia hasta ayer era que lo más difícil iba a ser encontrar la zona horaria correcta...

Resulta que por más que buscaba la zona horaria de la Península (España) y por más que seleccionaba una y otra vez distintas zonas Europeas... no lo encontraba... Por supuesto la solución sencilla fue con la lupa buscar Madrid y seleccionarlo... y para mi sorpresa me encontré con el motivo por el que no encontraba la Península al buscarla...

Para Sun, estamos en Africa... Juas, Juas...
Además me extraña teniendo en cuenta que la mayor parte de la gente que no tiene claro dónde estamos nos suele situar por América Central...

Con lo fácil que es encontrar en la wikipedia dónde estamos y la definición correspondiente de la zona horaria...

Wednesday, July 02, 2008

Presentación en sociedad de Mi Alter Ego



Os presento en exclusiva mi Alter Ego en el mundo de la consola Wii.... Se llama eferro y es el Mii que uso para jugar a esta divertida consola...

Sunday, June 29, 2008

Pan y Circo.... digo y Futbol...

En serio me alegro mucho por aquellos que el resultado de la selección española en la Eurocopa les haya alegrado la semana (y no lo digo de coña....)....

Pero me haría mucho más feliz sentir la furia/euforia/vida que se nota en las calles en otras ocasiones más importantes (ante desvarios económicos mundiales, ante operaciones mediáticas de mal gusto, para evitar que la economía se sustentase en el crecimiento rápido a base de pelotazos y ladrillo.....)....

Vamos, casi me gustaría sentir esa fuerza ante cualquier hecho importante, incluso aunque fuese algo con lo que no estuviese de acuerdo... Cualquier cosa ante la apatía general por todo (planeta, política (en el amplio sentido), economía, privacidad, conocimiento, desarrollo sostenible....)


Pan y circo