domingo, 29 de julio de 2018

¿Como resolver una incidencia de software?

La complejidad de resolver una incidencia es relativa, depende de muchos factores y condiciones, ayuda mucho establecer en que situación nos encontramos, algunas de las razones de la complejidad son las siguientes:

  1. El desarrollador no conoce el código fuente del software, recién se está involucrando.
  2. La incidencia es muy ambigua, muchas veces esperamos que el error se haga evidente mediante un popup en la GUI, sin embargo, puede ser un error silencioso que solo se hace evidente en el resultado de la funcionalidad.
  3. La incidencia se presenta solo cuando el software es sometido a condiciones extremas, una gran cantidad de datos, muchas peticiones simultaneas o un entorno de red con mucho trafico.
  4. El desarrollador está experimentando con una tecnología nueva.
He establecido una serie de pasos que a mi me ayudan a resolver la incidencia de forma exitosa.


1.- Análisis del problema

Lo primero es comprender la incidencia desde el punto de vista del usuario, tener muy claro que es lo que el usuario percibe como incidencia, puede ser muy evidente como un popup con la descripción del error o puede ser muy difícil de comprender. Si la incidencia no es muy clara solicitaremos al usuario que nos narre en forma de historia que fue lo que pasó, hay que poner especial atención a los detalles.

Usualmente el Usuario reporta la incidencia en alguna herramienta o gestor de incidencias, debes leer detalladamente toda la información disponible, presta atención a cada detalle.
Si hay un popup con mensaje de error, este mensaje puede ser muy genérico, para obtener más detalle hay que revisar los archivos  logs de la aplicación y buscar más información sobre la incidencia.

Es importante que confirmes que la información entregada por el usuario sea coherente, que tenga sentido, muchas veces el usuario hace suposiciones sin sentido. Para ello te apoyaras en tus conocimientos sobre la aplicación, tu sentido común, tu lógica y por último, aprovechando la información de los logs.

1.1- Ponerse en Contexto (aplica con mayor relevancia si eres nuevo)
Si recién te has integrado al equipo de desarrollo y producto, lo primero será ponerte en contexto, aprender sobre la funcionalidad que presenta la incidencia, ¿Cuál es el objetivo?, ¿Qué datos de entrada se necesitan? ¿Qué resultados se esperan?
Familiarizarte con cada uno de los conceptos (jerga de palabras) que se manejan te ayudará a ser más productivo, ante la duda siempre pregunta.


2.- Replicar la incidencia
Una vez que tenemos muy claro en que consiste la incidencia, procedemos a replicarla en nuestro ambiente de desarrollo, este paso puede ser muy simple o muy complejo, puede tomar un par de minutos o incluso horas, dependerá de la complejidad de la incidencia.
Debes apoyarte del usuario que reportó la incidencia, si la complejidad es alta y tienes acceso en persona al usuario, lo mejor será que te muestre in situ como replicar el error. Si no tienes acceso en persona usa todas las herramientas disponibles a tu alcance: email, whatsapp, hangout, videos, etc,. Todo se vale.

Usualmente una incidencia se replica bajo ciertas condiciones, estás condiciones pueden ser los datos que el usuario utilizó, la forma (secuencia de pasos) en qué el usuario usó el sistema, el ambiente (configuración y hardware del sistema) donde el usuario usó el sistema.

Si la información proporcionada no es suficiente para replicar la incidencia y no podemos acceder al usuario que la reportó ni podemos acceder al ambiente donde se replica, lo único que nos queda es tratar de reconstruir los hechos mediante los logs de la aplicación. Buscaremos los datos que el usuario usó y realizaremos las actividades en la misma secuencia que el las realizó, nuestro objetivo es replicar la incidencia.

Si replicar la incidencia es complejo, te sugiero los siguientes pasos:

  1. Has una lista de todas las variables y escenarios que podrían afectar tu funcionalidad.
  2. Ordena la lista de acuerdo a la facilidad de probar
  3. Empieza por probar cada ítem de la lista del más simple al más complejo.


3.- Identificar los componentes GUI involucrados
Si la incidencia se reproduce en un ambiente GUI, debemos identificar el componente asociado a la funcionalidad de la incidencia. Usualmente el componente de partida será el botón por el que el usuario ejecuta la funcionalidad.
Sabemos que una funcionalidad puede involucrar un conjunto de componentes, debemos usar la observación, la astucia, la intuición y el sentido común para determinar que componentes son los que requieren ser revisados, así reducimos el espacio y conseguimos un mayor enfoque.

