Resultados de la encuesta Harvey Nash / KPMG 2018 Vs el contexto actual Venezolano

A inicios de mes de Junio del 2018 fue presentado por KPMG los resultados de la encuesta Harvey Nash / KPMG CIO Survey edición 2018. Este es el primer año en que participo en la misma. Dirigido principalmente a CIOs, la encuesta recoge preguntas referente al puesto o rol, el departamento de Sistemas y Procesos, equipo de trabajo, entre otras cosas que como CIO tengo la responsabilidad de liderar, dirigir y gerenciar.

Denominada como The Transformational CIO, se rescata la importancia del rol pues de el depende la estrategia hacia el éxito de las organizaciones en un mundo casi completamente digital.

Algunos insights de interés a partir de los resultados de esta encuesta, reflejan realidades mundiales lo cual me ha permitido también comparar con la realidad particular en la cual me desenvuelvo.

Y para hacer las cosas breves, concisas, sin mas preámbulos, he preparado la siguiente lista de resultados a partir de los aspectos que mas llamaron mi atención.

Respecto a los encuestados

3958 Lideres de TI fueron encuestados

84 países son representados

78% indica que están satisfechos con su rol y empleos (pero 13% menos están ‘muy satisfechos’ respecto al año pasado, y menos también, 8% creen que el nivel de influencia esta creciendo)

42% de los encuestados con CIO o directores de TI

17% están incursionando en el rol

12% son mujeres (sin embargo, el 21% de las personad de TI son de sexo femenino)

6% son los mismos directores de la empresa u organización

La inversión que hacen las organizaciones en TI influye directamente en la mejora salarial de los lideres de TI, sin embargo esto va de la mano con mas presión sobre ellos. Es un rol con mucha capacidad de influencia y es un ente transformador. Sin embargo, ha disminuido el porcentaje de lideres que indican ser parte del tren ejecutivo de la organización, pero rescatan que el rol es estratégico para el negocio, por contradictorio que suene, es así.

No es de extrañar que en emprendimientos, el CEO es el mismo CIO, CTO, CFO, sobretodo en el área digital. Y si bien, las mujeres representan un quinto del total de personas que apoyan el área de TI dentro de las organizaciones, solo la décima parte de los CIOs son de este sexo. Es una relación que incluso he percibido en mi entorno. Sin embargo, me gustaría resaltar que en los últimos dos años, cerca del 50% de los proveedores de servicios de TI con los cuales he contactado, la comercialización de los mismos es realizada por mujeres y esto no debe asombrarnos, las mujeres son reconocidas por tener una capacidad de influencia, de aprendizaje rápido y negociación.

Prioridades

Las 5 principales

1. Mejorar procesos de negocio

2. Proveer de TI estable

3. Incrementar la eficiencia operacional

4. Ahorrar costos

5. Mejorar la experiencia del cliente

Las 3 que mas se han desarrollado

+23% Mejorar la seguridad digital

+12% Gestión del riesgo operacional

+5% Mejorar procesos de negocio

Los 3 ramos de negocio donde se presenta y espera mayor crecimiento de presupuesto en TI

60% Ocio y diversión (incrementar satisfacción del cliente)

53% En Tecnología

53% En Servicios profesionales (Mejorar Procesos de Negocio)

Por otro lado, se espera que para los siguientes sectores, el crecimiento sea menor

38% En el sector Gobierno

36% en sector de Telecomunicaciones

35% en el sector de Educación

Respecto al año anterior, se han mantenido las prioridades de optimizar procesos de negocio y maximizar la automatización a través de las TI. Este año, los líderes reportan tener mas presupuesto y personal para consolidar sus expectativas. La optimización constante, tanto a nivel de procesos de negocio, como en la TI que los soporta, es una prioridad lapidaria porque toda la competencia esta haciendo lo mismo.

La realidad local Venezolana, es que para que las empresas lleven ventaja en la carrera ante el éxodo de talentos que sufrimos, se busca optimizar los procesos lo mas que podamos sin el apoyo de la TI, mientras a un paso mas lento, se va construyendo la automatización o implementando una solución de terceros. Naturalmente esperamos que la solución de TI sea estable pues el error o tiempos fuera de servicio, pegan de manera importante en una economía hiperinflacionaria como la que se esta viviendo.

Personas y sus habilidades

Respecto al talento de las personas

67% planea automatizar para minimizar la necesidad de contrataciones adicionales

