Errores de gestión… Las empresas de becarios

Uno no deja nunca de aprender, sea de informática o sea de gestión, en este caso me toca hablar de una tendencia que se afianza día a día en las empresas de informática y de la que he tenido un ejemplo flagrante hace muy poco. La lección de hoy, queridos lectores, es que, nunca, nunca, nunca, hay que dejar que tu empresa sea solo un conjunto de becarios.

¿Son malos los becarios? Claro que no, seguro que en poco tiempo se convierten en unos excelentes profesionales. Con la guía adecuada, y aprendiendo de los profesionales de verdad, todos aprendemos y nos convertimos en profesionales, con poca experiencia, pero profesionales. Entonces, ¿porqué me quejo? Veamos el ejemplo.

Una startup de la que prefiero no acordarme, comenzó su andadura en un nicho de mercado en el que partía con ventaja. Sus socios eran lo mejor de lo mejor en sus áreas de experiencia. Unos provenientes de la parte académica, pero con experiencia en proyectos de investigación, otros con experiencia en el desarrollo de software a nivel profesional y un gestor que creía que sabía de todo que encontró el dinero y los inversores necesarios.

Como toda startup su obligación es focalizarse en su proyecto principal y quemar dinero hasta que consigue sacar al mercado su idea o se queda sin dinero. No obstante, por errores que no vienen al caso, la idea principal se marchitó y se lanzaron a intentar crear productos en mercados cada vez más abarrotados, donde no contaban con las ventajas anteriores y con el dinero ya mermado. En esas los socios más interesantes y menos comprometidos fueron abandonando el barco, o bien se vieron obligados a abandonar al no tener expectativas de obtener un salario digno (digo digno, no a la altura de sus méritos, que eso siempre es mucho más, pero, oye, estamos en una startup). Estas personas son reemplazadas por becarios de manera que, al final, solo queda un socio con conocimiento y experiencia y el resto que se limita a aprender lo mejor que puede intentando no romper demasiado.

Y el error principal viene cuando el gestor, en su afán por prolongar una agonía innecesaria, decide sustituir a este socio “excesivamente caro” por otras personas de un nivel muy inferior, sin capacidad de trabajo ni compromiso con la empresa pero obedientes y baratitos… El resultado, el de siempre, una mierda.

¿Puede una empresa sin conocimiento práctico, sin experiencia, sin foco y sin socios comprometidos trabajando en la misma triunfar? ¿puede acaso sobrevivir? A los ojos de quien solo mira números y no valora el trabajo real de ninguna manera es la consecuencia evidente, pongo dos por el precio de uno y gano en el cambio… ¿Ganar qué? Duplicas el numero de problemas, dilapidas el poco conocimiento que tenías y llevas a cero la confianza de los inversores en una empresa que se puede montar con cualquiera que pase por allí y que no premia ni valora experiencia ni conocimiento… En fin…

Internacionalizar una web en php

main_icoDespués de muchos meses trabajando en una aplicación que, por azares del destino, alguien decidió que se realizase en php utilizando como frontend Drupal (del que solo se utiliza el sistema de registro y poco más) y después de infinitos test de usuarios (que nunca son suficientes) y después de generar un proyecto con 31.000 líneas de código propias (el total sin contar drupal suma más de 203.000) llega el momento de venderlo.

El primer cliente siempre es el peor, pero es que el segundo ¡es holandés! y, claro, lo quiere en inglés… Y algún lumbrera le asegura que tendrán la versión en inglés ¡¡en una semana!!. Lo bonito del tema es que cuando aseguró eso no preguntó a nadie del equipo de desarrollo. ¿Para qué? Las fechas las ponen ellos, qué más da que sea algo imposible.

Total, que, de casualidad, nos enteramos de que hay que hacer este “pequeño” cambio, las traducciones no serán un problema, porque tenemos gente que puede hacerlo bien y rápido, pero, ¿cómo internacionalizamos el php? La parte que cubre Drupal (y que podría traducirse desde el mismo sistema) es mínima, en total tenemos 425 archivos php donde hay textos en castellano en cualquiera de ellos, además, parte en html, parte en php y parte en javascript… Cualquier otro programador hubiese presentado su carta de renuncia o hubiese pedido una baja laboral. Además, ya nos han dicho que no piensan pagarnos las horas extras y que si cometemos errores tendremos que arreglarlos en nuestro tiempo libre.. ¡Eso si que son condiciones laborales y no las de los mineros de asturias!