4.- Identificar las clases y métodos involucrados
Una vez identificado el botón u otro componente GUI que inicia la funcionalidad, vamos a identificar las clases y métodos involucrados.

5.- Resolver de forma aislada
Una vez que tenemos identificados las clases y métodos involucrados, vamos a debuggear de forma aislada cada uno de esos métodos, para ello como pre condición es necesario saber que hace cada método, cuales son los datos de entrada y que datos de salida se espera. Aconsejo debuggear porque así vamos leyendo cada linea de código fuente, y podemos identificar errores lógicos.
Si la incidencia no consiste en errores lógicos, debemos preguntarle al usuario que esperaba como resultado, posiblemente es un error de diseño y hay que buscar otro algoritmo.

6.- Probar la solución
Por ultimo, realizar las pruebas necesarias


sábado, 28 de julio de 2018

Que fue de Rational Software

Cuando estudiamos UML es inevitable leer sobre la empresa Rational Software, empresa que definió e impulso esta herramienta de modelado para el desarrollo de software, hasta llegar a ser un modelo estandard.
La empresa fue adquirida por IBM por la cuantiosa cifra de 2.1 billones de dolares, una cifra que  ni siquiera soy capaz de imaginar. La adquisición fue anunciada en Diciembre del 2002 y concretada el 21 de Febrero del 2003, casi dos meses duró el proceso.
Rational Software fue una empresa que desarrolló metodologías y herramientas para el desarrollo de software, pero lo mas valioso es que estás herramientas y modelos son un estandard y además son abiertas, es decir, están disponibles para el publico, al menos una parte de ellas.
Rational fue una empresa comprometida con la ingenieria de software, impulsó las mejores practicas y servicios para el desarrollo de las aplicaciones empresariales, la construcción de software y sistemas en general, incluyendo software embebido tales como software para telefonos y equipos mobiles.
Rational fue importante, IBM le puso el ojo y desembolsó tremenda cantidad de dinero. Para mi, el legado de Rational es que gracias a ellos ahora podemos desarrollar software de forma más rapida, segura, de calidad y software que está preparado para un entorno que cambia rapidamente.
Al momento de ser adquirida tenía clientes en al menos 89 ciudades, contaba con mas de 3400 empleados, y se estima que más de 600 000 desarrolladores de software usaban sus herramientas. Ahora Rational pertence a IBM y es participante de un mercado que se estima en mas de 15 billones de dolares.
La industria del desarrollo de software aun tiene para varios años más.
Se supone que Grady Booch fue fundador de Rational, pero oficialmente se reconoce a Mike Devlin, un veterano y ya retirado ingeniero en ciencias de la computación.

Referencias
https://www-03.ibm.com/press/us/en/pressrelease/314.wss


¿Como ser un mejor Líder?

Nunca fue mi intención asumir el rol de Líder Técnico, las responsabilidades de este rol son complejas y a mi me gusta la calma, la paz. Si he de enfrentar la adversidad quiero hacerlo solo, porque me conozco, se como motivarme, se como llevarme al limite, de hecho he sido mi propio líder.
Como cualquier otro apasionado por el Desarrollo de Software, tengo una visión, y quizás mi mayor anhelo es poder transmitir está visión al resto de mi equipo.

He aprendido que un líder se hace a través de sus acciones, de hechos y no de palabras, para mi en estos meses ha sido fundamental reconocer cuales son esas acciones, para redoblar esfuerzos, mejorar mi capacidad y motivar a mi equipo de trabajo.
Como siempre, escribo estás lineas, primeramente para organizar mis ideas, y para cumplir con una promesa que me hice años atrás: la de compartir mis experiencias con la nueva generación.

Mantener motivados a tu equipo de trabajo es un gran desafío, hacer que se pongan la camiseta de la empresa, que sientan cariño por la empresa y por el producto. Pero para lograrlo es necesario primeramente, ser un líder ejemplar, predicar con el ejemplo. En momentos de crisis la empresa tiene que ser guiada de forma correcta para mantener la esperanza y confianza en que tarde o temprano se logrará salir de este bache.