65% reporta falta de talento para mantener la organización entera

46% accede a terceros y outsourcing en busca de habilidades especificas. El ahorro en costos de este tipo de inversión no es prioridad

32% planea incrementar los gastos en outsourcing (sin embargo, el año pasado el indicador era de 48%)

Que a nivel mundial se reporte una falta de habilidades y talentos para soportar de manera estable la cadena de valor de los negocios, debe alegrarnos a todos. Esto indica que aun hay organizaciones dispuestas a pagar por el mejor talento, es tiempo de seguir estudiando, especializándose y de aprender nuevas tecnologías para cubrir esta demanda.

Las siguientes 4 habilidades han se han incrementado al menos 6% cada año desde el 2015*

46% en Big Data y Análisis de Datos

36% en arquitectura técnica

35% en seguridad

35% en arquitectura empresarial

Por otro lado, las siguientes áreas tienen suficiente profesionales por lo que la demanda ha decrecido en 1% anual desde el 2015*

31% en análisis de negocios

25% en gestión de proyectos

24% programación

*Los % indican la demanda actual

El mundo esta lleno de programadores, gerentes de proyectos y asesores de negocio. En Venezuela, tengo la apreciación de que solo estamos llenos de programadores Junior. Por otro lado, debe alegrarnos que de igual manera, en el país aun podemos formarnos en estas áreas que siguen siendo demandadas de manera local pues existen organismos privados o subsidiados que aun ofrecen e invierten en este tipo de capacitaciones que tanta falta hace en el mercado local.

Otra buena noticia, es que algunas empresas latinoamericanas han empezado a centralizar sus operaciones de coordinación y planificación estratégica en territorio Venezolano como estrategia para maximizar su retorno de inversión. Mientras no ocurra un blackout de Internet, la mano de obra Venezolana seguirá siendo de las mas competentes y mas rentables.

También debe alegrarnos, que localmente, 2 de las 4 competencias técnicas mas demandadas a nivel mundial, en asociación con el sector privado, la Universidad Central de Venezuela (UCV) y la Universidad de Carabobo (UC), ofrecen carreras y diplomados en especialización de estas áreas (UCV en Big Data y Análisis de Datos y la UC en Arquitecturas Empresariales).

Creemos que somos muy buenos en

52% Estan seguros en comprender correctamente los requerimientos de procesos del negocio

47% Están seguros que que  eligen las tecnologías y arquitecturas apropiadas

45% Están seguros que tienen alineadas las estrategias de TI y negocio

Y debemos mejorar en

39% Integrar sistemas core del negocio con soluciones modernas

45% Emplear el correcto modelo de governance

42% en contratar y desarrollar habilidades digitales en personas

En un contexto tecnológico tan dinámico y cambiante, no es de extrañarse este resultado. Tomamos las mejores decisiones de momento pero mas temprano que tarde, aparece una tecnología disruptiva, un nuevo paradigma con ganas de volverse la norma, y o cambiamos o nos quedamos atrás. La solución no duro los 5 o 10 años previstos pero en el momento fue la mejor. Esto va a seguir ocurriendo por lo que debemos estar preparados para eso como profesionales.

Con el desarrollo profesional, debe ir también de la mano el desarrollo de habilidades humanas como el trabajo en equipo, inteligencia emocional, impacto e influencia, entre otras que convierten al buen profesional en un excelente profesional. Habilidades tan necesarias hoy en día sobretodo en contextos económicos y sociales que viven bajo constante estrés.

En qué estamos invirtiendo

70% en Cloud

57% en Mobile

Menos de un 24% piensa en invertir en AI (Inteligencia Artificial), IOT (Internet de las Cosas), VR (Realidad Virtual) y Blockchain

Sobre si debemos irnos a la “nube”, o invertir en infraestructura local, va de la mano con las habilidades de nuestros técnicos en sitio, el tamaño de la organización, y el riesgo de una caída de servicio. Confiar en la nube es algo en lo que creemos los CIOs, las telecomunicaciones, paradójicamente, son servicios críticos y es una responsabilidad que localmente la tienen pocas personas dentro de la empresa como responsables. Al momento de una falla, dependiendo de su magnitud, sin el especialista de telecom, la empresa se detiene. La tercerización en Cloud ha evolucionado a esquemas de negocio bastante accesibles, desde entornos ajustados a la medida, hasta cobro nada mas por el uso. Ya nuestra vida digital se encuentra en la nube, incluso socializamos a través de ella. La nube hoy en día sigue siendo en Venezuela una estrategia accesible de alto ROI ante el contexto local.