Sin embargo mi responsabilidad como profesional me obliga a atender las peticiones por absurdas que sean e intentar dar soluciones… Así que os pongo un resumen de lo que hicimos:

Problema número 1: qué sistema de internacionalización usar.

Al contrario que Java, que dispone de un sistema i18n con properties desde el principio, php adolece de este mecanismo estandar. Después de valorar varias opciones (muchas usadas en programas populares como prestashop, etc.) descubrimos que lo mejor es utilizar gettext.

Gettext es un proyecto GNU que, afortunadamente, es utilizado muy ampliamente en Linux para proporcionar internacionalización a sus programas. Es por ello que está presente en la mayoría de las distribuciones (incluyendo las que usamos para desarrollo y pruebas) y, además, tiene un módulo para php que también está normalmente incluida en las instalaciones normales de php (incluso en XAMPP está).

¿Cómo funciona gettext? Básicamente se basa en localizar todas las cadenas de texto ya escritas y sustituirlas por una función que la traduce. En el caso de php esta suele ser la función gettext(‘cadena’) o, abreviada _(‘cadena’). De esta forma, el texto en html:

<p>Esto es un texto</p>

Lo modificaremos en:

<p><?php _("Esto es un texto")?></p>

Luego el sistema localizará, según los parámetros de idioma, su traducción y la escribirá. Si no encuentra ninguna escribirá esa misma cadena.

Así que el primer, y más tedioso, problema es sustituir todas las cadenas de texto en nuestro programa por estas sustituciones. No hay una forma única y automatizada de hacerlo, porque podemos encontrarnos texto dentro del código php, dentro de etiquetas html o incluso dentro de código javascript y dependiendo de dónde se encuentre esa cadena deberá traducirse (o no).

Problema número 2: traducir las cadenas

Una vez que tenemos “marcadas” todas nuestras cadenas, deberemos generar un archivo con las traducciones… Esto ya es más sencillo de automatizar porque podemos utilizar herramientas que ya existen. La más adecuada es poedit. Esta herramienta nos permite escanear directorios de fuentes y almacena las cadenas que no están traducidas en un catálogo para después permitir que un traductor las vaya traduciendo sin tener que saber nada de php.

Antes de utilizar poedit es muy recomendable que establezcamos las rutas de los directorios donde vamos a guardar los catálogos traducidos. Generalmente esto se hace en el directorio raiz de la aplicación creando estos directorios:

locale/xx_XX/LC_MESSAGES

donde xx_XX es el código del idioma y país (en_GB en nuestro caso). Dentro de cada uno de esos directorios almacenaremos los .po (y .mo que compilamos) que generaremos con poedit.

Una vez creados los directorios, arrancamos el poedit y lo configuramos indicando que el directorio principal será “.” y los directorios a escanear serán ../../../ (suponiendo que hemos respetado la estructura que os he comentado). También es importante el tema de los plurales que, en caso del español sería:

nplurals=2; plural=n != 1;\n

Una vez todo en su lugar solo tendremos que actualizar para que poedit busque en todos los archivos y nos encuentre todas las cadenas que se pueden internacionalizar. Utilizando el mismo programa podemos hacer que los traductores nos traduzcan las cadenas y nos devuelvan el mismo .po ya traducido.

Problema número 3: hacer que el sistema use el idioma del usuario

Para que funcione gettext para php hay que incluir las siguientes líneas al principio del script:

putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale, 'english');
bindtextdomain("messages", __DIR__."/Locale");
bind_textdomain_codeset("messages", 'UTF-8');
textdomain("messages");

Lo relevante ahí es que $locale ha de contener el idioma (en_GB) messages es el nombre que tiene el catálogo poedit (así tendremos un messages.po en el directorio correspondiente) y que a bindtextdomain hay que pasarle el directorio donde hemos colocado nuestros locales.

Para el caso de drupal vamos a utilizar el idioma que el usuario ha puesto en su perfil, por lo que el código adicional a utilizar es:

global $language;
$locale = $language->language;
if ($locale=='en')
    $locale="en_GB.utf8";
else
    $locale = 'es_ES.utf8';

Esto es así porque los locales han de ser tal como están en el sistema operativo y, sin embargo, los idiomas en drupal solo indican el idioma y no el locale.

Seguimos en ello (hay muchos archivos) y además, nos queda pendiente la internacionalización de los correos y de los informes que generamos… Seguiremos informando.

Prerrequisitos para emprender

