Errores Comunes en la Comunicación con el Cliente: Cómo no Frustrar a tu Cliente

Cuando alguien solicita un proyecto, debemos asumir que es muy importante y que se preocupan profundamente por el producto en el que trabajará. Por lo tanto, es seguro suponer que un cliente está obligado a construir una gran expectativa sobre el producto final y, por eso puede llegar a ser emocional cuando se trata de la entrega.
A lo largo del proyecto, un cliente puede sentirse muy emocionado por una función entregada y amarte, y al día siguiente puede descubrir que algo no funciona y el afecto desaparecerá. La mayoría de las veces, es solo una cuestión de comunicación con el cliente que salió mal.
Aunque no hay recetas para el éxito cuando se trata de desarrollo de software remoto, creo que hay algunas cosas que se deben evitar para mantener una relación productiva y saludable con clientes que pusieron su confianza en tus manos.

No Falles en la Comunicación Básica con los Clientes

Imagínese la comunicación con los clientes como lo haría con la comunicación diaria con compañeros de trabajo, amigos o cualquier otra persona a quien extienda su cortesía.
Si un viejo amigo visita su casa y tú aceptas disfrutar de un manjar local “en su hogar” al mediodía, unas semanas más tarde, ¿tan sólo te presentarías allí? ¿Podrían mantenerse en contacto mientras tanto, llamar para confirmar unos días antes? ¿O tal vez asumirías que está demasiado ocupado y no querrías molestarlo sin una buena razón? ¿Esperarías que te avise cuando lleguen?
No es probable que sigas chateando todos los días a menos que tenga un montón de información, pero mantendrás algún tipo de comunicación, por cortesía y practicidad: no quieres que la otra persona piense que te olvidaste de ellos, pero definitivamente no quieres conducir a mitad de camino por la ciudad sin una buena razón.

En algún momento, probablemente hayas experimentado situaciones similares en tu comunicación profesional también, incluso con socios y compañeros de trabajo de larga data. Algunos proyectos se ejecutan con la mínima comunicación, al igual que decir “lo habitual, al mediodía, nos vemos allí” para confirmar un almuerzo ligero. Incluso si surge algo, la otra parte seguramente le informará y aceptará reprogramarlo.
Sin embargo, las cosas no son tan simples o lineales en el mundo del desarrollo de software.
Si comienzas a trabajar en un proyecto, especialmente cuando estás tratando con un nuevo cliente, si nunca escuchan de ti, comenzarán a tener dudas sobre tu trabajo y compromiso. Incluso si aparece con un producto impecable después de unas semanas, los clientes pueden tener una percepción menos que ideal de usted.
Aunque a veces se sienta incómodo, no hace daño hablar con el cliente, incluso si no tienes nada fuera de lo común para informar. ¿Tienes alguna duda sobre un pequeño punto de la historia de un usuario? Si crees que es importante, házselo saber. ¿Estás llegando un poco tarde y no estás seguro si podrás cumplir esa fecha estimada en la que estuviste de acuerdo? ¡Llama al cliente lo antes posible! Es mejor que lo escuchen de inmediato.
¿No tienes dudas y el proyecto se ajusta a la perfección, pero el cliente no habla mucho? ¿Por qué no simplemente enviar un correo electrónico describiendo tu progreso cada pocos días? No hará ningún daño porque los correos electrónicos no serán una molestia para nadie, además documentarán tu progreso y mantendrán una comunicación regular con el cliente.

La Comunicación Defectuosa del Cliente Fomenta las Expectativas Poco Realistas

Al principio mencioné que el cliente seguramente tendrá muchas expectativas sobre el proyecto ¿verdad? Las tendrás. punto.
El cliente ya espera mucho del producto. Si no sale como lo imaginaron, los clientes inevitablemente se sentirán frustrados. Entonces, ¿por qué alguien podría prometer más de lo que puede ofrecer, creando así expectativas aún más irreales?
Aquí hay un paralelo rápido: Compraste una tableta en línea y nos prometieron una entrega de 10 días. El octavo día, la tienda le informa que hay un problema y demora la entrega por una semana. Para compensar los inconvenientes, las promesas del minorista le otorgan un crédito de $ 75 en la tienda.
Probablemente no necesites esa tableta en los próximos días, ¡así que crees que es un buen negocio! Ahora puedes disfrutar de la tableta, además de usar el crédito de la tienda para comprar algo lindo a tus hijos. Pero la tienda llama al día siguiente, diciendo que todo se solucionó de la noche a la mañana.
Obtendrás la tableta al día siguiente. Sin extras, sin crédito en la tienda. ¡Ahora estás frustrado!
“¿Qué? ¡Solo ayer me dijiste que obtendría un mejor trato! ¡No es justo! Ya se lo dije a los niños …”
Rebobina un par de días y todo lo que esperabas era la tableta de todos modos. Si nadie te hubiera prometido un mejor trato, habrías estado satisfecho con tu tableta cuando llegó al día siguiente. Pero ahora, sientes que te estás perdiendo de algo más por una buena razón, aparte de la decisión de la tienda de hacerte saber.
Ilustración de comunicación con el cliente: las habilidades de comunicación profesional evitan las expectativas poco realistas
¿Cómo pueden los desarrolladores, especialmente los profesionales independientes, evitar situaciones similares en su comunicación con los clientes?
Al no enloquecer y decir todo lo que viene a su mente en primer lugar. Las sugerencias no están prohibidas; en realidad, son muy bienvenidos si crees que una característica solicitada en particular no es una muy buena opción para resolver el problema en cuestión. Pero la clave es: “Piensa primero”.
  • Escucha al cliente.
  • Analiza su problema.
  • Analiza la solución propuesta.
  • Asegúrate de que esté dentro del presupuesto/cronograma.
  • Finalmente, sigue y presenta tu sugerencia.
Esta es la razón por la que las habilidades de comunicación con los clientes pueden ser complicadas, ya que fallar en solo uno de los primeros cuatro pasos significa que podrías terminar perdiendo el tiempo y, lo que es peor, el tiempo de tu cliente.