Un líder tiene que ser un referente para el resto del equipo, dirigir, motivar y exigir de la mejor manera para lograr un ambiente grato y alcanzar los objetivos propuestos.

Sin embargo, ocupar este puesto no es fácil, no ha sido fácil para mi, porque ante la adversidad la mayoría o todos se darán por vencidos, dirán que es muy difícil e incluso imposible y se quedarán de brazos cruzados, pero tu no, tu tienes que resolver, tu tienes que buscar la solución, tienes que confiar en ti, en tus capacidades y habilidades. Algunos días tendrás que quedarte hasta tarde, porque los problemas se tienen que solucionar, para el líder no existe la palabra imposible, ser líder requiere un enorme compromiso.

El bienestar laboral y emocional de tu equipo es una gran responsabilidad, debes cuidar que tu equipo te vea como un aliado que confíe en ti  y no como el malo del cuento, pero no debes ser tan suave como para que pasen encima de ti. Debes saber cuando ejercer presión, pero también conocer el limite de la presión que puedes ejercer.

En estos meses he aprendido mucho y puedo escribir los siguientes consejos, los escribo con el fin de no olvidarlos y echar mano de ellos cuando los necesite.

Poner el Ejemplo

El buen juez por su casa empieza, un buen líder es aquel que pone el ejemplo, un líder se compromete y cumple con sus compromisos en tiempo y forma. No se puede esperar que tu equipo sea comprometido si tu no lo eres. No se puede esperar que tu equipo aplique las buenas practicas y/o metodologías si tu no lo haces. No se puede esperar que tu equipo aplique Testing Unitario si tu no lo haces. No se puede esperar que tu equipo use las herramientas si tu las ignoras. Un primer paso es poner el ejemplo de estas y otras actividades.
El equipo tiene verte fuerte y seguro de ti mismo en aquellos momentos de adversidades, tienen que ver como tu estás seguro de que encontrarás la solución, que no hay imposibles para ti. Tienen que verte calmado y relajado aun en esas adversidades. ¿Como se consigue esto? Con experiencia y conocimientos.

Establecer Limites

Un líder tiene que reunirse periódicamente con su equipo para dejar claras las responsabilidades de cada uno y al mismo tiempo para conocer las capacidades de su equipo. Y aquí hay que ser bien detallado y preciso. ¿Cuantas horas le toma hacer cierta actividad?, ¿Que tan complejo era la tarea? ¿Que tecnologías se involucraron? ¿Que metodologías? ¿Qué se obtuvo como resultado?, etc,.  Hay que determinar de forma objetiva y verdadera la capacidad que tiene cada uno para poder alcanzar sus metas. Con esta información podrás organizarte mejor y asumir los compromisos en tiempo y forma.

Delegar Tareas

Desde luego, mas de una ocasión he pensado, mejor lo hago yo, porque me gusta que las cosas se hagan bien o un poco mejor que bien y en un dos por tres. Lo cierto es que el tiempo es escaso para nosotros los lideres. Delegar es una de las tareas más importantes, delegar implica confiar en tu equipo, pero la confianza se tiene que ir ganando, de a poco, y tu tienes que delegar paso a paso, primero tareas simples, para que tu equipo vaya cogiendo confianza y experiencia en ellos mismos, y así ir incrementando gradualmente la complejidad. Eso es lo ideal, pero sabemos que en la practica no todos es lineal, a veces hay calma y a veces hay tormentas.
Un líder que no delega no trabaja en equipo, trabajar en equipo es esencial para lograr el bienestar emocional y laboral del equipo, porque haces que se sientan parte de "algo", que sientan que también están contribuyendo en "algo".

Se un mentor
Tienes que ser alguien cercano a tu equipo, ayudarles a crecer, conocer sus fortalezas y debilidades. Poder detectar las fortalezas y debilidades de tu equipo requiere que desarrolles tu capacidad de observación. Sin embargo, si tu has crecido (profesionalmente) desde muy abajo, eso es muy bueno porque te permitirá conectar de una forma más real y sincera, tu pasaste por ahí y sabes lo que tu equipo piensa y siente.

Pida Ayuda