Para culminar, les comparto una selección de los quotes con los cuales mas me siento identificado y que se encuentran recopilados dentro del reporte.

Algunos Quotes dentro del Informe

Los CIO hoy en día son mas comerciales, y mas enfocados en los clientes que nunca antes.

Mark Hayes, MD, Harvey Nash, Alemania.

Mantener el control de la arquitectura empresarial es la clave, debemos llevar tecnología a todas las partes de la organización. Los limites entre departamentos, ya hoy en día están borrosos y es imperativo trabajar en equipos integrados con personas de todas las unidades para enfocarse en temas específicos o componentes técnicos.

Markus Sontheimer, CIO, Deutshe Bahn Schenker, Alemania

Los clientes son el centro de todo lo que hacemos. Son los héroes de nuestra economía y debemos garantizar que sean exitosos. Comprometernos con nuestros clientes es la clave y su feedback es nuestra sangre.

EVP & CIO, Sage, Reino Unido

Un buen líder es una persona capaz de cambiar la organización. Un gran líder es una persona capaz de cambiar la mentalidad de las personas.

Vivien Resdat, Director Central IT, Rochling Automotive SE & Co. KG, Alemania

Departamento de Sistemas organizado en Círculos, Comunidades u Holocracia… ¿De verdad sirve?

La holocracia es una forma de organización de las empresas que consiste en la conformación de círculos o comunidades autogestionables, cada comunidad tiene un propósito, un dominio y un conjunto de responsabilidades bien definidas y está conformado por un conjunto de individuos que pueden asumir uno o mas roles. Estas comunidades, si bien son autogestionables, no son autodirigidas. Son dirigidas por una comunidad mayor, con el objetivo de que los esfuerzos estén orientados hacia la misma misión y visión, pero cada círculo es libre de organizarse de la mejor manera para alcanzar sus objetivos y cumplir sus responsabilidades.

¿Suena bien no? Pero, ¿como nace? ¿cuando es necesario? ¿cómo se implanta?, ¿cómo se puede hacer la transición? ¿se ven resultados inmediatos? Me extendería mucho explicando todo esto, sin embargo, afortunadamente, te tengo dos casos de estudio, el primero (Snapper, empresa de servicio de emisión de tickets en Nueva Zelanda), aplicado en una organización en el primer mundo, y el que te voy a contar, vivido en persona, en un país en vías de desarrollo, bajo un contexto económico social bastante desastroso.

Los inicios

Hace 2 años y medio que el anterior CIO de la empresa organizó el departamento en comunidades, el área conformada por cerca de 40 colaboradores, se dividió en 7 comunidades. La iniciativa fue presentada ante directivos quiénes dieron su aprobación y ante el equipo.

Esta forma de trabajo se fijó bastante rápido tanto en quienes conformaron cada comunidad, y nuestros clientes de igual manera comprendieron rápidamente nuestra nueva forma de organización y competencias. En menos de dos meses se creó la cultura de trabajo bajo los principios en la que esta se fundamenta. Quizás esto se deba a la naturalidad humana de trabajar en equipo desde la época en que o lo hacíamos, o nos devoraban los dinosaurios.

¿Por qué tuvimos que organizarnos de esta manera?

Las estructuras jerárquicas y burocráticas, donde un requerimiento pasa días mientras es canalizado por un jefe y escalado a sus subordinados, son el enemigo de un departamento de TI que busca ser ágil y dar respuesta, no en días sino horas.

Con las comunidades, los cargos pasaron a un segundo plano cuando la nueva estructura organizativa hizo énfasis en roles y las responsabilidades de éstos. Cada comunidad tiene un líder y todos los miembros pueden ser el líder en cierto momento.

Los requerimientos de prestación de servicio se encaminan mucho mas rápido, cada comunidad sabe qué le compete, que no y a quién otro sí; propiciando la gestión correcta del requerimiento; el tiempo de respuesta, dependerá de la agilidad de sus miembros.

Los resultados

La comunicación horizontal permitió llevar el equipo a un nuevo nivel. El tiempo de gestión de requerimientos se redujo considerablemente. Los proyectos inician mas rápido y finalizan con mayor tasa de éxito. El ambiente de trabajo es mas cálido, dinámico y competitivo.