No Asumas que Sabes lo que el Cliente Necesita

Parafraseando a Mary Schmich, Señoras y señores de la clase del ‘17: Escuchen al cliente. Si pudiera ofrecerle solo un consejo para el futuro, escuchar al cliente sería eso.
Si te llamaron para un proyecto es porque alguien necesita algo. ¿Y quién sabría mejor sobre esa necesidad que tu cliente? Puede parecer obvio, pero a veces, en el mundo real, la gente lo olvida.
Dejame darte un ejemplo. Un minorista solicita un “sistema de software” para su negocio. Tan pronto como lo veas, llegas a la conclusión de que lo que quieren es registrar todos los productos disponibles, registrar cada compra realizada, generar recibos para los clientes e informar sobre lo que se vendió periódicamente y sobre qué artículos se están acabando. valores.
Por lo tanto en su primera reunión, deseas mostrar que es eficiente y presentarles lo que ha preparado, las características propuestas, un diseño básico para ir con la identidad visual de la tienda y todo. Pero luego el desconcertado cliente dice que, en realidad, lo que necesita es un algoritmo para calcular cómo mostrar mejor los productos en los estantes, con el objetivo de aumentar los ingresos de marcas y productos específicos.
El error aquí fue simplemente no identificar qué problema se suponía que debías resolver. Por supuesto en este caso, ya que era muy temprano en el proyecto, habría mucho tiempo para hacerlo bien, pero a veces, este tipo de error ocurre más adelante. Incluso aunque no sea tan drástico como el ejemplo anterior, puede dañar el proyecto y/o su relación con el cliente.
Mi sugerencia es la siguiente: habla con sus futuros usuarios, mucho si es posible, y consulte a varias partes interesadas en el proyecto. Ellos son los que tienen una buena visión general de la situación y saben lo que necesitan. Trata de descubrir qué hacen actualmente, en cada paso del camino, y explica cómo el software sería útil. Me gusta decir que, cuando intento entender lo que desea un cliente, mi objetivo es casi poder realizar su trabajo yo mismo. Si te acercas a este punto entonces realmente has descubierto cuáles son sus necesidades.

No se Entiende lo que el Cliente está Pidiendo

No es raro recibir algún tipo de documentación sobre el problema en cuestión. Algunas veces es solo una descripción de alto nivel, mientras que otras veces es un documento detallado con casos de uso y reglas comerciales. En cualquier caso, no importa cuán claros sean los registros, lo único que no se puede hacer es simplemente asumir que todo lo escrito allí es la verdad absoluta.
¿¿¿Qué???
Exactamente. Primero, algo puede significar una cosa para alguien, en un cierto contexto, y una cosa completamente diferente para las personas que no pertenecen a esa realidad. Y si hay algo que tú y el cliente no tienen en común, ¡es el contexto!
Ejemplo de comunicación con el cliente: falta de comprensión de la tarea en cuestión
Segundo, no todos son escritores muy hábiles; intentan decir A pero terminan describiendo a B.
Entonces, después de leer todo lo que te han enviado, ¿cómo estarás seguro de que lo que lees es realmente lo que querían decir? Bueno, podrás digerir todo, tomar notas, analizar todo y … llamar a una reunión. (¿Lo ves? ¡Todo se trata de comunicación!) En la reunión, hablarás sobre el problema y describirás lo que has entendido con tus propias palabras. En esta etapa, probablemente podrá identificar cualquier malentendido.
“Oh, pero en mi caso, no recibí ningún documento. Simplemente me senté con el cliente y me explicaron todo mientras tomaba algunas notas”.
Bueno, todavía no hay garantía de que hayas entendido lo que significan y mi sugerencia sigue en pie: tómate un tiempo con tus notas, piensa en todo el problema, organiza todo, preferiblemente en algún tipo de línea de tiempo de eventos, y luego llama / vuelve a reunirte con el cliente para presentar lo que has entendido. Puede sonar repetitivo para ti, pero a veces incluso el cliente no tiene una visión completa de todos los procesos involucrados para realizar una tarea específica y verás cuán complejo tendrá que ser el software.
Al final, debes estar seguro de que no hay ambigüedad ni malentendidos.

Porqué no Debes Entregar Todo lo que el Cliente Pide sin Pensar

Bien, ahora que sabes que debes escuchar al cliente y confirmar lo que has entendido, puedes seguir adelante y hacer todo lo que te pidieron, ¿no?
¡Incorrecto!
Ahora es el momento en que finalmente puedes usar toda la experiencia que tienes y preguntarte: ¿Es lo que el cliente te pidió que resolvieras? ¿Es lo que te preguntaron realmente lo que necesitan?
Te sorprendería ver cuántas veces la respuesta es “no”.
Antes de solo entregar lo que el cliente solicitó, necesitamos analizar el problema y, si no estás de acuerdo con lo que el empleador propuso, entonces es tu trabajo y responsabilidad profesional dejar esto en claro. Por supuesto, deberías explicar por qué crees que su propuesta no es buena y cuál será tu enfoque alternativo para abordar estas deficiencias. Una vez más, la comunicación es la clave.
Si tú y el cliente son razonables, entonces procede con tu solución o ten una sesión de lluvia de ideas para encontrar una mejor (en caso de que tu idea no sea aceptable para el cliente por algún motivo).

Prototipo — No Escribas una Gran Cantidad de Documentación

Ya dije que tú y tu cliente generalmente no tienen la misma perspectiva, ¿verdad? Por lo tanto, así como afecta tu comprensión de su documentación, afectará su comprensión de lo que tú entregarás por escrito. Es una cuestión de contexto.
Por lo tanto, estoy de acuerdo en que de alguna manera (en un nivel superior o inferior), tenemos que documentar lo que estamos a punto de desarrollar. Pero entregar varias páginas de texto sin elementos visuales no te servirá de mucho. El cliente se aburrirá de leerlo, dejará de prestarle atención y probablemente no podrá entender lo que quiere decir con esas complejas reglas comerciales, o interpretarán algo completamente diferente de lo que había imaginado.
Ten en cuenta que estos malentendidos pueden ser aún peores si el cliente no tiene formación técnica.
Ilustración de comunicación con el cliente: importancia de documentar la comunicación con los clientes
Todos estos factores pueden dar como resultado el mismo resultado problemático: los clientes se quejarán cuando entregue el producto porque es probable que no sea lo que tenían en mente.
Esto es lo que sugiero: Siempre prototipo, incluso si es solo un boceto para dibujar cuál es tu plan. Y cualquiera que sea la definición que tenga que hacer, comienza desde allí. Haz referencias y trate de mantenerlo simple.

