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 🙂

Acerca del Mobilegeddon y la forma en que Google cambió la búsquedas generales, móviles y locales

Lo único constante con el marketing es el cambio

Con esa frase inicia una de las ponencias a las que asistí en Orgill el año pasado. En el 2015, ocurrió una serie de eventos en la Web denominado por varios nombres pero quizás el mas común es el Mobilegeddon. Se habló específicamente de cómo Google muestra ahora los resultados móviles y locales. Sin embargo, he querido enriquecer este post añadiendo información importante sobre otros cambios realizados en el motor de búsqueda que considero forman parte de ese armagedón web.

El de 21 de Abril del 2015 Google cambió la forma en qué los resultados de las búsquedas se mostraban en los dispositivos móviles. Lanzó un nuevo algoritmo de rankeo que dejó varias páginas fuera por no estar preparadas para su navegación móvil o no ser lo suficientemente responsive. Sin embargo, ser responsive es sólo uno de los tantos criterios que el algoritmo evalúa. Otras características como relevancia, localización, idioma, entre otros, son características también evaluadas.

Ocupando en el 2017 el 77% de share en los motores de búsqueda empleados, y considerando que cerca del 60% de las búsquedas se realizan ahora desde un dispositivo móvil, que tu sitio quede fuera del ranking no es gracioso para algunos (más estadísticas, acá).

Muchas preguntas salieron a la luz por parte de los afectados cuyos resultados ya no aparecían en el ranking de Google. Para eso, Google preparó en su blog un FAQ a modo de explicar con detenimiento de qué van estos nuevos cambios. Una de las aclaratorias que realiza es que el ranking solo varía en dispositivos móviles pero en equipos de escritorio y tabletas, se mantiene. También indica que no excluye del ranking portales que no sean mobile responsive, pero deben tener contenido relevante para su visibilidad (acá escribí algo al respecto de esto último).

La siguiente herramienta de Google permite validar que tan mobile responsive es un sitio Web.


Las búsquedas en Google son gobernadas por sofisticados algoritmos como el Panda, liberado en el 2011 y su última versión a a la fecha 18 de Julio de 2015. Este algoritmo tras su lanzamiento en el 2011 eliminó en sus resultados cerca del 12% de sitios indexados. El algoritmo busca entre varias cosas, mejorar el indexado de sitios de calidad, sacando así de sus resultados sitios pocos relevantes o con contenido de mala calidad. Dentro de esta categoría entran aquellos que usurpan información de otros sitios.

En combinación con el algormitmo Penguin, actualizado en Septiembre del 2016, el cual busca eliminar de los resultados sitios spam o de contenido robado, hacen que la web sea cada vez mas segura, eficiente y relevante.

Por su parte, el RankBrain, también liberado en el 2015, emplea minería de datos para ofrecer resultados a los usuarios de sitios que puede que posean la información que están buscando a pesar que las palabras o frases empleadas no hagan referencia directa al resultado. Según Google, 15% de los resultados exitosos provienen de esta inteligencia articifial.

El 3 de Agosto del 2015 también cambió internacionalmente la forma en que Google recomienda los lugares mas próximos o relacionados a la búsqueda realizada. Se pasó de una vista casi plana de 7 lugares a una de solo 3 lugares, denominado “3-pack”, acompañado de la vista en un mapa de Google Maps. Con eso Google sacó al 60% de los resultados sobre los cuales el usuario presta atención de manera inmediata.


Todos estos cambios tuvieron lugar en un lapso menor de 12 meses. Continuamente los buscadores realizan cambios o mejoras en sus portales, algoritmos, infraestructura, pero rara vez ocurre uno de tal magnitud que cambia las reglas de juego de tal forma.

Los lineamientos y demás consideraciones del área de SEO, son actualizados con frecuencia en la medida en que quienes dominan la búsqueda de resultados realizan cambios en su plataforma. Es por ello que no hay que dejar a un lado las optimizaciones y herramientas que podamos emplear en nuestros sitios con el objetivo de competir por esa posición dentro de los resultados de búsqueda.

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!