El desarrollo de software es complejo, no podemos abarcar todas las áreas, "nadie nace sabiendo todo " -decía mi abuela. Pedir ayuda no es malo, mostrar un poco de vulnerabilidad es bueno, así tu equipo sabrá que eres tan humano como ellos, que tienes debilidades técnicas pero que las compensas pidiendo ayuda. En ocasiones nos aturdimos y no logramos ver todo el panorama, siempre ayuda pedir la visión y/o percepción de otra persona, porque puede que ella vea ese pequeño detalle que tu estás pasando por alto.
También es bueno pedir ayuda a tu equipo cuando por falta de tiempo tu no puedes cumplir con tus compromisos, eso ayuda a fortalecer la confianza.

Seguiré escribiendo mas sobre estos temas a medida que vaya aprendiendo.




domingo, 8 de julio de 2018

Crear base de datos mysql desde linea de comandos

Siempre viene bien tener conocimientos de bajo nivel para realizar operaciones básicas en el gestor de base de datos MySQL. En esta entrada voy a compartirles como crear un nuevo usuario para crear una base de datos. Es buena practica no usar el usuario root para realizar operaciones sobre las bases de datos del usuario.

1.- Crear un usuario en MySQL
Lo primero que haremos será crear un usuario, voy a crear un usuario llamado roberto con password superpassword.

Para ello vamos abrir una linea de comandos  e ingresaremos a MySQL como usario root, ejecutamos el siguiente comando:

mysql --host=localhost --user=root --password=contrasenaroot

Una vez ingresado a MySQL como root, ejecutamos el siguiente comando:

CREATE USER 'roberto'@'localhost'  IDENTIFIED BY 'superpassword';

donde localhost indica que este usuario solo se puede conectar en modo localhost

2.- Crear la base de datos
Para crear la base de datos, en la misma ventana de linea de comandos ejecutamos el siguiente comando:
create database roberto_db;

3.- Asignar permisos al usuario para la base de datos
Por ultimo, debemos asignarle permisos al usuario roberto para que pueda realizar operaciones a la base de datos roberto_db, ejecutamos el comando:

GRANT ALL PRIVILEGES ON roberto_db. * TO 'roberto'@'localhost';

4.- Verificar base de datos y usuario
Para verificar que todo este funcionando correctamente, abrimos otra ventana de linea de comandos, e ingresamos a MySQL con nuestro usuario roberto, ejecutamos el comando:

mysql --host=localhost --user=roberto --password=superpassword

y luego el comando:

use roberto_db;

Si todo, está correctamente, veremos el mensaje "Database changed".

5.- Crear un tabla
Finalmente vamos a crear una tabla para la base de datos roberto_db;











lunes, 2 de julio de 2018

Salida al Valle Nevado y Farellones

Uno de los grandes atractivos de Chile es sin duda la cordillera de los Andes, y en invierno se cubre de nieve. Termine en tiempo y forma mi semestre universitario, así que podía relajarme. En estos días conocí a una mujer, alegre, aventurera y viajera, una mujer apasionada por la vida y que aprovecha  el tiempo al máximo, así que aproveché la ocasión y compartimos esta aventura.
Fue la primera vez que voy a la nieve, fui a sentir lo que es una nevada, a tocar la nieve y sentir ese viento frío, muy helado.

Fue una semana laboral muy intensa y estaba muy agotado, así que solo quería dormir hasta muy tarde, pero el bus que me llevaría al valle nevado salía las 8:30 am, así que no había opción, tenía que levantarme si o si.

Mientras subíamos la montaña  veía el paisaje y me recordaba a mi infancia, aquel lugar donde crecí, rodeado de la naturaleza, un tesoro invaluable, montañas, arboles, viento, sol y lluvia. Tengo que regresar pronto, definitivamente.

Finalmente llegamos a Valle Nevado, 3000 metros sobre el nivel del mar. Creo que esta salida me permitió reencontrarme con mi niño interior, y es que en este tour, iba una niña de unos 13 o 14 años. Ella era feliz revolcándose en la nieve, y creo que me contagio esa buena vibra, esa alegría, pasa que creo que uno puede ser feliz con aquellas cosas simples, la felicidad es simple pero en ocasiones nos complicamos la vida.

Definitivamente lo que más me gustó fue deslizarme por la nieve en un trineo, adrenalina y empaparme de nieve. Sin duda me hubiese quedado todo el día subiendo aquellas colinas y deslizándome una y otra vez. Pero se requiere tener buena condición física y he descuidado el deporte, definitivamente debo retomarlo... y pronto.