A su vez, se crea y reforza en la persona el sentido de pertenencia, y llega a reconocer la importancia de sus habilidades y competencias, independientemente del rol que tenga dentro de la comunidad, creando consciencia de que su trabajo es apreciado directamente por quiénes envían los requerimientos y por el resto del equipo. En síntesis, es una de las estructuras organizativas que permite reforzar el compromiso.

Manteniendo el orden

De igual manera, toda estructura auto-organizada, adquiere independencia en la toma de decisiones, independencia que debe estar normada, supervisada, mas no controlada. Esta es la responsabilidad de una comunidad de gestión.

Si tienes consultas adicionales, o quisieras que adentremos mas en el tema, me lo puedes hacer saber en los comentarios.

Hoy en día, quizás te interese conocer, que estamos haciendo un experimento de expansión en escala, partiendo de esta estructura. De 40 personas, a más de 200 ¿Será posible? ¿Funcionará? ¿Deberá cambiarse algo, todo o nada?

Les cuento en la medida que vaya ocurriendo…

 

 

 

Si somos mas, ¿por qué ahora somos menos?

¿Te parece?

Le pregunté a mi compañero de trabajo el día de hoy. Un sábado que, en la nueva y económicamente revoltosa Venezuela, normalmente, es de descanso.

Y es que estábamos ambos dos, él ahora como un recurso de quien ahora es mi proveedor, y yo, como el máximo representante del área de IT, supervisando y dando las instrucciones para la corrección de lo que fue una tortuosa, fallida, y corregida implementación de un nuevo modelo de administración de los recursos que conforman el principal insumo de la cadena de valor de uno de mis clientes.

El considera que su nuevo líder debió estar ahí, yo considero que las personas que tengo para supervisar a mis proveedores, debieron estar ahí.

¿Cómo consigo el compromiso de las personas? ¿Cómo consiguieron el mío y el de mi compañero?

Sin duda es una decisión personal, pero estoy claro que no llega sola.

En Internet consigo que “… las personas comprometidas son generosas, ayudan a los demás y contribuyen a crear un clima positivo. Promueven el compromiso de otros… “

Me autoevalúo y recuerdo, cuando, de las personas a quien he mentoreado o liderado, han estado un fin de semama, hasta tarde o con hora de entrada pero sin salida, solucionando, mejorando o implementando, algo que sin duda es beneficioso para el negocio. Algunas siguen en el equipo, otras ya no.

Si, si he tenido personas comprometidas. Inculcadas o no por mí o por el entorno, las he tenido. Y no las conseguí de la noche a la mañana, como ocurrió con mi equipo actual, se tuvo que hacer camino. Debo recordar eso, cada persona se trabaja distinto.

¿Por qué siempre somos los mismos 10, de 60 que somos?

Si, recuerdo cuando éramos el dream team de 10 y hacíamos lo que hoy 60 hacen.

Bueno, también es que nos hemos hecho mas complejos…

Te estas autorespondiendo

Capacidad de adaptación y crecimiento ordenado, son características que hemos querido de nuestro software, en su mayoría, hecho en casa. 10 no podemos ya hacernos cargo de todo, para construir rápido necesitamos muchos y de los mas talentosos que podamos tener, para solucionar rápido quizás deban ser menos, muchas manos en la olla dañan el guiso.

Han entrado personas muy talentosas al equipo, me parece

A mi también. Quien quita amigo, quizás siempre serán los mismos 10, lo bueno, es que tenemos con qué mantener ese número o subirlo.

 

Un nuevo reto

Soy una persona con una memoria muy volátil, pero cuando algo me hace clic, una imagen, unas palabras, un momento… comienza a tomar un primer plano en mi mente pausando o interrumpiendo lo que sea que este haciendo.

Hace par de meses recibí el ascenso definitivo en la empresa para la cual trabajo. Soy el nuevo CIO del grupo de empresas para el cual trabajo. 5 años me tomó llegar desde el nivel de entrada en el área de TI, y el día del nombramiento, en almuerzo con el CEO, me dijo las siguientes palabras:

El tiempo en Venezuela es distinto al tiempo en cualquier otra parte del mundo, no espera por nadie. Somos perros. Vivimos años perrunos.

¿Y ahora qué?