Deja de Perder el Tiempo Intentando Convencer al Cliente de que Tienes la Razón

Casi puedo estar seguro de que cada desarrollador ha pasado por la siguiente situación: al comienzo del proyecto, el cliente dice “Necesito que el color de fondo del software sea amarillo. Ya ha sido acordado por la junta”. Luego, cuando se entrega el software, dicen: “Ah, pero el color de fondo no puede ser amarillo. ¡Te dije que tenía que ser verde!”. Ahora, ¿cómo debes lidiar con esto?
De hecho de nada servirá, en cualquier caso, insistir en que tenías razón y estaban equivocados. En todo caso, solo les dará a ti y al cliente un momento difícil.
Siempre es bueno tener un buen registro de comunicación con el cliente, solo para asegurarse de estar en la misma página y dejar un rastro escrito. La mayoría de las veces, si es algo simple, puede enviar un correo electrónico al cliente diciendo: “Como acordamos en esa reunión, el fondo del sistema será amarillo”. Y si, en el futuro, el cliente cambia su tenga en cuenta que puede argumentar que lo hizo por esa reunión mencionada en el correo electrónico, pero si realmente necesita hacerse esa modificación, puedes ejecutarla, por un extra de x horas (y en ocasiones, x dólares extra).
Pero si no hay nada que demuestre que tú tenías razón, entonces probablemente tengas que tomar una decisión (además de aprender una lección): ¿El cambio es tan grande que requerirá un cambio en la arquitectura actual o afectará otras características? De lo contrario, probablemente sea mejor seguir adelante, hacerlo y tener al cliente a tu lado (pero con los ojos bien abiertos para que no vuelva a suceder). Si lo hace, una conversación con el cliente será la mejor solución; no uno que se centre en “cómo estaba en lo cierto”, sino en “cómo podemos solucionar el problema actual”.
En cualquier caso, la mejor manera de evitar tener que hacer grandes modificaciones es entregar nuevas breves características en cortos períodos de tiempo. Por lo tanto, si algo tiene que cambiarse, probablemente no será una transformación importante de lo que ya existe.

Aprender a Cuándo Comprometerte con los Plazos de Entrega

Por último, pero no menos importante, uno de los mayores errores que puedes cometer es darle a tu cliente una fecha límite para que termine el proyecto. ¡Y te suplicarán que cometas ese error!
Por supuesto, como cliente, quieres saber cuándo podrás usar todas esas características interesantes que has estado discutiendo en las últimas semanas (¿meses?). Pero dado que un proyecto no es un producto definido, pueden pasar muchas cosas desde que comienza el desarrollo hasta que el software está listo para usar.
En primer lugar, no se puede predecir lo impredecible. Es muy probable que tengas que lidiar con algo que no estabas esperando. Podría ser una licencia que el cliente prometió que no se compró a tiempo, o algún otro software interno que necesites usar, pero que no fue lanzado cuando debería haber sido, o el entorno fue diferente al acordado al principio, o el cliente cambió de opinión sobre unas (pocas) características y tuvo que volver a hacer algunas cosas.
Nada de eso es realmente culpa de un desarrollador y puede afectar profundamente el plazo del proyecto. Pero si tú, dispuesto a complacer al cliente, le prometiste que entregarías todo para una fecha determinada y terminarías no pudiendo por la razón que sea, una cosa que puedo garantizar es que el cliente estará al menos un poco frustrado. Si eres un profesional independiente, debes administrar su tiempo de manera eficiente, como lo explica el artículo del Blog de Desarrollo de Toptal. No olvides que la gestión de relaciones con el cliente también es tu trabajo.
Por lo tanto, hazte a tí y a quien depende del proyecto un favor, y al menos bríndales una estimación de cuánto tiempo llevará desarrollarlo todo, pero siempre deja en claro que sólo es una estimación y no una fecha límite.
Además, sugiero fuertemente (especialmente si ya has dado una estimación) que siempre le digas al cliente cuando algo tardará más de lo esperado para que puedan actuar para ayudarte.
Fuente:
BY ANDREZA CRISTINA DA SILVA - FREELANCE SOFTWARE ENGINEER @ TOPTAL (TRANSLATED BY YESICA DANDERFER)

Diseño Colaborativo: Una Guía Para El Diseño Exitoso De Productos Empresariales

