Saturday, June 21, 2014

Spikes - Descubriendo mundos

Es común que los desarrolladores siempre estén enfrentando nuevos desafíos, muchos de ellos son pequeños o abordables y algunas personas ya han resuelto un problema parecido en el mismo equipo o en la Internet. En otras ocasiones ellos se enfrentan a desarrollos completamente nuevos y ellos no tienen idea de cómo abordarlos.
El riesgo puede ser muy grande y el tiempo de la implementación del nuevo requerimiento podría tomar días o hasta años. Después de codificar el requerimiento, si es que pueden, los desarrolladores tienen que testear como está funcionando todo el sistema y si se cumplieron las expectativas. Nada parece claro y es difícil ver tierra en el mar. Es necesario hacer algo más antes de estimar la dificultad, impacto y tiempo para implementar el requerimiento.

Spikes


Los Spikes son una invención de la metodología Extreme Programming (XP), desarrollar un Spike es hacer una implementación de algo relacionado a un potencial requerimiento. ¿Por qué es necesario hacer un Spike antes de un requerimiento?
Los Spikes son útiles cuando el requerimiento es hacer un cambio arquitectural, probar una nueva tecnología, añadir una gran funcionalidad o cambiar una actual implementación y revisar si eso es posible, también es útil para saber mejor el tiempo que tomará el desarrollo, cómo la implementación resulta afectada, y revisar si las funcionalidades tendrán el comportamiento esperado. Definitivamente, el requerimiento es demasiado inmaduro y necesita algo de trabajo para convertirse en un requerimiento con un alcance lograble. 
Además, ellos son usados para investigaciones, diseño, prototipados, o aumentar el conocimiento y reducir el riesgo de un alcance técnico.

Spikes emergiendo


Todos los requerimientos para construir una funcionalidad tienen un riesgo, esta información desconocida puede ser descubierta mientras el requerimiento esta construyéndose, en una conversación de equipo, usando el criterio del desarrollador, discutiendo, colaborando, negociando, etc. El equipo determina hacer un Spike cuando el riesgo es muy algo o ellos realmente necesitan saber más sobre un requerimiento que puede ser demasiado grande. Usando Spikes el equipo obtendrá la información con datos convincentes, entonces los miembros del equipo pueden ver y tomar mejores decisiones.
Cuando el equipo o el Product Owner determina que hay que hacer un Spike, este puede ser estimado y priorizado tal como los otros requerimientos. El mayor valor de un Spike es la información obtenida, no el código desarrollado.

Como enfrentar un Spike


La recomendación es implementar un Spike con un pequeño programa. Es importante investigar y leer, pero es aún más importante escribir código para experimentar, no profundizar solamente en la teoría. Lo complejo tiene que ser ignorado, solo hay que enfocarse en obtener algo funcionando, no importa si el código no es reusable porque éste es un experimento. Documentar y mostrar los resultados a los compañeros es imprescindible. Evitar el código de producción cuando es posible, si no lo es, entonces hay que usarlo, pero no se puede comitear.
Durante un Spike, los desarrolladores no pueden comenzar profundizando porque los Spikes no se encuentran bien definidos. El que investiga en esa niebla puede perderse en el mar de información o intentando hacer muchas cosas al mismo tiempo. También, es importante tener en mente que los Spikes no entregan valor al usuario directamente, por lo tanto, ellos deben ser usados con precaución.

Finalmente, Spikes pueden ser útiles algunas veces, pero la mayoría de los requerimientos no necesitan usar este tipo de desarrollos. Es importante tomarse un tiempo y decidir si es necesario el Spike y esa decisión puede ser crítica en algunos casos para el futuro del proyecto.

Saturday, June 14, 2014

Servidores - Computadores como servicios

¿Tú eres alguien conocido? ¿Cómo vas a ser conocido si nadie puede comunicarse contigo? Estás solitario(a) y hablas con nadie más que una persona a la vez. Mañana doscientas personas requerirán hablar contigo, después de mañana mil, y la cantidad puede continuar incrementando. ¿Cómo vas a llevar eso? ¿Qué tienes tú que es muy importante para ellos y para ti?

¿Qué es un servidor?


Un servidor es un computador que provee servicios para otros computadores en una red, es claro que esta es una básica definición para un servidor. Todos los computadores pueden ser un servidor, no es necesario tener un sistema operativo especial instalado para hacer eso.
Los verdaderos servidores son computadores que trabajan las 24 horas, 7 días a la semana, ellos son estables, se recuperan de fallas, etc. Un servidor puede ser sólo un computador o un computador unido con otros computadores o artefactos electrónicos que trabajan juntos.
Un servidor puede proveer archivos compartidos, una impresora compartida, aplicaciones compartidas, administración de clientes, un servidor de base de datos y más. Así, en el caso de archivos compartidos, este tiene la habilidad de almacenar carpetas y archivos en una parte y los usuarios pueden acceder y actualizarlos. En un servidor Web, los usuarios pueden acceder a la información con un Browser  (Chrome, Firefox, IE, etc.) e interactuar con lo proveído en páginas como Google, Facebook, tú propio blog, sitio Web de tu compañía, etc.

