Developing Frogtek

El blog del Departamento de Tecnología

Autor: admin (página 1 de 8)

Restringir uso de emoticonos en EditText

La nueva versión 4.4 del SDK de android (Kit Kat) trae consigo los famosos emoticonos (o emojis), añadidos al teclado software, que tanto gustan en whatsapp o facebook.

emoji

 

Nos hemos encontrado con algún usuario de nuestra aplicación que los ha utilizado para dar más colorido a los nombres de proveedores, productos, clientes…

Pero luego nos han dado problemas a la hora de hacer alguna consulta SQL con un LIKE comparando strings.

¿Cómo lo he solucionado? Si limito los EditText a únicamente letras del abecedario o números, estoy haciendo que la aplicación no pueda ser 100% funcional en países donde se usan otro tipo de caracteres como Rusia, Japón, China…
He decidido usar la clase InputFilter, como sigue:


InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, 
                           int start, 
                           int end, 
                           Spanned dest, 
                           int dstart, 
                           int dend) {
        for (int i = start; i < end; i++) {
            if (!Character.isLetterOrDigit(source.charAt(i)) 
                && !Character.isWhitespace(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};

editText.setFilters(new InputFilter[]{filter});

Espero que te sirva. O si tienes una solución mejor, es bienvenida.

Frogtek Video Playlist part 1

Como ya sabéis, cada cierto tiempo organizamos comilonas almuerzos ligeros en la empresa + visionado de vídeos técnicos (ver TPV).

Nuestro camarada Dani fue el elegido para seleccionar los vídeos del último TPV del año. Aquí os dejamos con su selección.

Empezamos con un vídeo que se está volviendo viral en USA. Este es “Code Stars“, o “por qué se debería enseñar a programar en las escuelas”. A ver cuántas celebridades podéis nombrar:

En tiendas de países en vías de desarrollo, como la India, es donde podemos comprender qué tipos de emprendedores son nuestros potenciales clientes. En este vídeos, entenderemos la mentalidad de un tendero enfocada a los negocios.

¿Qué significa ser una startup? Pues nada menos que un experimento. Aquí Eric Reis nos lo explica:

Nos movemos a terrenos más gafapaster para iniciar un viaje al mundo de la visualización de datos. ¡Viva y bravo!

Y no podía faltar un Google I/O. En este caso, sobre UX en Android y cómo realizar investigación al respecto.

El Día del Bedel

El último viernes día 6 estaba marcado en el calendario de nuestra oficina como Janitor’s Day. ¿En qué consiste este día? El día del Janitor, bedel en español, es un día de trabajo que se dedica a limpiar, pulir y dar esplendor a todo la suciedad, desorden o incidencia en nuestro software (aunque claro, también podría haberse llamado el Día del Apaleamiento).

De esta forma, durante un día el equipo se dedica en exclusiva a realizar mejoras y modificaciones en el código que de otra manera se hubieran postergado y abandonado en el olvido.

El janitor de Scrubs, hombre 10

Para organizar el evento, creamos una hoja de cálculo con una amalgama de tareas que realizar. La idea era que voluntariamente, cada uno tomáramos una de esas tareas y nos encargáramos de solucionarla. Las tareas podían ser tan variopintas como arreglar una tanda de tests, refactorizar una clase o traducir al inglés las cadenas que quedan en español en la aplicación.

En definitiva: todos los que trabajamos en software nos damos cuenta de que en ocasiones, algunas tareas se postponen o se descartan porque se descubren a mitad de otra tarea, y el miedo al cambio de contexto impide su realización. Es por ello que realizar un Janitor’s Day cada cierto tiempo es una tarea que recomendamos encarecidamente, ya que las ventajas son incontables:

  • Permite coordinar al equipo en un mismo objetivo
  • Aumenta el control del código por parte del equipo.
  • Permite e incluso potencia el pair programming
  • Da cabida a tareas que de otra forma jamás se realizarían (desidia, desconocimiento del problema por parte del C-level, …)

R, rPython y ggplot2. Un poco de trabajo en equipo

Me llamo Jesús Armand y desde hace unos meses formo parte del equipo de Frogtek como científico de datos. Desde mi llegada, la compañía ha comenzado a utilizar nuevas herramientas en su día a día. Es por ello que a partir de ahora intentaré escribir sobre trucos, pequeños tutoriales o problemas con los que nos encontremos.

Cuando se trabaja con datos, a veces nos encontramos con la necesidad de ejecutar distintos códigos o comandos en diferentes herramientas. Por ejemplo, podemos estar trabajando con una base de datos en MySQL para extraer cierta información que queremos filtrar con algún método implementado en Python y ese resultado representarlo en un gráfico utilizando el paquete ggplot2. Resulta engorroso el proceso de crear, guardar y volver a abrir un fichero en las distintas etapas del proceso.

Es por ello que R a veces nos ayuda a simplificar todas estas tareas y a hacerlas más sencillas. Por ejemplo, con el paquete RMySQL podemos conectarnos de forma rápida con nuestra base de datos y realizar las consultas directamente desde la consola de R y guardar los resultados para, posteriormente, trabajar con el paquete rPython, creado por Carlos Gil Bellosta. En él podremos llamar fácilmente a las funciones desarrolladas en código Python y, finalmente, con las variables almacenadas en nuestro workspace en R, representar gráficamente la información que deseábamos en un principio con ggplot2.

Hoy nos centraremos en un pequeño ejemplo para interactuar con estos dos últimos paquetes: rPython y ggplot2.

El ejemplo va a consistir en, dado un vector con 83 valores, utilizar el método MADe para la detección y eliminación de valores extremos implementado en Python y representar el resultado en un histograma con el paquete ggplot2. El fichero datos-ejemplo- tiene los datos que necesitaremos. Os animo a que implementéis vosotros el código en Python.

Si no tenemos instalados en R los paquetes que necesitamos, ejecutaremos:

install.packages("rPython") 
install.packages("ggplot2")

Los paquetes en R se cargan de la siguiente forma:

library("rPython")
library("ggplot2")

El primer paso será indicar a R con qué fichero .py vamos a trabajar. Para ello ejecutaremos el comando:

python.load("statistical_formulas.py" )

donde el atributo es el nombre del fichero que contiene nuestra función (o funciones).

La función que hemos definido necesita de una sola variable con datos en la llamada. En este caso será el vector X:

python.call("remove_outliers_MADe_method", X)

donde el primer argumento es el nombre la función/método que tenemos en nuestro código y el segundo atributo es nuestro vector.

El resultado de la ejecución de esta llamada lo almacenaremos en la variable resultado.

Finalmente, sólo nos quedará invocar la función gplot() en ggplot2 para representar gráficamente un histograma:

qplot(resultado, geom="histogram")

Como habéis visto, el procedimiento es muy sencillo. Ahora, os animo a que implementéis vosotros mismos el algoritmo MADe para comparar el resultado.

Cómo evitar abrir más de una Activity desde un botón

  • ¿Harto de que se pueda pulsar un botón de tu aplicación repetidas veces antes de que se cree la nueva Activity?
  • ¿Harto de tratar de evitar este comportamiento deshabilitando el botón nada más ser pulsado, y que aun así se lancen Activity sin talento?
  • ¿Harto de consultar StackOverflow y la Internet entera para no encontrar una solución que funcione de verdad?

Nosotros también lo estábamos. Concretamente, habíamos estado experimentando este problema durante años. Ahora tenemos la solución.

Como nunca hemos sido unos expertos programadores, y teníamos muchas prisas por sacar mucho trabajo adelante, nos fiábamos del “método Google” para iniciar una nueva Activity:

Intent intent = new Intent(this, NuevaActivity.class);
this.startActivity(intent);

Y aun así… daba igual que la nueva, como la vieja Activity procesaran mucha información, o poca, que marcásemos la nueva Activity como singleTop, que invocásemos al setEnabled(false); del objeto View que llamaba al startActivity(). También hemos de decir que nuestros usuarios son expertos en pulsar varios botones al mismo tiempo, o que les tiemble el dedo y hagan varias pulsaciones muy rápidas sobre el mismo botón, o que debido a la lentitud del hardware chino se desesperen a la hora de completar una tarea y sigan pulsando el mismo botón hasta el infinito y más allá.
Abrir dos o más instancias de una Activity en nuestra aplicación era muy sencillo, hasta que se nos ocurrió convertir la variable de tipo Intent en un field de nuestra clase de tipo Activity padre. Y cada vez que queremos invocar al startActivity(intent);, lo hacemos sólo si el field intent es == null.
Hay que tener cuidado si la Activity padre es una pantalla principal desde la que se pueden iniciar distintas Activity, por que si todos los new Intent() los asociamos con el field que comentaba antes, al querer iniciar la segunda vez la Activity, como intent != null, la aplicación no haría nada. Es decisión del lector de esta entrada saber cuándo hacer que el field intent sea igual a null de nuevo. ¿Quizás en el onResume()? ¿O mejor en el onActivityResult()? ¿Qué tal crear una clase de tipo Activity con este truco y que todas las actividades de la aplicación hereden de esta clase?

A nosotros nos funciona a la perfección, ¿y a ti?

Cualquier mejora a este truco, queja, grito, etc. es más que bienvenida.

Google Translator Toolkit para aplicaciones Android

Supongamos que tienes una aplicación Android con cientos de líneas en el strings.xml (o en cualquier otro recurso) y quieres traducirla a un idioma del cual no tienes ni idea. Buscas a un nativo que te haga la traducción y le pasas tu archivo que tiene líneas con esta pinta:

<string name=”customer_has_debt”>¿Estás seguro de eliminar al cliente %1$s ? Este cliente tiene una deuda de %2$s y también se eliminará</string>

Tu traductor no sabe de Android, le parecen raros los “%1$s” y decide pulírselos. También se confunde y borra un “<“.

¿Quién se encarga de revisar que no se ha roto nada? ¿Y si pudiéramos ahorrarle trabajo al traductor y permitirle trabajar con un archivo “pre-traducido” (por google translate)? ¿Y añadir un glosario para traducir automáticamente términos técnicos del negocio?

Todo eso y algo más nos lo da Google dentro de su Translate Toolkit. Es algo que existe desde hace mucho tiempo pero a nosotros nos costó encontrarlo así que lo queríamos compartir.

Observer para compilar automáticamente cada vez que guardas

Los que hayan usado el ndk, me comprenderan. La cuestión es que cada vez que quieres hacer un cambio tienes que compilar la librería. A veces resulta muy pesado, ya que después de esto tienes que limpiar y construir tu proyecto Android que usa dicha librería. Un proceso la mar de ligero si tu proyecto es mínimamente grande.

Tras llevar un tiempo trabajando con esto pensé que sería interesante tener un observer que escuche y que compile el proyecto cada vez que guarde. Ya sólo me tendré que preocupar de hacer los pasos pertinentes en Eclipse para construir el apk con la librería recién compilada.

Para hacer esto elegí python, ya que es un lenguaje realmente potente y fácil de ejecutar desde la consola. Tras buscan un poco opté por usar WatchDog, que es una librería que observa cambios en un fichero. Solo hay que escuchar y cuando se realice la acción de grabar lanzar la compilación. Se ha programado para que escuche cambios en un directorio entero, puedes cambiar para limitar al fichero con el que estés trabajando.

Os dejo el código en github. Es muy sencillo de usar y muy potente.

La mejora más inmediata que se me ocurre es poder mostrar visualmente si la compilación ha ido bien o mal.

Comentarios? Sugerencias?

Charla de Ángel Medinilla en Walqa: el biopic

El pasado lunes día 12 de noviembre tuvimos el honor de recibir a Ángel Medinilla (@angel_m) en el parque tecnológico Walqa (aprovechando su décimo aniversario) para que diera una charla sobre Agile en la empresa. Para el que no lo conozca, Ángel es un coach y consultor agile que lleva ya un tiempo recorriéndose el mundo asesorando a empresas sobre agilismo y contando su experiencia al respecto.

Como no me gustan mucho las notas de prensa en las que se fusila todo lo que dice el conferenciante, voy a escribir acerca de qué reflexiones he inferido tras asistir a su charla. Lo cual nos lleva al siguiente disclaimer…

DISCLAIMER: los siguientes puntos no están firmados por el propio Medinilla, son solo reflexiones obtenidas por mi parte. Al igual que con los biopics (películas basadas en la vida de alguien famoso), cualquier parecido con la realidad puede no ser cierto 😀

  • Las empresas de hoy en día son hijas de las cadenas de montaje y nietas del ejército de Roma. Estamos trabajando en compañías herederas de las ideas de Taylor y Ford (muchas de ellas incluso tienen residuos de las primeras grandes empresas: los ejércitos) y con ello, arrastrando conceptos empresariales basados en paradigmas del pasado, que pueden funcionar para una cadena de montaje, pero no para compañías basadas en el conocimiento. Suele circular por internet una anécdota graciosa: “¿Por qué los reactores de los cohetes de la NASA tienen la anchura de dos culos de caballo?… Pues bien, todo se debe a que los reactores han de ser trasladados hasta Cabo Cañaveral por tren, el ancho de las vías del tren se tomó en función del tamaño de los coches, y el coche en función del tamaño de la carretera, que es un legado del imperio romano, el cual quiso que la carretera tuviese el tamaño de dos caballos, para así permitir la circulación de carros.” Basándonos en esta anécdota, se me ocurre un paralelismo igual de gracioso: ¿Por qué algunos desarrolladores de software van a trabajar con traje y fichan nada más entrar?
  • No hay que ser esclavos de los estándares. Principalmente porque los estándares deberían revisarse continuamente. Siguiendo la filosofía lean, deberíamos usar estándares para asegurarnos de que todos estamos haciendo lo mismo. Intentar algo más complejo que eso solo va a conseguir que tengamos un sistema anquilosado difícil de renovar.
  • Muchos managers son sargentos chusqueros y deberían ser entrenadores. Donde las empresas basadas en los paradigmas de Taylor y Ford necesitaban de un supervisor que controlara la productividad de sus trabajadores, las empresas del conocimiento de hoy en día necesitan de líderes que sepan motivar y potenciar las capacidades de un equipo. Lo que llamaríamos en inglés un enabler, alguien que pueda conseguir que su equipo dé lo mejor de sí mismo.
  • Mejor que intentar ser agile es entender por qué queremos ser agile. Al igual que en el ejemplo del cargo cult, el hecho de poner post-its en la oficina para indicar las tareas (al estilo de las oficinas con sala de relax con el guitar hero porque Google la tiene) no va a hacer que nuestra empresa mejore. Tenemos que entender qué motivaciones tiene agile para poder comprender por qué queremos usar agile (¡o incluso si realmente queremos usarlo!)
  • Agile no es un paracaídas ni la pluma de Dumbo. No nos engañemos: la mera implantación de Agile no va a conseguir que hagamos software de calidad, ni que ingresemos más dinero, o que nuestros competidores vayan a la ruina. Es simplemente una metodología de desarrollo de proyectos mucho más orientada al cambio y a la mejora continua. Podemos migrar una empresa a agile, pero esto no va a  otorgarnos capacidad de mejora, entrega o adaptación. Estas capacidades son los requisitos para el camino Agile, no las recompensas.
  • Tenemos que ser escépticos respecto a Agile. Las metodologías ágiles representan un camino, una serie de filosofías que pueden ser de utilidad para las empresas. Pero no tiene por qué ser buenas para TU empresa. Como decía Henrik Kniberg, Scrum es una herramienta, puedes usarla como te plazca. Cada empresa es un mundo y como tal, es muy difícil que Agile te dé una solución personalizada. Eso sí, si modificas Scrum a tu antojo, luego no vayas diciendo por ahí que Scrum no te ha funcionado 😀

Slides de la charla en http://www.slideshare.net/proyectalis/agilidad-empresarial

Cuenta atrás en Android

Si alguna vez nos hemos visto en la situación de tener que realizar una cuenta atrás en nuestra aplicación Android (muy útil para juegos, para indicar el tiempo restante) seguramente habremos hecho uso de la clase típica para estas cosas en Java: TimerTask (java.util.TimerTask)

private TimerTask getTimerTask() {
	return new TimerTask() {
		@Override
		public void run() {
			// Aquí hacemos todo
			} catch (Exception e) {
				e.printStackTrace();
				schedule(NOW);
			}
		}
	};
}

Deberíamos modificar bastante esa clase para que llevara una cuenta regresiva de los segundos que quedan, así como hacer un schedule cada segundo de la task.
En vez de esto, resulta mucho más elegante utilizar una clase que provee Android llamada CountDownTimer. Tan fácil como hacer lo siguiente:

timer = new CountDownTimer(secondsUntilFinished, 1000) {
	public void onTick(long millisUntilFinished) {
              // Do something every second
	}

	@Override
	public void onFinish() {
              // Do something when finished
	}
}.start();

El mítico restaurante italiano

La semana pasada nos tocó dar un curso de iniciación a Scrum en el ITA. Aunque llebamos casi 3 años trabajando con prácticas ágiles, es la primera vez que nos encargaban un curso de este tipo.

Learning by doing with lego

La mayor parte de los asistentes procedían del mundo del Software pero algunos no, por lo que me pregunté como podía mostrar ejemplos claros y simples que ilustrasen los valores de Scrum y otras aproximaciones ágiles. Es entonces cuando recordé este brillante post de Ron Jeffries, uno de los padres del XP y firmante original del manifiesto ágil. Me parece muy acertado porque huye de tecnicismos y humaniza la esencia que yo quería transmitir.

Me gustaría tambien compartir con vosotros mi traducción al castellano (disculpas si he cometido algún error). La adjunto al final de este post.

También aprovecho este post para darle las gracias a Teresa Oliver por dejarme sus legos para usarlos en el curso. Para los que no la conozcáis proyecto SKOK os aconsejo que lo sigáis de cerca. Un acierto seguro.

El mítico restaurante italiano

Kate se reunió con Dean en la cafetería de la calle principal donde él originalmente la había contratado. Disfrutaron del buen clima y charlaron sobre sus vidas. Pero Dan tenía una pregunta.

“Kate”, dijo Dan, “las cosas van bien. Los productos se venden, la gente de marketing es feliz, la calidad ha subido, los clientes están contentos. Sólo tengo una pregunta.”

“¿Qué aumento de sueldo me merezco?”, dijo Kate. “Está muy bien que lo preguntes.”

Dan se echó a reír. “No te preocupes por eso, vas a tener un muy buen regalo llegada la Navidad. No, mi pregunta es, ¿cómo puede estar funcionado lo que estás haciendo? Tan pronto tenemos una idea de producto, incluso concretada a medias, los desarrolladores se ponen a construirla y tienen una versión con la que podemos jugar. Y entonces empezáis a mejorarla a partir de ahí. ¿Cómo es posible que eso funcione? “

“¿Quieres decir técnicamente? Tenemos pruebas, refactorización, … “

“No,” dijo Dan. “Esa es tu competencia. Me refiero a cómo puede funcionar desde un punto de vista empresarial. ¿Cómo podemos hacer todo esto sin fijar los requisitos, la estimación de todo y asegurar que las personas hagan lo que dijeron que harían? Parece como si todo el mundo estuviese improvisando “.

“Bueno, se parece mucho a la improvisación”, dijo Kate. -Montones de preparación, práctica y refinamiento. Tal vez sería útil que te contara acerca de mi tío Guido y su restaurante italiano. “

“No pareces italiana”, dijo Dan.

“Es cierto. Estoy en protección de testigos, pero no se lo digas a nadie. En fin, mi tío Guido tenía un restaurante italiano y decidió que necesitaba un hermoso mural en la pared trasera para dar al lugar un toque de clase. Déjame que te cuente lo que pasó. “

“Guido y sus amigos hablaron sobre ello un poco mientras se bebían algunas botellas de su famoso Chianti Cuestionable. Se decidió que era una gran idea. Pensaron en lo que necesitaban y decidieron darle un aspecto toscano agradable, con tal vez una parra que mostrara que las Uvas Cuestionables fueron cultivadas en el viejo país, y probablemente una imagen de la tataratía Sofía, sentada en una mesa de picnic o quizás tendiendo la colada. Hicieron dibujos de sus ideas en servilletas de bar. Desafortunadamente, la mayor parte de estos dibujos se perdieron, porque el Chianti Cuestionable resulta ser un blanqueador muy bueno.

“Una vez recopiladas algunas ideas, y desaparecidos los dolores de cabeza en su mayoría, empezaron a hablar con los artistas locales y aprendieron mucho, mayormente malas noticias. Los artistas querían “libertad artística”, o decían que el trabajo podría requerir un mes y que necesitaban el restaurante cerrado durante ese período. Había todo tipo de problemas.

“La buena noticia era que esto ayudó a Guido a comprender sus necesidades. Necesitaba mantener el restaurante en marcha, y no quería un paño grande y feo colgando para ocultar la pintura, ya que había puertas en la pared, para los baños y la cocina. Al principio trató de encontrar a alguien que pintase todo el asunto durante un fin de semana, pero nadie se acercó a eso.

“Guido se quedó perplejo. No podía tener el lugar con un aspecto horrible, y no podía cerrar, pero realmente quería su mural. Finalmente conoció a una artista que tuvo una idea. “¿Qué pasa si dejamos que la gente vea cómo el mural se va creando”, preguntó a Guido. “Trabajaré temprano por la mañana hasta que se abra, y la gente puede venir todos los días y ver lo que está sucediendo. Ellos le pueden dar información, y usted me puede dar retroalimentación y así construiremos el mural que mejor se adapte a sus ideas y presupuesto. “

“Guido pensó un poco y decidió que si no había gases venenosos por la pintura, aquella podía ser una buena idea. Podía ver la cosa tomar forma e ir guiando el proceso. Pero estaba preocupado por el presupuesto. “¿Cómo podemos mantener los costos bajo control?”, se preguntó.

“La artista sugirió lo siguiente:” Vamos a establecer un plazo y el presupuesto total. Te mantendré informado de cuánto se va gastando, y por supuesto vamos a tener el cuadro en la pared a la vista. Cuando lleguemos a mitad de camino, el cuadro deberá tener una calidad suficiente alta, y tener suficientes elementos pictóricos, como para que podamos pararlo en cualquier momento. Tendrás más ideas, por supuesto, pero para entonces los dos tendremos un sentido de lo rápido que podemos progresar, y tu podrás elegir las cosas más valiosas que añadir o cambiar. Vas a tener un control total sobre cómo termina la imagen, y si lo deseas, podemos parar cuando o antes de se te acabe el dinero. “

“Guido no estaba totalmente convencido. Quería saber cómo podía estar seguro de que no se quedaría con una pared horriblemente fea. La artista le dijo que le garantizaba pintarlo de nuevo y parar en cualquier momento que quisiera, y dijo que iba a comenzar trabajando con algún pigmento temporal, como la tiza, por lo que podría borrar y cambiar las cosas fácilmente.

“Guido decidió seguir adelante.”

Dan pensó. “Casi me puedo imaginar aquel trabajo. Pero parece muy caótico. ¿Funcionó? “

Kate dijo: “Espera y verás. La historia continúa. Guido era un tipo de pensamiento serio, al igual que tú. Él había tomado un montón de notas sobre el mural y sus necesidades, y muchas de ellas no habían sido blanqueadas por el Chianti Cuestionable. Su primer pensamiento fue darle todas sus notas a la artista y que ella las pintara. De hecho, he visto algunas de esas notas y eran bastante buenas. Así es como yo recuerdo lo que escribió sobre la tataratía Sofía:

“Sofía era una gran belleza en su juventud. Se decía en nuestra familia que Sofía Loren tomó su nombre porque se parecía a nuestra Sofía. Nuestra Sofía tenía ojos oscuros oscuros, pelo negro azabache que fluía por debajo de los hombros. Ella tenía las curvas por las que los hombres lloran y se movía como una bailarina a pesar de su voluptuosa figura.”

“Tal vez seas italiana, después de todo”, dijo Dan.

“Silencio, estoy contando una historia, señor”, dijo Kate. “Guido había escrito más:

” El mural debe mostrar a Sofía en sus últimos años. Se había redondeado un poco, como solemos hacer los italianos, y de alguna manera parecía más baja. Se podía ver en su rostro el envejecimiento de la hermosa niña que había sido. Y en sus ojos se podía ver los recuerdos de los muchos hombres a los que había conquistado. Después se casó con Francesco, tuvo una larga vida feliz casada y muchos niños que adoraba.

En el mural se le muestra como la abuela Sofía, sigue siendo enérgica y hermosa, todavía gobierna la familia con suavidad pero con firmeza. Hay que dejar que la gente vea el gran patrimonio de la familia que llega hasta nosotros y debe sugerir que, así como Sofía creaba maravillosa comida para su familia, nosotros creamos comida exquisita para nuestros clientes.

La imagen también debe mostrar que Sofía era frugal, al igual que nuestros precios son bastante razonables dada la alta calidad de la comida que servimos. Y ella debería verse muy trabajadora, para demostrar que vamos a trabajar duro para nuestros clientes.

“Wow”, dijo Dan. “Pide mucho de una foto de una señora mayor.”

“Guido fue poeta de corazón”, dijo Kate. “Pero dime una cosa: si usted fuera un artista, podría dibujar una imagen de Sofía a los 55 años o así, y que se viese como en la memoria de Guido?”

Dan sólo tuvo que pensarlo un momento. “No. He entendido que ella era una señora encantadora, pero no tengo ni idea de cómo sería su cara. Oye, ¡espera! ¿Esto es una alegoría no es así? ¿Estás hablando conmigo acerca de las especificaciones escritas? “

Kate se echó a reír. “Me pillaste. Tenemos el mismo problema que la artista había tenido con la hermosa prosa de Guido: no le decía lo que tenía que hacer “.

“¿Qué hizo ella?”

Kate dijo: “En primer lugar, leyó todas las páginas de notas de Guido. Afortunadamente no hubo demasiadas, pero había un montón de cosas sobre las que el había tomado notas: “

La familia tenía un ratón mascota llamado Petra. El mural debe mostrar al ratón, pero sin verse como que el restaurante está infestado.

Además, ahora que lo pienso, una especie de sensación  de Jardín del Edén puede ser bueno, ya que nuestro restaurante es un pequeño paraíso. Y los postres son muy tentadores. Tal vez debería haber una serpiente para tentar a la gente. Tal vez una pitón.

No te olvides de las uvas Cuestionables de las cuales obtenemos nuestro famoso Chianti.

La familia tenía cabras y ovejas. Tal vez podría haber algunos cerros con animales que juegan.

Recuerdo que una vez un lobo o algo acabó con mi pequeña cabra favorita. ¿Debería haber un lobo?

Kate tomó un respiro. “La lista de Guido seguía y seguía.”

Dan dijo. “Espera. ¿Guido quería una pitón? ¿En un mural de restaurante? ¿De la Toscana? “

Kate dijo: “Resulta que Guido estaba muy flipado con la pitón. A la artista le costó un montón hacer que la olvidara. Y hablar es lo que hicieron.

“La artista se reunió con Guido después de leer todas sus notas. Guido comenzó diciendo que quería diseño del mural y su calendario detallado. Afortunadamente, ella tenía una idea mejor. “Las palabras que describen imágenes no funcionan muy bien, Guido. Yo sugiero dibujarte algunos bocetos de lo que yo entiendo. Vamos a trabajar con los bocetos durante un tiempo, y luego vamos a empezar a trabajar directamente en la pared donde tus clientes puedan ver el mural “.

Dan dijo: “¡Maldita sea, esto es una alegoría no es así? Tu educación jesuita está saliendo “.

“No, no, todo esto es verdad, lo juro”, dijo Kate, levantando los dedos cruzados. “Sin embargo. Tiene mucha relación con la forma en que trabajamos en tus productos “

Dan dijo: “OK, vamos a ver. Comienzas con cualquier material que tengan los de Marketing, y entonces te sientas y hablas con ellos. Y tan pronto como puedas, empiezas a mostrar piezas del producto, como los bocetos de la artista. “

“Sí, es cierto. Y, tan pronto como sea posible, tenemos las piezas del producto en las manos de los clientes, al igual que la artista puso las cosas en la pared en el restaurante tan pronto como fue posible “, dijo Kate.

Dan dijo: “¿No hubo problemas en el camino, al igual que con el aspecto de la tía Sofía y la sangrienta pitón?”

“La artista lo gestionó muy bien. Su primer paso sobre Sofía consistió en pedir fotos de ella a la edad que Guido tenía en mente. Naturalmente, había un montón de fotos en los álbumes familiares. Le hizo elegir sus favoritos y en un principio esbozó algunas muestras, posteriormente, hizo realmente algunas pequeñas entregas con tiza o algo así. En el momento en que Sofía estaba en la pared, ellos tenían una buena idea del aspecto que tendría “

Dan dijo: “¿Hicieron todo el resto de esa manera, con un montón de bocetos en primer lugar?”

“Afortunadamente, no”, dijo Kate. “Una cosa que ayudó fue que, aunque algunas de sus reuniones habían sido fuera del restaurante, enseguida tuvieron una reunión allí, debido a que la artista quería ver la instalación real. Dos cosas importantes salieron de ahí:

“En primer lugar, no pudo evitar darse cuenta de las dos puertas en la pared, que Guido no le había mencionado ni en las conversaciones ni en las notas. Y vio que una llevaba a los baños, y la otra llevaba a la cocina. Ella le preguntó si el mural debía incorporar las puertas, y si era así, si una debía parecer abierta y acogedora, mientras que la otra pareciese cerrada, para que la gente no tratase de entrar a la cocina. Guido estuvo de acuerdo, por supuesto.

“La artista esbozó un par de ideas … una con la puerta del baño pintada para parecerse a un sendero atractivo, y uno con la puerta de la cocina luciendo como una valla cerrada. También le mostró uno con las puertas de la cocina pintadas con el fin de ocultar el hecho de que eran puertas en absoluto. “

Dan dijo: “Has dicho dos cosas. ¿Qué más? “

“La artista descubrió que había mesas pegadas a la pared del mural, no para los clientes, sino para guardar los cacharros del restaurante, como los platos y la cubertería. En los bocetos que había hecho, había detalles de todo el camino hasta el suelo, pero esos detalles no serían visibles en absoluto. Así que estar en la situación real les había dado algunas ideas importantes, una de ellas Guido la había pensado, pero olvidó mencionarla, y la otra era nueva para ambos. “

Dan dijo: “OK, ¿cuál es la lección de todo esto,  jesuita descarada?”

“Ah, Watson, conoces mis métodos. Tratamos de reunirnos no sólo con las personas con ideas sino con los clientes reales de nuestro software. En el caso de Guido,  eran la misma persona, pero al poner a Guido en el restaurante con la artista, surgió una nueva percepción. Cuando nos reunimos, no sólo con marketing sino con nuestros clientes reales y potenciales, con la presencia de simplemente esbozos de ideas de producto, aparecen siempre nuevas y buenas ideas. “

“Está bien, qué más le pasó a tu imaginario tío Guido?”, Dijo Dan.

“¿Imaginario? ¿Imaginario? Por eso, me tienes que llevar a cenar a su restaurante. En fin, trabajaron con bocetos durante un poco más de tiempo, y luego la artista dijo que era hora de empezar a trabajar en la pared real. Guido era bastante reticente. Tenía miedo de que si algo realmente feo aparecía allí, pudieran perder clientes. La artista estaba de acuerdo, pero estaba pensando en la pitón.

“Así que le preguntó a Guido si prefería seguir mirando bocetos y luego cerrar el restaurante durante un tiempo mientras ella pintaba la pared real. Evidentemente Guido no quería cerrar, y entonces se dio cuenta de que no importa la cantidad de trabajo que hubiese en los bocetos, no tendría una idea de cómo la pared quedaba hasta que no estuviese terminada. “

“A menos que se sentase allí y la viese todo el tiempo”, dijo Dan.

“Sí. Y ninguno de los dos pensaba que eso tuviese mucho sentido, y de todos modos habrían utilizado todo su tiempo y flexibilidad de costes en los bosquejos. No habría mucha capacidad para cambiar, sólo la capacidad de fallar y volver a empezar. “

“Entonces, ¿qué hicieron?”, Dijo Dan.

Kate dijo: “Al igual que ella había sugerido. La artista empezó a llegar por la mañana y pintar con tiza el mural en la pared. Ella marcaba grandes áreas, a veces, pintaba zonas más en detalle. Creo que hizo a la tía Sofía y la Parra Cuestionable con más detalle desde el principio.

“Guido estaba preocupado al principio, pero a los clientes les encantó. Les preguntaban qué estaba pasando, y ofrecían comentarios. El restaurante entero se convirtió en una especie de pequeño pueblo donde la gente hablaba entre sí y con el personal y Guido sobre lo que estaba ocurriendo. Un montón de nueva gente comenzó a llegar con más frecuencia para ver qué estaba pasando con el mural. “

Dan dijo: “¿todo se pintó sin problemas en su lugar?”

“Ni de broma”, dijo Kate. “Había un montón de cambios, algunos que Guido vio, y algunos que los clientes vieron. En una ocasión, la artista dibujó la pitón, y la gente pidió sentarse lejos de ella. Supongo que era una serpiente pitón muy convincente. Guido cedió con la pitón en ese punto. “

“OK, así que en nuestra empresa, se pone el producto ante los clientes antes de que termine, y se deja que nos den su opinión sobre él”, dijo Dan.

“Sí, es cierto. Y lo construimos suficientemente ligero como para que cuando lleguemos a las buenas ideas, podamos introducirlas sin demasiados problemas. Ahí es donde nuestras pruebas y refactorización entran en juego “

Dan dijo: “¿Qué pasa con la pared? Cuando comenzó a usar la pintura real, ¿quedaban todavía cambios pendientes? “

“Por supuesto, un montón”, dijo Kate. “Muchos vinieron de los clientes, algunos de Guido, algunos de la propia artista. En el arte, simplemente se pinta sobre los trozos malos o se borra y se vuelve a empezar en alguna zona. En el software, refactorizamos más a menudo, y a veces se reemplazan partes enteras. Preferimos refactorizar, porque es menos costoso, pero a veces simplemente nos equivocamos. “

Dan dijo: “¿Pero no es un desperdicio? ¡Si hubieras planeado mejor, no tendrías que rehacer todo ese trabajo! “

Kate sonrió. “Buen intento. Pero la cuestión no es en la planificación. Ningún número de palabras hubiera conseguido definir el aspecto deseado en la cara de Sofía. Guido tuvo que verlo en la pared. De hecho, hizo que la artista lo cambiase varias veces hasta que captó su visión de esta mujer mayor santa, pero aún sexy. La cosa fue mejorando poco a poco, y volvieron a bocetos un par de veces, pero las cosas en la pared tienen un aspecto diferente al de los bocetos.

“Creo que Guido hizo algunas concesiones importantes para que las cosas saliesen bien. La artista insistió en que se detuvieran a tiempo y en presupuesto. Por aquel momento, Guido estaba sumergido en la creatividad y podría haber estado eternamente refinando a Sofía. La artista lo trajo de vuelta a la tierra recordándole la planificación acordada. En un punto, Guido renunció a alguno de los animales del campo para centrarse un poco más en Sofía. “

Dan dijo: “Eso es lo que hace Susan, ¿no? Recuerdo que una vez me informó de que había retrasado mi funcionalidad favorita para robustecer otra funcionalidad. Tuvo serias dificultades para convencerme, pero fue bastante insistente. Al final, me di cuenta que le había dado la autoridad y la dejé ir hacia adelante. Resulta que todo fue bien, y ella puso mi funcionalidad en una actualización posterior. “

“Exactamente”, dijo Kate. “Construir el mejor producto posible en el tiempo y el dinero que tenemos no es fácil. A veces tenemos que tomar decisiones difíciles, y a veces hasta se hacen mal. Nadie es perfecto. Lo que nuestro enfoque hace es mantener todo visible: el producto a medida que crece, el presupuesto que se gasta, el tiempo conforme se agota. Y mantenemos el cuadro en la pared en todo momento, así que cuando es el momento para la gran fiesta, la imagen está lista.

“Y el mural estuvo listo para la gran fiesta de Guido también. Su hija Amelia decidió casarse, de repente según me contaron, y Guido organizó la fiesta más grande imaginable, en el restaurante. Fue pocos días después de la fecha límite original, y por supuesto fueron un montón de personas que nunca habían visto el restaurante de Guido. Se lo pasaron en grande y a todo el mundo le fascinó el mural. Por lo que yo sé, nadie preguntó por qué no había una serpiente pitón en la imagen. “

Dan pensó un momento. “Creo que lo he entendido. Tu trabajas lo más cerca posible del producto real, evolucionando tu comprensión y el producto, al mismo tiempo. Y tomas decisiones sobre la marcha, haciendo lo mejor que puedas, y asegurándote de que está siempre listo para la próxima fiesta – quiero decir listo para enviar. Suena fácil. “

Kate sonrió. “Bastante cerca. Una cosa: no es fácil. Uno tiene que estar dispuesto a trabajar en público, con todo lo bueno y todo lo malo a la vista. Uno tiene que estar dispuesto a tomar decisiones, y a redefinirlas, y uno tiene que trabajar con el fin de hacer el cambio fácil.  No es que realmente sea más fácil que las formas más antiguas. Simplemente,  es mucho mejor “.

“Es mucho mejor”, dijo Dan. “Cuando hablamos por primera vez, pensé que tendría que cerrar la empresa. Ahora tenemos un flujo constante de nuevos productos y un flujo constante de clientes más satisfechos. Gracias por explicarme cómo lo haces, adornándomelo con la historia mítica del restaurante de Guido. “

“¿Mítica?”, Dijo Kate. “Espera a degustar la Piccata de ternera de Guido en la cena que me vas a pagar. No te parecerá mítica entonces. ¿Y los baños? Son por esa puerta que se parece a un sendero cubierto junto a la parte privada del jardín. “

Antiguas entradas