En castellano Venezolano, “esto es un peo de otro nivel”. En estos dos meses “he llevado mas palo que una gata ladrona”, ya no tengo problemas personales, tengo cerca de 40 personas y sus problemas que ahora son mis problemas, pasé de estar asando un solo conejo a la vez y preocuparme de que quede bien cocido, a asar 10 o mas a la vez y que ninguno quede incomible.

Pero fuera de eso, me gusta.

Me gusta establecer estrategias y que sean consideradas por quienes veía como “los Dioses del Olimpo”. Me gusta la aceptación que han tenido mis compañeros de trabajo y el reto que supone para quiénes consideran que me queda aún grande el puesto. Significa que puedo hacerlo mejor. Me gusta conocer las necesidades de crecimiento de las personas y cómo puedo ayudarles a obtenerlo. Me gusta ver cómo optimizo los recursos de IT de la organización, cómo negociar con mis proveedores y saber que cuentan conmigo para maximizar la relación costo/beneficio de la continuidad operativa de 5 negocios en Latam.

Me gusta como este movimiento es la oportunidad, y me da la oportunidad, de formar otras personas y sucesores.

Venezuela no es un paraíso laboral precisamente, pero si uno de lleno de muchas oportunidades si sabes lidear con la presión económico social que nos envuelve día a día. Son años perrunos, pasan cosas todos los días, nos pasan cosas todos los días, nada es estable ni constante, lo único constante es que mañana no será para nada igual a hoy y que riesgos es lo que sobra.

Quien no se adapte a esta velocidad en este entorno, está destinado al fracaso.

Se dice que no hay profesional en Latam como el Venezolano, donde con poco o nada, haces milagros. Veremos si puedo hacer la magia.

Seguiremos informando.

Mi oficina ideal: espacios abiertos con opción a privacidad

Recientemente leí un post el cual describía por qué una de las personas entrevistadas se concentra mas en un café que en su propia oficina.

La tendencia de oficinas abiertas no es nueva, sin embargo sí lo es compartir el escritorio de trabajo; esto se ha impuesto con fuerza en el sector creativo y TI. Oficinas que requieren poco papeleo y donde la mayoría del trabajo se realiza y almacena en medios digitales, han adoptado esta práctica con el objetivo de crear espacios de trabajo mas “cómodos”.

Embed from Getty Images

Toda gran idea tiene sus detractores, los espacios abiertos suelen ser estéticamente hermosos, la sensación de amplitud, techos altos y espacios anchos, dan paz. Facilitan la comunicación y socializar con compañeros de trabajo. Pero todos estos beneficios se acaban cuando todos quieren conversar al mismo tiempo; sin paredes que atenúen los ruidos, te encuentras inmerso en muchas conversaciones y sonidos en tu cabeza que no permiten que escuches tus propios pensamientos y te concentres en tu trabajo.

Embed from Getty Images

Mi espacio de trabajo actual no dista mucho de esta tendencia. Somos islas de 6 a 8 escritorios cada una. Cada quien con los adornos o decoración que prefiera en su espacio. Todo es blanco, suelo, techo, paredes, escritorios, archivadores. Su único contraste son las sillas negras y la ropa que traemos encima. Ventanas panorámicas permiten la saludable y deliciosa iluminación del sol y a su vez una hermosa vista al cielo estrellado cuando cae la noche. Mi espacio actual cuenta con café expreso “ilimitado”, y 3 cubículos de reuniones con capacidad de hasta 8 personas cada uno. Como plus, tiene un balcón de la mitad del tamaño de la oficina principal con mesa de Ping Pong, plantas, TV pantalla plana, sonido y una barbacoa.

No me quejo, pero estas son las cosas que agregaría/quitaría para hacer el lugar en el que paso entre 8 a 10 horas diarias, aún mas cómodo de lo que es.

  • Áreas alfombradas: nada mas reconfortante que una pisada silenciosa y atenuada. Mi oficina ideal tiene áreas con sofás y alfombras donde relajarse o atender una llamada. No me quejo si mi isla esté alfombrada también.
  • Cubículos pequeños adicionales: si bien hay experimentos que demuestran que el sonido ambiental estimula el pensamiento y análisis, todo en exceso es malo. De vez en cuando uso una de las salas enormes para crear un espacio entre mi mente y mi laptop. Estos cubículos, preferiblemente alfombrados, serían el espacio ideal para el final del día o cuando toca acompañar a la noche.
  • Salas de siesta: yo no necesito dormir por las tardes para sentirme bien, pero cuando lo he hecho he sentido un plus de energía y concentración. Esto lo hago un momento en la hora de almuerzo en mi escritorio. Los mismos cubículos anteriores podrían acondicionarse para ello.
  • Mas color, menos blanco.
  • Suelo de madera y espacios con muebles con apariencia y olor a esta: la madera siempre me ha parecido relajante, tanto a la vista como al olor. Sé que es difícil de cuidar, ¿pero que cosa valiosa y buena no lo vale?
  • Café con leche ilimitado: porque un cappuccino al menos al día siempre es bueno. Sueño que en mi trabajo coloquen una máquina de café o en su defecto, un Nespresso. No me molestaría con varias de estas en distintos lugares 🙂