Probablemente hayas oído hablar del desarrollo de software Agile, la gestión de procesos de Kanban y Lean UX. El diseño colaborativo es un enfoque filosófico y táctico diferente para el diseño de productos empresariales.
El diseño colaborativo es el proceso de diseño en un entorno participativo, cautivador y realista con todas las manos o confianza en el cerebro. NO está diseñando en el vacío; en cambio, como su nombre lo indica, el diseño colaborativo coloca al diseñador en el centro de los diversos equipos y departamentos para trabajar con todos a fin de crear un producto cohesivo. De esta manera, nadie queda afuera y el producto se puede construir con todos los interesados involucrados.
Cada organización empresarial es diferente, y agrupar a las partes interesadas en torno a cualquier idea o tarea puede parecer como pastorear gatos. En esta guía, repasaremos consejos y trucos para trabajar con los principales actores, no solo para obtener su opinión, sino también para incorporarlos con este nuevo enfoque centrado en el diseño.
![colaboración empresarial] (https://uploads.toptal.io/blog/image/125053/toptal-blog-image-1514836432132-062b9a075d6f3eee95274d0d83903f76.jpg)

Conoce a los jugadores

Los diseñadores son geniales en muchas cosas, pero su rol comienza con la resolución de problemas. Eso requiere saber quiénes son los expertos y trabajar con ellos. Cada miembro del equipo de desarrollo de productos tiene sus propias necesidades y responsabilidades, por lo que conocerlos es tan importante como completar la tarea asignada.
Así que sin más preámbulos, conozcamos al equipo:
  • Los gerentes de producto definen el alcance, los requisitos y los ciclos de iteración de desarrollo para productos y características; a menudo son los guardianes de las características antes de un sí / no final y se practican para comunicarse con toda la organización, incluidos los ejecutivos.
  • Ingenieros crean el producto, por lo que entienden las capacidades y limitaciones técnicas. Esto los convierte en un recurso crítico para determinar las principales inquietudes, incluidos los plazos de desarrollo, las tecnologías a usar, el alcance y, a menudo, la viabilidad del diseño (si nuestros conceptos son incluso posibles dadas las limitaciones de tecnología y tiempo).
  • Los arquitectos de bases de datos y sistemas saben cómo se integran los datos y tienen una comprensión profunda de lo que se requiere para mantener el rendimiento mientras continúan construyendo sobre el producto / plataforma existente.
  • Los expertos internos en la materia (PYME) están íntimamente familiarizados con los procesos comerciales, los casos de uso, la historia y la política, así como con las expectativas generales de la administración, los clientes y los usuarios.
  • Ventas se centra en presentar el producto a posibles clientes. Esto hace que las ventas sean el primer punto de contacto, por lo que su comprensión del producto es fundamental para cerrar (y, a menudo, crear) clientes potenciales.
  • Entrenadores (o en SaaS, agentes de éxito del cliente) tienen exposición directa al equipo de ventas y usuarios nuevos o de prueba, y pueden aportar volúmenes de información útil sobre cómo el producto está funcionando in vitro y más allá.
Cuando todas las partes que trabajan en el producto participan en el proceso de diseño (uno de los principios fundamentales de la Metodología ágil, el producto resultante tiene una posibilidad significativamente mayor de alcanzar el éxito, no porque los diseñadores trabajen con las partes interesadas, sino porque las partes interesadas, en la mayoría de las ocasiones, entienden las necesidades específicas de los usuarios y las empresas de una manera que nosotros no lo hacemos. Trabajar en colaboración siempre parece ser la mejor opción, pero ¿cómo lo hacemos?

Cómo colaborar con los interesados

Administradores de productos, guardianes del portal y del tiempo del producto

Los gerentes de productos a menudo tienen un vínculo personal con el producto y están a la altura de las expectativas dentro de la empresa. También tienen que responder a los usuarios o clientes de sus productos cuando hay problemas, promesas incumplidas o solicitudes de una nueva funcionalidad.
Valoran mucho la comunicación simple y necesitan mantenerse actualizados sobre el progreso, los problemas y cualquier cambio. Les gusta ver borradores primero y con frecuencia, y debido a que pueden trabajar en varias escalas (varios niveles desde el desarrollo directo del producto hasta prácticas con cambios menores), sus interacciones con ellos pueden variar mucho.
Debido a que los PM pasan mucho tiempo comunicándose con las diversas partes interesadas (interna y externamente), es importante mantenerlos informados sin esperar que consulten contigo. Establezca controles regulares con sus PM para presentar borradores iterativos, escuche sus comentarios y siempre termine con una lista de elementos de acción para la próxima reunión.
gerente de producto y colaboraciones de diseñador
No tomará mucho tiempo aprender cuáles son sus objetivos para la funcionalidad del producto. Los PM saben que los diseñadores resuelven problemas, por lo que los diseñadores deben entregar datos y análisis para demostrar su razonamiento. Si tienes razón o no, no importa. ¡Demuestra que la meta es construir el mejor producto y ganará la confianza de un PM!

Ingeniería: Responsable de darle vida a los diseños

Los ingenieros (también llamados desarrolladores) son las personas más cercanas al producto; lo construyen! Esto les da una ventaja porque pueden experimentar directamente y probar componentes individuales del producto en acción. Esto es genial porque, sin lugar a dudas, encontrarán las debilidades en cualquier diseño, a veces antes de construir cualquier cosa, lo que es doblemente grandioso porque es una gran ventaja en muchos niveles encontrar las fallas antes de que se codifique el software.
La mejor manera de ganarse la confianza de un grupo de ingeniería es producir especificaciones completas y completas del producto o involucrarlas desde el principio … o ambas.
Cuando los desarrolladores son considerados verdaderos “actores”, están más que dispuestos a discutir casos de uso, escenarios, desafíos técnicos y las opciones para superarlos. Es fácil olvidar que los ingenieros son verdaderos arquitectos de productos; tienen un gran interés en resolver problemas con el diseñador, especialmente cuando el desafío es difícil o podría tratarse de otra manera.
proceso de diseño colaborativo de desarrollador y diseñador

Arquitectos de bases de datos y sistemas, guardianes de estructuras de datos

Los arquitectos de bases de datos y sistemas saben cómo funciona el producto detrás de escena. Saben todo sobre cómo se almacenan y estructuran los datos, qué se puede integrar y cómo todos los sistemas se comunican entre sí. Tienden a preocuparse menos por cómo funciona el producto para los usuarios que por la forma en que interactúa con varios sistemas (que es de lo que en última instancia son responsables).
Pueden ser especialmente difíciles para los diseñadores centrados en el usuario. Es importante recordar que incluso si un arquitecto de base de datos/sistema nunca interactúa con los usuarios finales, su enfoque siempre es beneficiar a esos usuarios, ya sea a través de la confiabilidad, velocidad o simplicidad del producto.
Su conocimiento de cómo funcionan las estructuras de datos -y las ramificaciones de cualquier cambio en la funcionalidad del producto- son demasiado fáciles de detectar sin su aporte experto. Es importante invitar e incluir arquitectos de sistemas en reuniones y discusiones sobre cambios de productos, incluso si su posición no parece relacionarse directamente. Una forma de colaborar con un arquitecto de sistemas es crear una lista de verificación con las siguientes preguntas:
  • ¿La característica X afecta la estructura de datos actual?
  • ¿Hay algún trabajo adicional de diseño/desarrollo considerando la arquitectura actual?
  • ¿El diseño Y entra en conflicto con cualquier entrada / salida de usuario existente?
  • ¿Hay algún servicio externo afectado por la característica X?
Esta simple lista lo orientará en la dirección correcta, incluso sin una comprensión clara de cómo funcionan las estructuras de datos monolíticas preexistentes (y posiblemente). Cualquier cosa marcada es un área que debe investigarse con una simple discusión.
diseño colaborativo con arquitectos de sistemas

Expertos en el tema y analistas de negocios, los asistentes de la información

Los expertos en la materia son nombrados acertadamente; son expertos en el tema y pueden ser una mina de oro de información única y valiosa. A menudo, han obtenido títulos especializados en el campo, o han pasado la mayor parte de sus vidas trabajando en su industria. Tienen experiencia práctica sobre cómo se supone que debe operar el negocio, y recuerdan la larga y dolorosa historia y política que los condujo a todos a donde están hoy. Un analista de negocios conoce los pormenores de cómo opera la organización y con frecuencia cumple la misma función que una PYME si los datos están disponibles, pero no hay un experto interno.
Comprométase con las PYMES para conocer cómo la administración percibe el proyecto para asegurarse de que se cumplan las expectativas internas y de que no se encuentre en un territorio peligroso. Invite a los analistas a las sesiones de diseño, indicándoles con anticipación que son los expertos y pidiéndoles que compartan sus conocimientos sobre fallas históricas, conflictos políticos y otros problemas que pueden ser críticos para una publicación de producto exitosa.
expertos en la materia y analistas de negocios en diseño colaborativo

Administradores de éxito de clientes, punto de contacto de un nuevo cliente

Cuando las ventas terminan por completar a los nuevos clientes, los capacitadores o, para las empresas de SaaS, los gerentes de éxito de los clientes (CSM), se acercan para enseñarles a los nuevos usuarios cómo usar realmente el producto. Por lo tanto, huelga decir que los entrenadores pasan mucho tiempo hablando con usuarios novatos. Un CSM tiene una perspectiva única porque interactúan con clientes que a menudo no participaron en la decisión de compra de su empresa.
Con esta perspectiva única, los entrenadores/CSM pueden proporcionar información valiosa para las decisiones de diseño, tanto para la incorporación de los clientes como para el nuevo comportamiento del usuario. Muchas organizaciones empresariales rastrean y monitorean cómo sus nuevos clientes utilizan diversos productos y registran todo, desde llamadas hasta quejas, pero los entrenadores tienen una idea de con qué realmente luchan los clientes.
Incluye un entrenador superior en todas las principales reuniones de diseño y pregunte sobre cualquier decisión con ellos. Haz preguntas como “¿Cuáles son las tres quejas más importantes de los clientes?” y, “¿Los clientes nuevos están satisfechos en promedio con el producto?” y, “¿Qué cambios crees que proporcionarán el mayor impacto positivo para ti y tu equipo?” De esta manera, todos aprendemos cuál es el camino feliz; los entrenadores son nuestros ojos y oídos para todas las formas en que los clientes realmente usan el producto.
gerentes de éxito de clientes y colaboración empresarial

Ventas, el primer contacto del producto con los clientes

Las ventas y el diseño a menudo están en desacuerdo. Algunas organizaciones son impulsadas por las ventas, mientras que otras no, pero no importa qué, hay una clara diferencia en los objetivos: el equipo de ventas quiere aumentar las ventas, mientras que el diseño quiere mejorar la experiencia del usuario. No siempre se alinean.
Ese no tiene que ser el caso. La mayoría de los vendedores tienen quejas muy razonables: tienen poco o ningún control sobre las decisiones del producto, se les pide que contraigan compromisos que realmente no pueden prometer y se sienten impulsados a alcanzar objetivos de ingresos específicos a pesar de todo. ¡No es de extrañar que los equipos de ventas y productos hayan calentado argumentos regularmente!
Sin embargo, al igual que los entrenadores, la organización de ventas tiene una perspectiva única sobre las necesidades de los clientes, y, a menudo, esa perspectiva es la diferencia entre hacer una pequeña venta y traer una ballena. Comprenda las diferentes áreas con las que lucha el equipo de ventas. Trata de escuchar cualquier tipo de llamada y aprende cómo se comunican esos clientes potenciales.
Esto abrirá la conversación con las ventas. No se trata solo de que se escuchen sus necesidades; se trata de mejorar la experiencia para los usuarios potenciales en cada etapa, desde la primera comunicación hasta después de la incorporación. Averigüe qué es lo que los vendedores escuchan más de los prospectos, qué desafíos tienen al finalizar el trato y cuáles son las mayores preocupaciones una vez que se cierra.
Colaboración entre el vendedor y el diseñador

El diseño en Enterprise no tiene que ser una pesadilla

Como diseñador, todas estas piezas móviles pueden ser difíciles de gestionar, especialmente cuando no se lo considera un “gerente” en el sentido oficial del término. Como participante clave en la comunicación entre equipos, la recopilación de requisitos y la retroalimentación del diseño, debe tener acceso a todos estos profesionales en algún nivel.
La forma más crítica, aunque más simple, de hacerlo es escuchar a todas las partes y tomar en serio sus comentarios. En la mayoría de las organizaciones, el siguiente paso es tomar esa retroalimentación y trabajar con el gerente de producto para organizar los requisitos en un trabajo accionable.
A partir de ahí, depende de las prioridades y de llenar los vacíos. En definitiva, el objetivo es diseñar el mejor producto y necesitamos la ayuda de todo el personal de desarrollo de productos. Reconocer que cada rol es importante y hacer que ese personal sea consciente de su valor en el ciclo de desarrollo del producto los abre para proporcionar la información que el diseñador necesita para tomar mejores decisiones de diseño de producto.
Fuente

BY ANDI OMTVEDT - DESIGNER @ TOPTAL (TRANSLATED BY YESICA DANDERFER)

Un Tutorial de TensorFlow Python - De Resolver Ecuaciones a Aprendizaje Profundo

Han habido algunos desarrollos notables últimamente en el mundo de la inteligencia artificial, desde el progreso muy publicitado con los autos sin conductor hasta las máquinas que ahora componen imitaciones Chopin o solo ser muy bueno en los videojuegos.
Para estos avances, son fundamentales algunas herramientas que ayudan a derivar el aprendizaje profundo y otros modelos de aprendizaje automático, entre los que destacan Torch, Caffe y Theano. Sin embargo, desde que Google Brain fue fuente abierta en noviembre de 2015 con su propio framework, TensorFlow, hemos visto que la popularidad de esta biblioteca de software se dispara para ser el framework de aprendizaje profundo más popular.
TensorFlow
¿Por qué ha sucedido esto? Las razones incluyen la gran cantidad de soporte y documentación disponible, su preparación para la producción, la facilidad de distribución de cálculos en una variedad de dispositivos y una excelente herramienta de visualización: TensorBoard.
En última instancia, TensorFlow logra combinar un conjunto completo y flexible de características técnicas con gran facilidad de uso.
En este artículo, obtendrás una comprensión de la mecánica de esta herramienta al usarla para resolver un problema numérico general bastante fuera de lo que normalmente implica el aprendizaje automático antes de introducir sus usos en el aprendizaje profundo con una simple implementación de red neuronal.

Antes de que Empieces

Se asume un conocimiento básico de los métodos de aprendizaje automático. Si necesitas ponerte al día, consulta esta publicación.
Como vamos a demostrar la API de Python, una comprensión de Numpy también es beneficiosa.
Para configurar TensorFlow, sigue las instrucciones que se encuentran aquí.
Si usas Windows, debes tener en cuenta que en el momento de redactar este documento, debes usar Python 3.4+, no 2.7.
Luego, cuando estés listo, deberías poder importar la biblioteca con:
import tensorflow as tf

Paso 1 de 2 a una solución TensorFlow: crea una gráfica

La construcción de los programas de TensorFlow generalmente consta de dos pasos principales, el primero de los cuales es construir una gráfica computacional que describirá los cálculos que deseas llevar a cabo, pero en realidad no los llevarás a cabo ni tendrán ningún valor.
Como con cualquier gráfica, tenemos nodos y bordes. Los bordes representan tensores, un tensor que representa una matriz n-dimensional. Por ejemplo, un tensor con dimensión (o rango en TensorFlow speak) 0 es un escalar, rango 1 un vector, rango 2 una matriz y así sucesivamente.
Los nodos representan operaciones que producen tensores de salida y toman tensores como entradas si es necesario. Tales operaciones incluyen adiciones (tf.add), multiplicaciones de matriz (tf.matmul), al igual que la creación de constantes (tf.constant).
Así que combinemos algunos de estos para nuestra primera gráfica.
a = tf.constant([2.5, 2])
b = tf.constant([3, 6], dtype=tf.float32)
total = tf.add(a, b)
Aquí hemos creado tres operaciones, dos de éstas para crear matrices de constante 1-d.
Los tipos de data se deducen del argumento de valores que se pasó o puedes denotarlos con el argumento dtype. Si yo no hubiese hecho esto con b, entonces un int32 hubiese sido inferido y un error dado como tf.add hubiese tratado de definir una adición en dos tipos diferentes.

Paso 2 de 2 para una Solución TensorFlow: Ejecuta las Operaciones

La gráfica está definida, pero para poder hacer los cálculos en ella (o cualquier parte de ella) debemos instalar una Sesión TensorFlow.
sess = tf.Session()
De manera alternativa, si estamos ejecutando una sesión en una consola interactiva, como IPython, luego utilizamos:
sess = tf.InteractiveSession()
El método run en el objeto de sesión es una forma de evaluar un Tensor.
Por ende, para evaluar el cálculo de adición definido arriba, pasamos ‘total’, el Tensor para retirar, el cual representa la salida de la op tf.add.
print(sess.run(total)) # [ 5.5  8. ]
En este punto introducimos la Variable TensorFlow. Donde las constantes son una parte fija de la definición de la gráfica, las variables pueden ser actualizadas. El constructor de la clase requiere un valor inicial, aun así, las variables necesitan una operación para inicializarlas explícitamente antes de que se lleven a cabo otras operaciones en ellas.
Las variables mantienen el estado de la gráfica en una sesión particular por lo que debemos observar lo que ocurre con las sesiones múltiples usando la misma gráfica para comprender mejor las variables.
# Crea una variable con un valor inicial de 1
some_var = tf.Variable(1)

# Crea una op para ejecutar inicializadores de variables
init_op = tf.global_variables_initializer()
# Crea una op para reemplazar el valor mantenido por some_var a 3
assign_op = some_var.assign(3)
# Instala dos instancias de una sesión
sess1 = tf.Session()
sess2 = tf.Session()

# Inicializa variables en ambas sesiones
sess1.run(init_op)
sess2.run(init_op)
print(sess1.run(some_var)) # Salidas 1

# Cambia some_var en sesión1
sess1.run(assign_op)
print(sess1.run(some_var)) # Salidas 3
print(sess2.run(some_var)) # Salidas 1

# Cierra Sesiones
sess1.close()
sess2.close()
Hemos instalado la gráfica y dos sesiones.
Después de ejecutar la inicialización en ambas sesiones (si no ejecutamos esto y luego evaluamos la variable, llegamos a un error) solo ejecutamos la op de asignación en una sesión. Como se puede ver, el valor de la variable persiste, pero no en todas las sesiones.

Alimentando la Gráfica para Abordar los Problemas Numéricos

Otro concepto importante de TensorFlow es el marcador de posición. Mientras que las variables mantienen el estado, los marcadores de posición se usan para definir qué entradas puede esperar la gráfica y su tipo de datos (y opcionalmente su forma). Luego podemos alimentar datos en la gráfica a través de estos marcadores de posición cuando ejecutamos el cálculo.
La gráfica TensorFlow está comenzando a parecerse a las redes neuronales que queremos entrenar pero antes de eso, usemos los conceptos para resolver un problema numérico común del mundo financiero.
Supongamos que queremos encontrar y en una ecuación como esta:
v = Ce-0.5y+ Ce-y+Ce-1.5y+(C+P)e-2y
para un v dado (con la constante C y P).
Esta es una fórmula para calcular el rendimiento hasta el vencimiento (y) en un bono con valor de mercado v, principal P, y cupón C pagado semestralmente, pero con los flujos de efectivo descontados de en composición continua.
Básicamente, tenemos que resolver una ecuación como ésta con prueba y error y elegiremos el método de bisección para concentrarnos en nuestro valor final para y.
Primero, modelaremos este problema como una gráfica de TensorFlow.
C y P son constantes fijas y forman parte de la definición de nuestra gráfica. Queremos tener un proceso que refine los límites inferior y superior de y. Por lo tanto, estos límites (denotados como “a” y “b”) son buenos candidatos para las variables que deben modificarse después de cada conjetura de “y” (que se toma como el punto medio de “a” y “b”).
# Especifica los valores que generarán nuestras operaciones constantes
C = tf.constant(5.0)
P = tf.constant(100.0)

# Especificamos los valores iniciales que serán nuestros límites inferior y superior cuando se inicialicen.
# Obviamente, el éxito final de este algoritmo depende de puntos de partida decentes
a = tf.Variable(-10.0)
b = tf.Variable(10.0)
# Esperamos que se inserte un número flotante en la gráfica
v_target = tf.placeholder("float")
# Recuerda que las siguientes operaciones son definiciones,
# ninguna se lleva a cabo hasta que se evalúa una operación en una sesión!
y = (a+b)/2
v_guess = C*tf.exp(-0.5*y) + C*tf.exp(-y) + C*tf.exp(-1.5*y) + (C + P)*tf.exp(-2*y)
# Operaciones para establecer valores temporales (a_ y b_) destinado a ser los próximos valores de a y b.
# ej. si la conjetura resulta en una v mayor que la v objetivo,
# estableceremos a_ como el valor actual de y
a_ = tf.where(v_guess > v_target, y, a)
b_ = tf.where(v_guess < v_target, y, b)
# La última etapa de nuestra gráfica es asignar los dos valores temporales a nuestras variables
step = tf.group( a.assign(a_), b.assign(b_) )
Entonces ahora tenemos una lista de operaciones y variables, cualquiera de las cuales puede ser evaluada contra una sesión en particular. Algunas de estas operaciones dependen de que se ejecuten otras operaciones, por lo que ejecutar, por ejemplo, v_guess activará una reacción en cadena para que otros tensores, como C y P, se evalúen primero.
Algunas de estas operaciones dependen de un marcador de posición para el cual se debe especificar un valor entonces, ¿cómo alimentamos realmente ese valor?
Esto se hace mediante el argumento feed_dict en la función run.
Si quieres evaluar a_, conectamos el valor de nuestro marcador de posición v_target, así:
sess.run(a_, feed_dict={v_target: 100})
Dando como resultado 0.0.
Conecta un v_target de 130 y obtenemos -10.0.
Es nuestra operación de “paso” que realmente requiere que todas las demás operaciones se realicen como un requisito previo y, de hecho, ejecuta toda la gráfica. También es una operación que realmente cambia el estado real en nuestra sesión. Por lo tanto, cuanto más ejecutamos el paso, más empujamos incrementalmente nuestras variables a y b hacia el valor real de y.
Entonces, digamos que nuestro valor para v en nuestra ecuación es igual a 95. Establezcamos una sesión y ejecutemos nuestra gráfica en ella 100 veces.
# Configurar una sesión e inicializar variables
sess = tf.Session()
tf.global_variables_initializer().run()
# Ejecuta la operación de paso (y, por lo tanto, toda la gráfica) 100 veces
para i en el rango (100):
 sess.run(step, feed_dict={v_target:95})
Si evaluamos el tensor y ahora, obtenemos algo parecido a una respuesta deseable
print(sess.run(y)) # 0.125163

Redes Neuronales

Ahora que tenemos una comprensión de la mecánica de TensorFlow, podemos combinar esto con algunas operaciones adicionales de aprendizaje automático integradas en TensorFlow para entrenar una red neuronal simple.
Aquí nos gustaría clasificar puntos de data en un sistema coordinado 2d, dependiendo de si caen en una región en particular en un círculo de radio 0.5 centrado en el origen.
Por supuesto, esto se puede verificar de manera concreta simplemente buscando un punto dado (a,b)si a^2 + b^2 <0.5, pero a los efectos de este experimento de aprendizaje automático, nos gustaría en su lugar pasar un conjunto de entrenamiento: una serie de puntos aleatorios y si caen o no en nuestra región prevista. Aquí hay una forma de crear esto:
import numpy as np
NO_OF_RANDOM_POINTS = 100
CIRCLE_RADIUS = 0.5
random_spots = np.random.rand(NO_OF_RANDOM_POINTS, 2) * 2 - 1
is_inside_circle = (np.power(random_spots[:,0],2) + np.power(random_spots[:,1],2) < CIRCLE_RADIUS).astype(int)
Crearemos una red neuronal con las siguientes características:
  1. Consiste en una capa de entrada con dos nodos, en la que alimentamos nuestra serie de vectores bidimensionales contenidos en “random_spots”. Esto estará representado por un marcador de posición que espera los datos de entrenamiento.
  2. La capa de salida también tendrá dos nodos, por lo que necesitamos alimentar nuestra serie de etiquetas de capacitación (“is_inside_circle”) en un marcador de posición para un escalar y luego convertir esos valores en un vector caliente de dos dimensiones.
  3. Tendremos una capa oculta que consta de tres nodos, por lo que necesitaremos usar variables para nuestras matrices de ponderaciones y vectores de sesgo ya que estos son los valores que deben ser refinados al realizar la capacitación.
INPUT_LAYER_SIZE = 2
HIDDEN_LAYER_SIZE = 3
OUTPUT_LAYER_SIZE = 2

# Los valores iniciales para los pesos y los sesgos se dibujan aleatoria y uniformemente a partir de [-1, 1]
# Por ejemplo, W1 es una matriz de forma 2x3
W1 = tf.Variable(tf.random_uniform([INPUT_LAYER_SIZE, HIDDEN_LAYER_SIZE], -1, 1))
b1 = tf.Variable(tf.random_uniform([HIDDEN_LAYER_SIZE], -1, 1))
W2 = tf.Variable(tf.random_uniform([HIDDEN_LAYER_SIZE, OUTPUT_LAYER_SIZE], -1, 1))
b2 = tf.Variable(tf.random_uniform([OUTPUT_LAYER_SIZE], -1, 1))
# Especificando que el marcador de posición X puede esperar una matriz de 2 columnas (pero cualquier cantidad de filas)
# representando lugares aleatorios
X = tf.placeholder(tf.float32, [None, INPUT_LAYER_SIZE])
# El marcador de posición Y puede esperar números enteros que representen si el punto correspondiente está en el círculo
# o no (sin forma específica)
Y = tf.placeholder(tf.uint8)
# Una op para convertir a un único vector caliente
onehot_output = tf.one_hot(Y, OUTPUT_LAYER_SIZE)
Para completar la definición de nuestra gráfica, definimos algunas operaciones que nos ayudarán a entrenar las variables para llegar a un mejor clasificador. Estos incluyen los cálculos de la matriz, las funciones de activación y el optimizador.
LEARNING_RATE = 0.01
# Op para ejecutar un cálculo de matriz X*W1 + b1
hidden_layer = tf.add(tf.matmul(X, W1), b1)
# Utiliza la función de activación sigmoidea en el resultado
activated_hidden_layer = tf.sigmoid(hidden_layer)
# Aplica los siguientes pesos y sesgo (W2, b2) a la capa oculta y luego aplica la función softmax
# para obtener nuestra capa de salida (cada vector sumando 1)
output_layer = tf.nn.softmax(tf.add(tf.matmul(activated_hidden_layer, W2), b2))
# Calcula la entropía cruzada para nuestra función de pérdida
loss = -tf.reduce_sum(onehot_output * tf.log(output_layer))
# Utiliza el optimizador de descenso de gradiente a la velocidad de aprendizaje especificada para minimizar el valor dado por el tensor de pérdida
train_step = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(loss)
Después de configurar nuestra gráfica, es hora de configurar una sesión y ejecutar el “paso de tren” (que también ejecuta las operaciones de requisitos previos). Algunas de estas op usan marcadores de posición, por lo que se deben proporcionar los valores. Este paso de entrenamiento representa una época en nuestro algoritmo de aprendizaje y, como tal, se enlaza a la cantidad de épocas que deseamos ejecutar. Podemos ejecutar otras partes de la gráfica, como el tensor de “pérdida” para fines informativos.
EPOCH_COUNT = 1000
sess = tf.Session()
tf.global_variables_initializer().run()
para i en rango(EPOCH_COUNT):
   if i%100 == 0:
    print('Loss after %d runs: %f' % (i, sess.run(loss, feed_dict={X: random_spots, Y: is_inside_circle})))
 sess.run(train_step, feed_dict={X: random_spots, Y: is_inside_circle})
print('Final loss after %d runs: %f' % (i, sess.run(loss, feed_dict={X: random_spots, Y: is_inside_circle})))
Una vez que hemos entrenado el algoritmo, podemos alimentar en un punto y obtener la salida de la red neuronal así:
sess.run(output_layer, feed_dict={X: [[1, 1]]}) # Hopefully something close to [1, 0]
sess.run(output_layer, feed_dict={X: [[0, 0]]}) # Hopefully something close to [0, 1]
Podemos clasificar el punto como fuera del círculo si el primer miembro del vector de salida es mayor que 0.5, dentro de lo contrario. Al ejecutar el tensor output_layer para muchos puntos, podemos tener una idea de cómo el aprendiz visualiza la región que contiene los puntos clasificados positivamente. Vale la pena jugar con el tamaño del conjunto de entrenamiento, la tasa de aprendizaje y otros parámetros para ver qué tan cerca podemos llegar al círculo que pretendíamos.

Almost triangle
Conjunto de entrenamiento: 100 puntos
Tasa de aprendizaje: 0.01
Épocas: 1000
Small triangle
Conjunto de entrenamiento: 1000 puntos 
Tasa de aprendizaje: 0.01
Épocas: 1000
Large triangle
Conjunto de entrenamiento: 1000 puntos 
Tasa de aprendizaje: 0.01
Épocas: 10000
Almost circle
Conjunto de entrenamiento: 1000 puntos 
Tasa de aprendizaje: 0.0001
Épocas: 10000

Para Terminar

Esta es una buena lección de que un aumento en el conjunto de entrenamiento, o la cantidad de época no es garantía para un buen alumno, la tasa de aprendizaje debe ajustarse de manera apropiada.
Afortunadamente, estas demostraciones le han brindado una buena idea de los principios básicos de TensorFlow y proporcionan una base sólida para implementar técnicas más complejas.
No hemos cubierto conceptos como el Tensorboard o la capacitación de nuestros modelos en GPU, pero estos están bien cubiertos en la documentación de TensorFlow. Se pueden encontrar varias recetas en la documentación que pueden ayudarte a ponerte al día con las emocionantes tareas de aprendizaje profundo utilizando este poderoso framework.
Fuente:

BY OLIVER HOLLOWAY - FREELANCE SOFTWARE ENGINEER @ TOPTAL (TRANSLATED BY MARISELA ORDAZ)

Lo más leido esta semana

Nos leen

Blogger news

Mi Ping en TotalPing.com