Sistema operativo de un servidor


Un sistema operativo (OS, Operative System) para un servidor es una alternativa cuando es necesario más poder. Estos OS son más robustos, seguros, estables y caros que los OS comunes. Estos pueden soportar miles de usuarios, pero en estos OS es más difícil tener el mismo software instalado en un computador personal stándar. La autenticación también es más fuerte, a nadie le gustaría que hackers usen bugs para acceder a la información sensible de una compañía y los servidores están expuestos.

Hardware del Servidor


Parecido al caso del OS del servidor, si se necesita un comportamiento especial para el servidor, entonces es necesario un hardware especial. El hardware puede ser más de una fuente de poder para mantener al servidor siempre proveyendo servicios, más de una disco duro, administración de redes, y más, hay muchos tipos de hardware para servidores. El procesador y la memoria también son importantes para soportar muchas solicitudes y aplicaciones.
El hardware también intenta asegurar que el servidor esta siempre funcionando y proveyendo sus servicios, este nunca debería apagarse.

Las empresas pueden mejorar cuando usan servidores, sus procesos pueden moverse más ágilmente y ser más poderosos. Los productos de la compañía pueden trabajar usando servidores con servicios específicos y los potenciales clientes pueden conocer mejor a la compañía a través de un sitio Web. Es necesario recordar que el servidor es una cosa y éste trabaja con software que provee sitios Web, servicios Web, u otras aplicaciones para asegurar el futuro de la empresa.

Sunday, June 8, 2014

Rule Engines - Software tomando decisiones

Piensa cómo tomas las decisiones en tu vida. Cuáles criterios usas para seleccionar tú trabajo, mascotas, casa o una escuela para tus niños. Tú sabes que algunas decisiones son más importantes que otras, el resto de tu vida puede depender de algunas de ellas. No pases por alto las decisiones clave.
¿Te gustaría tener la información para tomar mejores decisiones? Las decisiones están basadas en hechos y la experiencia previa. ¿Existen algunas reglas que pueden guiarte para tener lo que quieres?

Automatizando decisiones


Un sistema puede tener la capacidad para tomar decisiones usando su conocimiento base. Su base de conocimiento es nada más que condiciones y acciones. Si las condiciones son cumplidas, entonces el sistema decide acciones a tomar
Por otra parte, las condiciones y acciones no son seleccionadas aleatoriamente, hay expertos en un dominio específico que tienen el conocimiento para recomendar la mejor decisión dependiendo de los hechos que se han cumplido. Un sistema, además tiene la capacidad de automatizar las decisiones, los expertos solamente determinan en qué condiciones la compañía tiene que tomar las acciones. En otras palabras, si las condiciones son ciertas, las acciones son ejecutadas..

Motor de reglas


El Rule Engine es quién examina las reglas con el Inference Engine, es decir, es un Software que ayuda a administrar las reglas del sistema.
El Rule Engine es código que trabaja separado del código de implementación y tiene la posibilidad de cambiar sin tener que pedir ayuda a los programadores. Los expertos del dominio pueden adherir nuevas reglas y hacer los cambios cuando quieran.
Un Rule Engine estándar puede incluir: un Business Rule Repository que es una base de datos para almacenar las reglas del negocio, un Rule Engine Execution Code que tiene el actual código programado para reforzar las reglas y un Business Rule Editor que es una interfaz de usuario intuitiva para definir, editar, documentar y diseñar reglas.

Usuarios del negocio pueden definir las reglas


Con verbalizaciones, los usuarios pueden definir las reglas usando su propio lenguaje. Naturalmente, ellos definen las condiciones y acciones a tomar sin cambiar el código del programa, separando el trabajo del programador y las definiciones de los analistas del negocio.
Verbalizaciones pueden ser soportadas por diferentes sentencias, muchas de ellas pueden significar lo mismo, enfocándose en la expresividad, claridad y formalidad.

Variedades de Rule Engines

Hay muchos tipos de motor de reglas, esos pueden tener reglas de inferencia u otros tipos, usar código Java, C++, u otros, ser Open Source o no. Algunos de ellos tienen características adicionales como arboles de decisión, flujos de reglas, versionamiento de despliegues, simulaciones, reportes, etc.


El Rule Engine te ayuda a decidir "qué hacer", pero no "cómo hacerlo", así separa los objetos del dominio con la lógica que está en las reglas, minimizando los cambios futuros. También provee una aplicación con buenos diseños cuando es usado adecuadamente.