Esta entrada es parte de una serie, el primer post lo puedes encontrar aquí: Enprender o No emprender. Te recomiendo que empieces por el principio… En cualquier caso, a lo que vamos.

¿Qué se necesita para ser un emprendedor?

No, no estoy hablando de una idea genial, de espíritu aventurero ni de talento infinito, eso son chorradas y todo el mundo lo sabe, después de analizar mis 10 años como empresario/emprendedor, os dejo una lista corta de lo que si-o-si necesitas para emprender:

1.- Apoyo: si tienes pareja ten en cuenta que ella deberá estar dispuesta a mantener la familia con su trabajo (si lo tiene), a renunciar a estar contigo innumerables horas y a encargarse de todo y de todos en tu ausencia. Si no tienes una pareja tendrás que buscar los apoyos en la familia, pero si la tienes ten en cuenta que ella/el será el que más sufra con tu aventura. Si no consigues que entienda el concepto, quizá es hora de buscarse un trabajo y dejarse de quimeras.

2.- Decisión: a partir del momento en que decides emprender nadie te volverá a decir qué hacer, los aciertos y las equivocaciones serán solo tuyas. Puedes echarle la culpa al mercado, al tiempo o al gobierno, pero al final eres tu el que toma las decisiones, así que tienes que estar dispuesto a “apechugar” con ellas. Si eres de los que se consumen con cada decisión o intenta tener una justificación “perfecta” para cada paso que da… Olvídate. La vida es dura y hay veces que las decisiones hay que tomarlas sobre la marca. A veces una decisión poco meditada es mucho mejor que ninguna decisión.

3.- Fortaleza mental: si, la gente es muy mala, y contigo lo va a ser mucho más. Ser alguien que no sigue las reglas de los demás, que no soporta a jefes y que no tiene que hacerle la pelota a nadie te va a meter en problemas. Hablarán mal de ti, se alegrarán de tus fallos y minimizarán tus éxitos. Si este tipo de cosas te afectan, déjalo, en este mundo necesitas hacer ver que nada te afecta. Esto es algo que no es posible hacer con naturalidad, pero con el tiempo te va saliendo con menos esfuerzo.

4.- Fe infinita (que no ciega): debes creer en lo que haces, en porqué lo haces y en lo bueno que sería que todo el mundo usase eso que quieres hacer. Es más, debes creerte en la obligación de hacer realidad tu proyecto como una misión divina, cualquier otra cosa será como tener una afición cara, muy cara. Eso si, cuando finalmente el mercado te escupe a la cara y decide que prefiere hacer las cosas mal o seguir viendo telebasura en vez de escuchar una TED talk, tienes que saber cuando tu misión ha terminado.

5.- Paciencia: Roma no se construyó en un día, pero para los inversores esperan que en una semana les montemos un universo completo y que lo empecemos a llenar de seres inteligentes en menos de lo que dura una ronda de inversión… Va a ser que no. Si no tienes una forma de ganarte la vida y mantener calentito tu proyecto durante un par de años, mejor ni lo intentes. ¡Hasta facebook tardó 6 años en empezar a ser rentable!

6.- Buen humor… Esto ya es una opinión personal, pero sin sentido del humor la vida es muy aburrida… Y las aventuras empresariales más, así que si eres de los que llora más que ríe, tampoco es recomendable. Ten en cuenta que te estás embarcando en una actividad sin vacaciones, sin bajas, sin horarios y sin seguridad ninguna. Si no le ves el lado bueno, al menos ríete de ti mismo.

El resto…, eso de las capacidades de empatizar con la gente, de reclutar el mejor talento, de tener madera de líder carismático y esas cositas, bueno, son cosas que se dicen cuando ya se ha tenido éxito, y la mayor parte de las veces es simplemente mentira que se cuenta cuando no se quiere dar detalles escabrosos ni desanimar a las masas de emprendedores en ciernes.

Y este es mi último post de consejos, a partir del próximo os iré contando mi experiencia personal como emprendedor… Igual con eso tenéis más pistas…

Emprender o no emprender

Hoy en día emprender un negocio parece ser que debería ser fácil y todos nosotros deberíamos plantearlo hacerlo… Permitidme que os corrija, eso no es así.

El emprendedor medioYo he sido empresario antes que emprendedor, no es que me guste mucho la gestión empresarial, pero en una pyme no queda más remedio, alguien tiene que hacer el trabajo sucio. No obstante, ser empresario es tener un producto que vender, unos clientes que lo compran y unos costes menores que lo que se recibe por ese producto. Ser emprendedor ni se le parece, es más, es todo lo contrario: crear un producto que no existe, buscar clientes que no tienes y gastar más de lo que ingresas…