Compartí un Post con mis compañeros de trabajo, y quedé como el malo

 

Y no es la primera vez que ocurre. Mi papá siempre dice que nací para llevarle la contraria al mundo, y cuando dice mundo se refiere a él y a sus absurdas aseveraciones o normas sin fundamento.

De manera natural en casa se fué formando en mí esa necesidad de no aceptar las cosas tal cual son o que tratan de imponer sin una explicación objetiva, o al menos una evaluación crítica. “Eres demasiado terco”, “Es lo que tu dices y yá”, “Eres demasiado necio”, “Eres demasiado imbécil”, “Te encanta el caos”, entre otras frases de ‘defensa’ cuando no logran mi aceptación… al que le importe mi aceptación.

Este post describe un fenómeno que me encanta. El autor llama una nueva tendencia de desarrollo de software basado en la ‘moda’. Yo lo traduzco como desarrollo basado en emociones. En general, los desarrollos basados en emociones son aquellos cuando tomas X tecnología nueva porque has visto muchos posts en twitter o blogs referente a ella, la mencionan en conferencias, o Facebook o Netflix estan haciendo uso de ellas, y entonces decides emplearla para tu siguiente proyecto en el trabajo o startup, solo por eso, porque es lo nuevo y cool.

Chévere, pero luego ocurre lo siguiente:

  • La tecnología no es sencilla de entender porque es todo un paradigma nuevo, tu proyecto se retrasa, se retrasan las entregas, y se frustra el equipo.
  • Estas en medio del proyecto y ya existe una nueva versión que depreca cerca del 80% de lo que ya has hecho pero era un cambio necesario para madurar el nuevo framework del que todos hablan. Toca hacer todo de nuevo.
  • Diseñaste toda una solución basado en premisas y documentación y la hora de implementar las promesas de funcionalidades, velocidad y estabilidad que tanto presumían en realidad no están ahí.

Personalmente me encanta siempre probar nuevas cosas, de manera crítica, y comparando contra lo que ya conozco. En el trabajo he introducido tecnologías de integración que hoy sustentan gran parte de la automatización de la cadena de valor del negocio. Y cuando lo hice, fue porque previo a eso ya había probado otras alternativas, y empleando un análisis de características. Otro compañero de equipo probó varias soluciones para el desarrollo de aplicaciones móviles antes de elegir el enfoque que la nueva generación ha heredado. Pero esto solo lo saben mi antiguo jefe, compañeros de trabajo y yo.

Hoy por hoy, de mi grupo inicial de trabajo quedamos solo tres, y hay cerca de 30 personas mas jóvenes, igual de emocionados y enérgicos en probar nuevas cosas.

Recientemente se eligió emplear dos tecnologías emergentes para dos nuevos desarrollos, se han hecho mesas de trabajo alrededor y se ha empleado mucho tiempo realizando pruebas y prototipos. Todo muy bien salvo por eso último, mucho tiempo empleando pruebas y prototipos y cuando pregunté cuál es la opción B contra la que van a comparar sobre qué van a decidir usar obtuve esto: “Bueno, creemos que no hará falta una opción B”

Wrong, really Wrong

Compartí entonces el artículo que les menciono al inicio con el siguiente mensaje en el asunto del correo “Leamos de manera crítica y revisemos nuestras recientes decisiones”.

A la mañana siguiente: “Por qué eres así?”, “Estas creando caos”, “Solo porque no fue tu idea…”.

Recibí muchas acusaciones que solo confirmaban que los acusadores no habían leído el artículo por completo. El mismo, al final, detalla varias estrategias para que los desarrollos basados en emociones salgan exitosos y saber bien que esperar antes de realizar un plan de trabajo y propuesta de producto.

Me decepcionó horrible los juicios levantados contra mi intención de ayudar, pero me reconfortó que algunos si leyeron por completo el post y los vi estableciendo nuevas tareas que se desprenden de esas estrategias dentro de la programación del proyecto.

Mi mantra como desarrollador, evangelizador de tecnologías y gerente de proyectos de software es muy sencilla: no hay que reinventar la rueda, ya todo esta hecho, solo hay que descubrirlo, probarlo y usarlo.

Cómo configurar la conexión a SQLServer mediante JDBC (NetBeans, Java 8, SQLServer Express 2016, Windows 10…)

Nunca antes, luego de haber aprendido cómo conectarme a distintas bases de datos mediante JDBC, me había costado tanto una como lo fue con SQLServer (casi 15 minutos). Gracias a Google, Stack Overflow y conocimiento previo salió medianamente rápido, pero vamos, que a esta gente le gusta complicar a veces las cosas.

Archivo de propiedades de conexión (config.properties)

Ya sabemos que es de muy mala educación, y prohibido además, hard-codear valores o atributos que pueden cambiar en el tiempo de una computadora, una red, etc… a otra; entre ellos las propiedades de conexión a una base de datos. Es por eso, que lo ideal es colocarlo en un archivo de propiedades como los que estamos acostumbrados a hacer:

#Ubicado en src\res\config.properties
db.url=jdbc:sqlserver://servidor\\SQLEXPRESS;databaseName=nombre_bd;integratedSecurity=true
db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
db.user=usuario
db.password=clave

Respecto a los valores db.url y db.driver, recordemos que cada manejador de base datos  (o DBMS, como quieran llamarlo) tiene su forma de establecer estos valores, los que les indico funcionan con SQLServer Express 2016; acá mucha mas información respecto a cómo formar la url.

Y una clase en Java sencilla que lo lea:

package th.control.db;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

/**
 *
 * @author jescobar
 */
public final class DBConnection {
 static InputStream inputStream;
 static Connection conn;
 
 public static void connect() throws Exception {
 inputStream = Class.forName("th.control.db.DBConnection").getClassLoader().getResourceAsStream("config.properties");
 
 Properties prop = new Properties();
 
 prop.load(inputStream);
 
 
 Class.forName(prop.getProperty("db.driver"));
 conn = DriverManager.getConnection(
 prop.getProperty("db.url"), 
 prop.getProperty("db.user"), 
 prop.getProperty("db.password"));
 
 System.out.println("Me conecté!!!");
 }
}

Todo bien, compila al pelo, pero al ejecutar un indeseado java.lang.NullPointerException te aparece en la línea donde intentas cargar el archivo de propiedades mediante el método prop.load(inputStream).

run:
Exception in thread "main" java.lang.NullPointerException
 at java.util.Properties$LineReader.readLine(Properties.java:434)
 at java.util.Properties.load0(Properties.java:353)
 at java.util.Properties.load(Properties.java:341)
 at th.control.db.DBConnection.connect(DBConnection.java:26)

El punto es que ni NetBeans ni Eclipse te van a decir dónde colocar el archivo para que sea leído, debes especificar en cada IDE que rutas incluir en el classpath. En NetBeans una solución sencilla es moverlo al directorio src.

#Ubicado en src
db.url=jdbc:sqlserver://servidor\\SQLEXPRESS;databaseName=nombre_bd;integratedSecurity=true
db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
db.user=usuario
db.password=clave

Ahora tu problema va a ser otro…

Colocando donde es el Driver de conexión

Yo estoy partiendo de que ya te habías descargado el driver JDBC de Microsoft, bien sea el sqljdbc41.jar o el sqljdbc42.jar (clic acá si no lo has hecho) para conectarte con su BD, creaste un directorio lib en el proyecto, y ahí lo metiste. Pero al tratar de ejecutar, recibes otro mensaje de que no vas…

run:
Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:264)
 at th.control.db.DBConnection.connect(DBConnection.java:29)

Y es que tienes que decirle a NetBeans donde estas colocando tus librerías externas. Algo así logras presionando sobre el botón “Add JAR/Folder” y especificando la ruta que visualizas en la imagen.

002

Y con lo anterior, al tratar de ejecutar… Cambiamos de problema! Uno mas de no sabemos cuantos mas… Pero lo que si sabemos, que como todo, es que en algún momento ya no habrán.

Ahora la librería que colocamos nos está diciendo que no logra conectarse con el servidor SQLServer…