Según las estadísticas de los bussiness angels, con suerte, 8 de cada 10 empresas en las que invierten fracasan y desaparecen, solo 2 crecen y generan valor suficiente para multiplicar la inversión de los Bussiness angels (BA) o los Venture Capital (VC). Pero, ¿sabéis qué? obtener inversión de un BA o de VC no es nada sencillo y, quizá, solo una de cada 100 empresas que buscan esa inversión la terminan consiguiendo, así pues, solo 2 de cada 1000 nuevos emprendimientos salen bien. ¿Qué pasa entonces con los otros 998?

Pues básicamente lo que pasa es que fracasan. En todas las charlas de emprendimiento siempre se nos dice “fallar es bueno” y se nos trae a un emprendedor de éxito a contarnos cómo había fallado antes de conseguir sus éxitos. Nunca se nos traerá a alguien que ha fracasado y nunca ha conseguido un éxito, aunque estos sean la mayoría. ¿Porqué no se nos muestran los fracasos de verdad? ¿no quedamos en que se aprende de los fallos?

En próximas entradas iré contandoos mi experiencia como emprendedor… Seguid atentos si queréis aprender, de verdad, qué es eso de intentar emprender… Eso si, el final no es feliz, ya os lo advierto. Quizá como la foto que acompaña el post, la calavera pelada es lo único que queda del emprendedor medio…

De nóminas y facturas

Hoy tengo que intercalar un post de “lloriqueo”… Id sacando la “buambulancia”, que empiezo.

Masthead-415x191-bills-paidIgual es una manía mía, pero tengo la mala costumbre de pagar por los trabajos que me hacen, o incluso los que no me hacen, puntualmente siempre que no tenga ningún problema que me lo impida por fuerza mayor. No es que sea un buen pagador, es que las deudas que se pueden pagar, hay que pagarlas… Y mucho más si es por trabajo que ya te han hecho.

Esa costumbre, sin embargo, no está muy arraigada en nuestro país (no puedo hablar de las costumbres de otros), donde el más listo no es el que más sabe, sino el que es capaz de engañar durante más tiempo.

El caso es que siempre hay clientes “listillos” a los que has de recordarles periódicamente que tienen que pagar una factura. A veces es poca cantidad y solo con el aviso es suficiente (y tampoco nos importa esperar), a veces son cantidades importantes y la falta de ese ingreso nos causa serios problemas financieros, y el aviso parece que es como el suave viento de primavera: se nota pero no molesta… Llegados a la situación en la que tenemos varias facturas impagadas de varios clientes por trabajos que ya se han hecho y se han entregado, ¿qué se puede hacer?

Pues la verdad, no lo se, a mi algún cliente me han llegado a echar broncas monumentales por recordar que lo de pagar a los proveedores no es un favor, sino una obligación, y que el tiempo pasa (si, el tiempo relativístico para pagar facturas es un invento muy nuestro, pero no existe). Claro, que el cliente/patrón que actúa así denota que no tiene el más mínimo interés en lo que le estás proporcionando. Eso, o que es una mala persona, que tiene algún problema que no nos quiere contar, o que, simplemente, está estirando los plazos para ver hasta donde eres capaz de llegar.

Callarse tampoco es una opción, siempre alguno de los listillos que ha dejado por meses sin pagar la factura te puede decir que “se me ha traspapelado, ¿porqué no me has dicho nada?” o espera a que se lo recuerdes para decirte lo mal que lo tienen y darte un nuevo plazo de pago… grrrrr.

Hay también un leve tufo sádico en algunos que disfrutan viéndote sudar la gota gorda para conseguir que te ingresen un dinero que ya te has ganado, dándole más valor a la parte que menos tendría que tener, el pagar efectivamente la factura. Pero es que no todo el mundo es masoquista y hay muchos que necesitan ese dinero para algo más que gastárselo en putas y alcohol…

En resumen: si eres de los que no pagan las facturas a tiempo, tu sabrás porqué lo haces, pero está muy feo. ¡Y lo sabes!

Y si, encima, esa factura corresponde a un trabajo de un autónomo (que sale mucho más barato que ponerle una nómina) que ha ido todos los días a tu centro de trabajo y esperaba cobrar la factura próxima a cuando cobran el resto de los trabajadores con los que comparte mesa, que sepas que está más feo todavía.