run:
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: No se pudo realizar la conexión TCP/IP al host localhost, puerto 1433. Error: "Connection refused: connect. Verifique las propiedades de conexión, compruebe que hay una instancia de SQL Server ejecutándose en el host y aceptando las conexiones TCP/IP en el puerto y compruebe que no hay ningún firewall bloqueando las conexiones TCP en el puerto.".
 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191)
 at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:242)
 at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2369)
 at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:551)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1963)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
 at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
 at java.sql.DriverManager.getConnection(DriverManager.java:664)
 at java.sql.DriverManager.getConnection(DriverManager.java:247)
 at th.control.db.DBConnection.connect(DBConnection.java:30)

Acomodando las cosas para que SQLServer escuche

No tiene sentido que si usas el Microsoft SQL Server Management Studio, y ahí puedes hacer lo que te plazca (creates, updates, inserts, tanto de datos como esquemas, bases de datos, etc…) si tratas de conectarte desde otra aplicación, estén las puertas cerradas. Para abrirlas hay que hacer lo siguiente:

En una línea de comandos (cmd), o desde el comando ejecutar (Tecla Win + R), ejecuta los siguiente:

 C:\Windows\SysWOW64\SQLServerManager13.msc

Se te abrirá una ventana como la siguiente (yo ni sabía que existía). Es el SQL Server Configuration Manager.

001

Y tal como muestra la imagen siguiente, habilita las comunicación TCP/IP dentro de Protocolos de SQLEXPRESS.

003

El SQL Server Configuration Manager te va a decir que necesitas reiniciar el servicio para que los cambios tomen efecto, la siguiente imagen te indica cómo hacerlo.

004

Le damos play a la clase y…. Otra excepción… Lo bueno es que esta nos dice explícitamente que hacer!

run:
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: No se pudo realizar la conexión con el host localhost, instancia con nombre sqlexpress. Error: "java.net.SocketTimeoutException: Receive timed out". Verifique los nombres del servidor y de instancia, compruebe que no hay ningún firewall bloqueando el tráfico UDP al puerto 1434. Para SQL Server 2005 o posterior, verifique que el servicio SQL Server Browser se está ejecutando en el host.
 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.getInstancePort(SQLServerConnection.java:5247)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.primaryPermissionCheck(SQLServerConnection.java:1871)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1608)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
 at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
 at java.sql.DriverManager.getConnection(DriverManager.java:664)
 at java.sql.DriverManager.getConnection(DriverManager.java:247)
 at th.control.db.DBConnection.connect(DBConnection.java:30)

Nos dice que verifiquemos que un fulano servicio llamado SQL Server Browser debe estar iniciado. Y si revisamos la última imagen, hay algo ahí llamado igual. No hace falta imagen para esto sino sentido común: Clic derecho -> Iniciar… Play de nuevo!

run:
feb 05, 2017 9:59:38 AM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
ADVERTENCIA: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Este controlador no está configurado para la autenticación integrada. ClientConnectionId:056b6f27-b750-4a8d-bda7-188d11f2aae9
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2400)
 at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:68)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3132)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123)
 at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
 at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
 at java.sql.DriverManager.getConnection(DriverManager.java:664)
 at java.sql.DriverManager.getConnection(DriverManager.java:247)
 at th.control.db.DBConnection.connect(DBConnection.java:30)

Ok, esto sigue descontrolado! Y ahora qué?

Bueno, resulta que Microsoft permite dos maneras de conectarnos con su base de datos, y eso se lo decimos en el archivo de configuración. El parámetro integratedSecurity (integratedSecurity=true) indica si se usan las credenciales de Windows para conectarnos o si por el contrario, debemos especificar un usuario o contraseña (integratedSecurity=false), tal cual estamos haciendo. En otras palabras, SQLServer se esta pasando por el forro nuestro usuario y clave porque está usando nuestras credenciales de Windows para iniciar sesión…

Hay dos soluciones para esto… La que puedes inferir en el párrafo anterior (coloca en false el valor de integratedSecurity), o la otra, localizar el bendito sqljdbc_auth.dll y pegarlo en la carpeta System32 de Windows. Ambas funcionan, y el fulano .dll está en el mismo archivo donde bajaste los drivers JDBC de SQL Server hace unos parrafos mas arriba.

Cuando ejecutes de nuevo tu clase, este será el mensaje que obtendrás:

run:
Me conecté!!!

Saludos!