{"id":28515,"date":"2024-03-05T15:10:06","date_gmt":"2024-03-05T15:10:06","guid":{"rendered":"https:\/\/building.nu.com\/building-and-maintaining-internal-tools-for-ds-ml-teams-lessons-learned\/"},"modified":"2024-10-30T14:09:40","modified_gmt":"2024-10-30T14:09:40","slug":"creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas","status":"publish","type":"post","link":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/","title":{"rendered":"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Contribuci\u00f3n: <a href=\"https:\/\/building.nu.com\/author\/arthur-kamienski-data-scientist\/\">Arthur Kamienski<\/a>, <a href=\"https:\/\/building.nu.com\/author\/caique-lima-data-scientist\/\">Caique Lima<\/a>, <a href=\"https:\/\/building.nu.com\/author\/sarah-malaman\/\">Sarah Malaman<\/a>, <a href=\"https:\/\/building.nu.com\/author\/vitor-pinheiro-data-scientist\/\">Vitor Pinheiro<\/a><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los profesionales de la Ciencia de Datos (DS) y el Aprendizaje Autom\u00e1tico (ML) dependen de muchas herramientas, aunque esto no siempre sea inmediatamente obvio. Siempre que <em>importamos<\/em> una biblioteca a un cuaderno de Python o ejecutamos comandos como <em>grep<\/em>, <em>find<\/em> y <em>sed<\/em> en sistemas tipo UNIX, estamos usando y benefici\u00e1ndonos de una herramienta que otra persona escribi\u00f3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero tambi\u00e9n podemos escribir <em>nuestras propias<\/em> herramientas. Las herramientas suelen surgir cuando alguien detecta una funcionalidad repetida en m\u00faltiples productos o proyectos. El instinto natural del programador es extraer el comportamiento com\u00fan en un lugar separado para evitar la duplicaci\u00f3n y facilitar los cambios futuros. As\u00ed nace una biblioteca de software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El uso de herramientas como bibliotecas (pero tambi\u00e9n aplicaciones, plataformas y aplicaciones de l\u00ednea de comandos basadas en UI) <em>en toda<\/em> una organizaci\u00f3n es algo com\u00fan en las empresas de tecnolog\u00eda modernas. Esta estrategia suele denominarse <strong><em>abastecimiento interno<\/em><\/strong>. Si bien ofrece ventajas considerables, tambi\u00e9n conlleva desaf\u00edos que requieren una cuidadosa consideraci\u00f3n.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>La creaci\u00f3n de herramientas de software para toda la organizaci\u00f3n para consumo interno se ha denominado <\/em><strong><em>abastecimiento interno<\/em><\/strong><em> en los medios t\u00e9cnicos.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">En esta publicaci\u00f3n enumeraremos las lecciones que aprendimos a lo largo de los a\u00f1os utilizando herramientas internas en Nubank. Estas lecciones no se refieren s\u00f3lo a puntos t\u00e9cnicos, sino tambi\u00e9n a cuestiones subjetivas a las que se debe prestar atenci\u00f3n para garantizar el \u00e9xito de estas herramientas, trat\u00e1ndolas como <em>productos<\/em> internos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El art\u00edculo est\u00e1 dirigido a equipos que crean y mantienen herramientas internas para que las utilicen otros equipos, <em>especialmente<\/em> aquellos que tienen en mente casos de uso de DS y ML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comenzaremos resumiendo los <em>porqu\u00e9s<\/em> de crear herramientas internas con una breve descripci\u00f3n general de los tipos principales, luego enumeraremos las lecciones que consideramos m\u00e1s importantes, sin ning\u00fan orden en particular.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 crear herramientas internas?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Construimos herramientas porque nos hacen m\u00e1s efectivos y eficientes. Esto es cierto a nivel individual y especialmente a nivel organizacional, ya que hay muchos fen\u00f3menos <em>emergentes<\/em> y no lineales que solo tienen lugar una vez que se alcanza cierta escala.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Las herramientas impulsan la estandarizaci\u00f3n&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si los equipos utilizan un conjunto com\u00fan de bibliotecas, es m\u00e1s f\u00e1cil realizar cambios en toda la organizaci\u00f3n. Una vez que env\u00ede una nueva versi\u00f3n de la biblioteca y todos los equipos la actualicen, boom; Los cambios se aplican en todas partes. Este suele ser el caso de las funciones de seguridad y registro.<\/li>\n\n\n\n<li>Si todos los equipos utilizan el mismo conjunto de herramientas, las personas pueden cambiar de equipo y volverse productivas r\u00e1pidamente.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Las herramientas aumentan el impacto de las soluciones locales<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las mejoras y optimizaciones creadas por equipos peque\u00f1os (o incluso individuos) se pueden compartir r\u00e1pidamente entre todos en la organizaci\u00f3n. Se trata de un efecto amplificador masivo que crece cuanto m\u00e1s grande es la propia empresa.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Las herramientas codifican el conocimiento t\u00e1cito<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las herramientas codifican conocimientos que de otro modo estar\u00edan dispersos entre varios equipos o, peor a\u00fan, solo vivir\u00edan t\u00e1citamente en las cabezas de unas pocas personas clave. Una vez que abandonan la empresa, el conocimiento tambi\u00e9n se pierde.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Las herramientas reducen riesgos y errores<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usar un conjunto com\u00fan de funciones\/bibliotecas s\u00f3lidas y probadas es mucho menos riesgoso que hacer que cada equipo cree las suyas propias.&nbsp;<\/li>\n\n\n\n<li>Se pueden utilizar herramientas para <em>hacer cumplir<\/em> los principios y reglas de toda la organizaci\u00f3n, incorpor\u00e1ndolos al c\u00f3digo. Estos incluyen funcionalidades de control de acceso y registro, por ejemplo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Las herramientas disminuyen el TTM&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sin par\u00e1lisis del an\u00e1lisis: no hay necesidad de perder tiempo investigando cu\u00e1l es la mejor manera de manejar cada problema cuando existe una herramienta predeterminada dise\u00f1ada para eso.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos de herramientas internas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al fin y al cabo, las herramientas de software son s\u00f3lo otra pieza de c\u00f3digo. Pero si miramos m\u00e1s de cerca, existen diferentes tipos de herramientas con respecto a la <em>interfaz<\/em> que exponen a los usuarios y las <em>capacidades<\/em> que brindan. Cada uno de ellos desempe\u00f1a un papel separado en una organizaci\u00f3n tecnol\u00f3gica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una distinci\u00f3n clave es la de herramientas&nbsp; <em>tacticas<\/em> vs <em>estrat\u00e9gicas<\/em>: aquellas que generalmente se utilizan como m\u00e1ximo en 1 o 2 equipos y aquellas que pueden ser compartidas por toda la organizaci\u00f3n \u2014 convirti\u00e9ndose potencialmente en un activo clave para una empresa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los tipos principales: Aplicaciones, Bibliotecas y Plataformas basadas en UI y de L\u00ednea de Comandos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es f\u00e1cil ver la diferencia entre las aplicaciones basadas en UI y las de l\u00ednea de comandos, pero este no es el caso entre las bibliotecas y las plataformas: Una diferencia clave es que las plataformas generalmente requieren que uno <em>haga todo lo posible<\/em> por ellas. Normalmente no puede elegir qu\u00e9 partes de una plataforma quiere usar \u2014 o las usa <em>todas<\/em> o no. Compare esto con las bibliotecas: puede usar varias bibliotecas al mismo tiempo, mezcl\u00e1ndolas y combin\u00e1ndolas de varias maneras, pero una vez que elige una plataforma, se queda con ella.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Las bibliotecas son colecciones de software que le permiten elegir lo que desea utilizar. Las plataformas suelen ser obstinadas<\/em>\u2014<em> imponen decisiones de dise\u00f1o que no se pueden rechazar.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Otra diferencia es que una plataforma suele ser <em>obstinada<\/em>; se toman decisiones de dise\u00f1o claras y usted debe aceptarlas si decide utilizarlas. Por esta raz\u00f3n, las plataformas son excelentes para <em>imponer <\/em>la estandarizaci\u00f3n y los patrones organizativos que todos los equipos deben seguir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez terminada la introducci\u00f3n, profundicemos en el meollo del art\u00edculo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Las herramientas internas son productos y deben gestionarse como tales.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las herramientas internas son <strong>productos<\/strong> y deben gestionarse como tales. Hay que pensar en los usuarios internos como <em>clientes<\/em> \u2014 lo que a veces resulta dif\u00edcil debido a la proximidad y la informalidad de las operaciones del d\u00eda a d\u00eda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo ideal ser\u00eda contar con <strong>gerentes de producto<\/strong> dedicados que comprendan e interact\u00faen con los usuarios y establezcan prioridades en funci\u00f3n de lo que necesitan. Si eso no es posible, al menos deber\u00eda haber personas con <em>habilidades<\/em><strong><em> <\/em><\/strong>de gesti\u00f3n de productos en el equipo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo m\u00ednimo que necesita para <em>gestionar<\/em><strong><em> <\/em><\/strong>un producto interno es: una hoja de ruta clara, comentarios estructurados de los usuarios y un buen canal de soporte.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hojas de ruta<\/strong>: Una hoja de ruta clara y <em>p\u00fablica<\/em> con hitos ayuda a los usuarios y al equipo de desarrollo a comprender qu\u00e9 se planifica y qu\u00e9 tareas tienen prioridad sobre otras.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rutinas de retroalimentaci\u00f3n estructurada: <\/strong>Es necesario <em>encuestar<\/em> a los usuarios de vez en cuando para obtener comentarios positivos y negativos. Por lo general, funciona bien una combinaci\u00f3n de preguntas breves y objetivas con un espacio abierto de retroalimentaci\u00f3n.<strong> <\/strong>Prefiera comentarios an\u00f3nimos para asegurarse de que los clientes no se abstengan de criticar debido a la pol\u00edtica de la oficina. Deje en claro que <em>cualquier<\/em> comentario (especialmente la cr\u00edtica constructiva) es bienvenido.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Canales de soporte: <\/strong>Un canal de Slack servir\u00e1 al principio, pero es dif\u00edcil escalar a medida que aumenta el n\u00famero de usuarios: es posible que pronto necesite sistemas de seguimiento de incidencias o tickets para manejar la carga, lo que le permitir\u00e1 cuantificar y <em>medir<\/em> qu\u00e9 tan bueno es el soporte.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Los ejemplos y una buena documentaci\u00f3n ayudan a reducir la necesidad de soporte personalizado. Adem\u00e1s, aseg\u00farese de que los usuarios sepan c\u00f3mo buscar en Slack respuestas a preguntas frecuentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La evangelizaci\u00f3n es clave<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Casi nadie quiere aprender otra herramienta m\u00e1s \u2014 especialmente si las ventajas no son evidentes de inmediato. Debemos practicar activamente la evangelizaci\u00f3n, promoviendo la herramienta entre los posibles usuarios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En algunos casos, la adopci\u00f3n de una herramienta puede <em>exigirse<\/em> a trav\u00e9s de enfoques de arriba hacia abajo, como incorporarla en Objetivos y Resultados Clave (OKRs) u otros marcos corporativos de establecimiento de metas. En estos escenarios, probablemente no haya mucha necesidad de evangelizar. Pero ese no es nuestro enfoque aqu\u00ed: preferimos crear herramientas que los usuarios <em>quieran<\/em> usar, porque ven valor en ellas \u2014 no porque se les <em>imponga<\/em>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Una buena herramienta que \u201csimplemente funciona\u201d y gusta siempre necesitar\u00e1 menos marketing que una odiada por los usuarios.&nbsp;<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Desde el punto de vista de los clientes, utilizar una nueva herramienta significa tener que <em>aprenderla<\/em> y tal vez cambiar alg\u00fan aspecto de su trabajo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto puede ser una barrera importante, porque las personas generalmente se resisten al cambio, especialmente cuando implica modificar un flujo de trabajo al que est\u00e1n acostumbrados y en el que son competentes. Aqu\u00ed entran en juego varios factores: percepciones sobre la seguridad laboral, problemas de ego y p\u00e9rdida percibida de influencia. Las personas no quieren dejar de lado algo que pasaron dos a\u00f1os dominando, <em>especialmente<\/em> si creen que eso les confiere <em>estatus<\/em> dentro de la organizaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seg\u00fan nuestra experiencia, es mejor <em>mostrar valor primero<\/em>. Si lo hace bien, la decisi\u00f3n de adoptar su herramienta ser\u00e1 obvia y sencilla. Aqu\u00ed es c\u00f3mo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Proyectos piloto:<\/strong> El <em>propio <\/em>equipo de desarrollo puede ejecutar proyectos iniciales utilizando la herramienta para generar historias de \u00e9xito tempranas que fomenten la adopci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Canales de soporte:<\/strong> Creemos que alrededor del 30% del \u00e9xito de una herramienta proviene de un buen soporte. Un canal de Slack dedicado para <em>asistencia<\/em> <em>r\u00e1pida y sin juicios<\/em> mejora significativamente la disposici\u00f3n del usuario a interactuar con la herramienta.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Recursos accesibles:<\/strong> <a href=\"https:\/\/docs.google.com\/document\/d\/129UeK_iydFqNTFdnYA3ha0g3tgyY0NXq\/edit#heading=h.26in1rg\">Proporcionar amplios ejemplos<\/a> y mantener un repositorio con c\u00f3digo fuente claro y bien escrito permite a los usuarios comprender y utilizar la herramienta f\u00e1cilmente. El canal de soporte (por ejemplo, Slack) tambi\u00e9n funciona como un repositorio de soluciones con capacidad de <em>b\u00fasqueda<\/em>, lo que facilita a\u00fan m\u00e1s el aprendizaje del usuario.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Beneficios cuantificadores:<\/strong> Demostrar el impacto potencial de la herramienta en t\u00e9rminos de ahorro de tiempo y dinero ayuda a presentar argumentos convincentes para su adopci\u00f3n. Utilice montos aproximados en d\u00f3lares y estimaciones de tiempo (por ejemplo, horas de trabajo ahorradas) para que el impacto sea m\u00e1s concreto.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Registro, instrumentaci\u00f3n y comentarios de los usuarios<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al crear herramientas internas, existe un riesgo real de que simplemente <em>asumamos <\/em>que sabemos qu\u00e9 necesitan los usuarios y c\u00f3mo utilizan nuestras herramientas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Utilice <em>datos<\/em> en su lugar. Sin datos, la gesti\u00f3n de productos se reduce a una toma de decisiones basada en corazonadas, lo que la convierte en una tarea puramente pol\u00edtica donde gana la opini\u00f3n de la persona mejor pagada (HiPPO).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La recopilaci\u00f3n de informaci\u00f3n permite al equipo de mantenimiento comprender c\u00f3mo los usuarios utilizan las herramientas: ayuda a medir la satisfacci\u00f3n del cliente, pero tambi\u00e9n a detectar \u00e1reas de enfoque en las que se deben concentrar los esfuerzos, lo que hace que el mantenimiento sea m\u00e1s efectivo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vemos dos formas principales de recopilar informaci\u00f3n: <strong>impl\u00edcita<\/strong> y <strong>expl\u00edcitamente,<\/strong> a trav\u00e9s de instrumentaci\u00f3n del sistema y encuestas, respectivamente. Cada uno proporciona informaci\u00f3n desde un \u00e1ngulo diferente y ambos tienen ventajas y desventajas, como veremos a continuaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dos formas de recopilar datos de uso de herramientas: <\/em><strong><em>impl\u00edcitamente<\/em><\/strong><em> (registros, instrumentaci\u00f3n, paneles) y <\/em><strong><em>expl\u00edcitamente<\/em><\/strong><em> (encuestas de usuarios)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recopile datos <strong>impl\u00edcitamente<\/strong> mediante registros e instrumentaci\u00f3n. Todos los lenguajes de programaci\u00f3n admiten el registro, que luego se puede visualizar en herramientas como Splunk o Grafana. La principal ventaja de la retroalimentaci\u00f3n impl\u00edcita es que es imposible fingir \u2014 pero requiere trabajo para configurarla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n se muestran algunos ejemplos de la informaci\u00f3n que se puede obtener mediante el registro:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00bfCu\u00e1ntos clientes est\u00e1n utilizando la herramienta a lo largo del tiempo?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 funcionalidades\/componentes espec\u00edficos se utilizan m\u00e1s?<\/li>\n\n\n\n<li>Mensajes de error \/ excepciones;<\/li>\n\n\n\n<li>Detectar usuarios que comenzaron a utilizar la herramienta pero finalmente <em>abandonaron<\/em>;<\/li>\n\n\n\n<li>Mide tiempos de carga, tiempos de respuesta.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Por otro lado, las encuestas a los usuarios son buenas para obtener comentarios <strong>expl\u00edcitos<\/strong>, -\u2013 siempre y cuando los usuarios se sientan c\u00f3modos con ello. El principal riesgo es que los clientes internos <em>eviten<\/em> dar comentarios honestos y, a veces, negativos por temor a la pol\u00edtica de la oficina y a las represalias. Las encuestas de usuarios deben ser <em>an\u00f3nimas<\/em> para evitarlo.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Las encuestas de usuarios deben ser an\u00f3nimas. Las personas nunca se sentir\u00e1n c\u00f3modas dando comentarios negativos si sienten que los comentarios pueden perjudicar su carrera en la organizaci\u00f3n.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Al elegir encuestas al estilo Google Forms, tenga en cuenta el tiempo de sus clientes: Incluya todo lo posible en un <em>formulario<\/em> <em>breve<\/em> \u2014 las personas tienen mejores cosas que hacer que responder una encuesta de 20 p\u00e1ginas sobre su producto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prefiera preguntas con respuestas clasificadas num\u00e9ricamente (por ejemplo, escala Likert) para permitir comparaciones a lo largo del tiempo y ser lo m\u00e1s <em>espec\u00edficas <\/em>posible: <em>\u201cEn una escala del 1 al 5, \u00bfcu\u00e1nto dir\u00eda que la herramienta X ha aumentado su productividad al realizar la tarea Y?\u201d.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finalmente, aseg\u00farese de incluir 1 o 2 preguntas abiertas para permitir opiniones y consejos generales de los usuarios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Los ejemplos son el mejor tipo de documentaci\u00f3n.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tener documentaci\u00f3n es un requisito com\u00fan para las herramientas internas \u2014 especialmente cuando es necesario atender a usuarios no t\u00e9cnicos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, redactar una buena documentaci\u00f3n cuesta mucho y, sobre todo, mantenerla. Agregar funciones a las herramientas<em> <\/em>siempre tendr\u00e1 prioridad sobre la actualizaci\u00f3n de los documentos. Entonces las herramientas evolucionan y la documentaci\u00f3n se queda atr\u00e1s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El camino habitual para la documentaci\u00f3n de herramientas es volverse obsoleto con el tiempo y morir lentamente, llegando finalmente al punto en el que ya nadie conf\u00eda en \u00e9l. A veces incluso llega a ser <em>completamente<\/em> <em>enga\u00f1oso<\/em>: instrucciones que ya no tienen sentido, referencias a caracter\u00edsticas que han sido modificadas, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, nadie <em>quiere<\/em> leer la documentaci\u00f3n. Los usuarios quieren <em>hacer las cosas<\/em> lo m\u00e1s r\u00e1pido posible. La forma m\u00e1s r\u00e1pida suele ser mirando ejemplos e intentando descubrir c\u00f3mo adaptarlos a su propio caso de uso. Facil\u00edteles las cosas teniendo un conjunto de <em>ejemplos can\u00f3nicos <\/em>como parte de la documentaci\u00f3n oficial.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Hoy en d\u00eda la gente tiene periodos de atenci\u00f3n cortos y nadie tiene el tiempo \u2013 o la inclinaci\u00f3n \u2013 de leer documentaci\u00f3n escrita para aprender c\u00f3mo funciona algo, excepto como \u00faltimo recurso. En su lugar, c\u00e9ntrese en los ejemplos.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s de los beneficios anteriores, un buen conjunto de ejemplos tambi\u00e9n ayuda a reducir el esfuerzo de soporte. Evita que los equipos de soporte tengan que abordar preguntas que podr\u00edan responderse se\u00f1alando un ejemplo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los ejemplos pueden incluso funcionar como<em> pruebas de integraci\u00f3n <\/em>para herramientas \u2014 asegurando as\u00ed que los ejemplos siempre se validen con nuevas compilaciones, como parte de su flujo de CI\/CD. Su documentaci\u00f3n ahora&nbsp; <em>se puede probar<\/em>, lo cual es lo mejor de ambos mundos, ya que evita que quede obsoleta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finalmente, los ejemplos ayudan a evitar que las \u201cmalas pr\u00e1cticas\u201d se propaguen entre la base de usuarios. Le sorprender\u00e1 saber cu\u00e1ntos usuarios copian y pegan el c\u00f3digo de otras personas en un intento de que todo funcione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los ejemplos son el mejor tipo de documentaci\u00f3n, <em>especialmente<\/em> para herramientas internas que utilizar\u00e1n personas t\u00e9cnicas como los profesionales de datos. Son m\u00e1s f\u00e1ciles de <em>crear<\/em>, <em>validar<\/em> y <em>mentener<\/em> que el texto escrito; est\u00e1n m\u00e1s cerca de la fuente de la verdad (el c\u00f3digo fuente) y son m\u00e1s r\u00e1pidos de consumir. Los ejemplos ocupan el segundo lugar despu\u00e9s del c\u00f3digo en s\u00ed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mantener la Coherencia<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando alguien usa una herramienta, necesita construir un <em>modelo mental<\/em> de c\u00f3mo funciona. Un ejemplo sencillo es la configuraci\u00f3n de los pedales en los coches manuales.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las marcas de autom\u00f3viles var\u00edan mucho con respecto a los colores, los tama\u00f1os e incluso el lado en el que se ubica el volante, pero son <strong><em>consistentes <\/em><\/strong>con respecto a la disposici\u00f3n de los pedales: una vez que haya creado un modelo mental<em> <\/em>de c\u00f3mo usarlos, podr\u00e1 confiar en \u00e9l sin importar qu\u00e9 auto conduzca.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora imagine si cada marca de autom\u00f3vil diferente tuviera una configuraci\u00f3n de pedal diferente. Al conducir un auto nuevo, nunca sabr\u00eda qu\u00e9 esperar y tendr\u00eda que construir un modelo mental completamente nuevo y volver a aprender a conducirlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Los autos difieren mucho en cuanto a colores, estilos y tama\u00f1os, pero son <\/em><strong><em>consistentes<\/em><\/strong><em> en cuanto a la configuraci\u00f3n de los pedales: el modelo mental (embrague, freno y acelerador) no suele variar.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las herramientas internas como bibliotecas y plataformas tambi\u00e9n son as\u00ed. Cuanto m\u00e1s <em>consistente<\/em> sea una herramienta&nbsp; \u2014 usando los mismos patrones, nombres, estructuras y convenciones en todas partes, \u2014 m\u00e1s r\u00e1pido los usuarios podr\u00e1n construir un modelo mental y m\u00e1s <em>intuitiva<\/em> se sentir\u00e1 la herramienta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto ayuda a prevenir errores, reduce la necesidad de soporte y, lo m\u00e1s importante, disminuye la <em>carga cognitiva<\/em> de su herramienta. Usar una herramienta consistente significa que una vez que has aprendido c\u00f3mo realizar una tarea espec\u00edfica, las has aprendido todas, como es el caso de los autos y las configuraciones de los pedales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todos conocemos herramientas que parecen f\u00e1ciles e intuitivas y aquellas que nunca recuerda bien c\u00f3mo usarlas (y necesita buscar ejemplos constantemente en Google). <em>Pandas<\/em> y <em>Matplotlib<\/em> son ejemplos que me vienen a la mente aqu\u00ed: aunque son muy buenas bibliotecas, hay algunas inconsistencias en los nombres, el orden de los argumentos y la sem\u00e1ntica de las funciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una buena regla general a tener en cuenta es el <a href=\"https:\/\/www.linkedin.com\/pulse\/principle-least-surprise-incus-data-pty-ltd\/\"><em>principio de m\u00ednima sorpresa<\/em><\/a>, seg\u00fan el cual usted, el mantenedor de la herramienta, siempre elige estructurar las cosas de una manera que resulte m\u00e1s natural o menos sorprendente para el usuario.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>El principio de m\u00ednima sorpresa: En el dise\u00f1o de interfaces, haga siempre lo menos sorprendente.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">La mayor ventaja de la coherencia es disminuir la carga mental de los usuarios, pero hemos descubierto que incluso ayuda a la capacidad de descubrimiento: los usuarios pueden <em>explorar<\/em> mejor sus herramientas si las cosas tienen nombres y estructuras consistentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n se ofrecen algunos consejos pr\u00e1cticos sobre c\u00f3mo lograr coherencia en las herramientas internas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Convention_over_configuration\"><strong>Convenci\u00f3n sobre configuraci\u00f3n<\/strong><\/a>: Hecho famoso por el marco Ruby on Rails, establece que las cosas deben seguir <em>alguna <\/em>convenci\u00f3n de forma predeterminada. Por ejemplo, las clases deber\u00edan llamarse FooBar (en CamelCase) y la tabla de base de datos correspondiente deber\u00eda llamarse foo_bar (en SnakeCase).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ordenamiento consistente de par\u00e1metros:<\/strong> \u00a1Mantenga consistente el orden de los argumentos en las funciones! Si tiene varias funciones donde cada una toma un nombre y una ruta de archivo, \u00a1haga que el orden de los par\u00e1metros se mantenga igual! P.ej. name es <em>siempre<\/em> el primer argumento y file_path el segundo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Estructura consistente:<\/strong> Si estructura una biblioteca en carpetas, aseg\u00farese de que todas sigan los mismos patrones, por ejemplo: pa\u00edses\/\u00e1reas_empresariales\/escuadrones. Esto ayuda a los usuarios a encontrar cosas m\u00e1s f\u00e1cilmente.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Orden consistente:<\/strong> Cuando enumere algo, <em>ord\u00e9nelo<\/em> de la misma manera. Encontrar cosas es mucho m\u00e1s f\u00e1cil si uno sabe que est\u00e1n ordenadas alfab\u00e9ticamente, por ejemplo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Utilice los mismos nombres para las mismas cosas<\/strong>: Si su herramienta utiliza elementos visuales y ha decidido llamarlos \u201celementos<em>\u201d<\/em>, <em>siempre<\/em> ll\u00e1melos \u201celementos\u201d, en el c\u00f3digo fuente, en la documentaci\u00f3n, en todas partes. Ni \u00abcomponentes visuales\u00bb, ni \u00abwidgets\u00bb. Usar nombres diferentes para las mismas cosas (o, por el contrario, el mismo nombre para cosas diferentes) dificulta que los usuarios comprendan herramientas complejas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Cuidado con las Dependencias<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A medida que las personas comiencen a utilizar las herramientas que usted crea, inevitablemente comenzar\u00e1n a <em>depender<\/em> de ellas para realizar su trabajo. Si las herramientas cambian de forma inesperada, esto afectar\u00e1 a los usuarios y les impedir\u00e1 trabajar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto en realidad, es un <em>buen<\/em> <em>problema<\/em> <em>que<\/em> <em>tener<\/em>; significa que las personas est\u00e1n extrayendo suficiente valor de sus herramientas para incorporarlas a sus flujos de trabajo. Las \u00fanicas herramientas que no tienen problemas de dependencia son aquellas que nadie utiliza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero las dependencias son un problema porque limitan la capacidad de cambiar y mejorar las herramientas: las actualizaciones pueden interrumpir los flujos de trabajo que actualmente dependen de las herramientas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como cualquier software, las herramientas internas deben cambiar y evolucionar a medida que se agregan m\u00e1s funciones. Sin embargo, cuanto m\u00e1s <em>acoplados<\/em> est\u00e9n los flujos de trabajo de los usuarios con sus herramientas, m\u00e1s dif\u00edcil ser\u00e1 agregar funciones y realizar los cambios necesarios para combatir la entrop\u00eda y la descomposici\u00f3n del software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debe limitar el acoplamiento entre usuarios y herramientas, de modo que cuando llegue el momento de agregar nuevas funciones y refactorizar, pueda hacerlo de forma segura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00e1s espec\u00edficamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Necesita pruebas de integraci\u00f3n exhaustivas para poder validar que la API orientada al usuario se mantenga estable a medida que agrega m\u00e1s funciones y realiza cambios. Sin pruebas de integraci\u00f3n, los mantenedores <em>nunca<\/em> tendr\u00e1n la confianza suficiente para realizar grandes cambios en el c\u00f3digo base, lo que provocar\u00e1 degradaci\u00f3n y deterioro del c\u00f3digo. Puntos extra si los agrega a los flujos de trabajo de CI\/CD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilice el control de versiones desde el principio. Para las bibliotecas, utilice <a href=\"https:\/\/semver.org\/\"><em>semver<\/em><\/a> (Control de Versiones Sem\u00e1nticas), que ayuda a los usuarios a elegir versiones espec\u00edficas de herramientas en las que confiar, de forma predecible. Para otros tipos de herramientas, aseg\u00farese de que los usuarios sepan con qu\u00e9 <em>versi\u00f3n<\/em> (v1, v2, etc.) de la herramienta est\u00e1n trabajando. Esto le permite a usted, el mantenedor de la herramienta, crear nuevas versiones mientras mantiene activas las antiguas.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En las bibliotecas, limite el uso de miembros p\u00fablicos como funciones y clases. En lenguajes din\u00e1micos como Python, los usuarios a\u00fan pueden llamar a miembros privados, pero son conscientes de que operan bajo su propio riesgo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Desacople la API P\u00fablica de la implementaci\u00f3n interna. Esto incluye la creaci\u00f3n de az\u00facar sint\u00e1ctico y estructuras de importaci\u00f3n m\u00e1s agradables para llamar a la funcionalidad <em>principal <\/em>de la herramienta. Esto le permite realizar los cambios necesarios en los componentes internos de la herramienta; Todo funcionar\u00e1 siempre que la API P\u00fablica se mantenga igual.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.hyrumslaw.com\/\">La ley de Hyrum<\/a> es una interpretaci\u00f3n extrema del problema de la dependencia; afirma que los clientes depender\u00e1n, no s\u00f3lo de la API p\u00fablica que expone su herramienta, sino de <em>cualquier comportamiento observable<\/em> que pueda inferirse o verse desde el exterior.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Seg\u00fan la ley de Hyrum, alguien depender\u00e1 de cada detalle p\u00fablico que pueda verse<\/em>\u2014<em>o inferirse<\/em>\u2014<em>desde el exterior a medida que aumente el n\u00famero de clientes.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Originalmente, la ley se refer\u00eda a las dependencias entre m\u00f3dulos de software, pero la analog\u00eda sigue siendo v\u00e1lida; es simplemente <em>imposible<\/em> garantizar que nunca habr\u00e1 cambios importantes a medida que actualice sus herramientas. Pero a\u00fan as\u00ed, hay mucho que nosotros, los mantenedores de herramientas, podemos hacer para reducir los riesgos manteniendo las APIs estables y al mismo tiempo asegur\u00e1ndonos de que la herramienta se actualice seg\u00fan sea necesario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pensamiento 80\/20<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las buenas herramientas no intentan abarcar el mundo. Logran un equilibrio entre cu\u00e1nta libertad y cu\u00e1ntas restricciones exponen a los usuarios: muy pocas restricciones hacen que las herramientas est\u00e9n demasiado desestructuradas y sean dif\u00edciles de usar; demasiados y los casos de uso avanzados quedar\u00e1n fuera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debe concentrarse en asegurarse de que el 80% de las tareas comunes <em>funcionen<\/em> de manera natural, intuitiva y eficiente. Pero tambi\u00e9n debe dejar espacio para los casos de uso avanzados \u2014 el 20% restante. Esto significa admitir cierto nivel de <em>personalizaci\u00f3n<\/em> para atender a usuarios avanzados que tendr\u00e1n casos de uso complejos y, a veces, poco ortodoxos que nunca antes hab\u00eda considerado.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Con una buena herramienta, el 80% de los casos de uso se hacen f\u00e1ciles, mientras que el 20% restante se hacen posibles.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Los usuarios siempre encontrar\u00e1n una manera de hacer su trabajo. Si no pueden adaptar su herramienta a su caso de uso, no la usar\u00e1n. Punto final. Es <em>su<\/em> trabajo como mantenedor de la herramienta escribir una herramienta que solo funcione para los casos de uso simples pero que a\u00fan pueda personalizarse para los avanzados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las herramientas de c\u00f3digo interno son de <em>c\u00f3digo abierto<\/em> dentro de la organizaci\u00f3n; por lo tanto, la primera forma de fomentar la personalizaci\u00f3n es seguir buenas pr\u00e1cticas de SE y escribir c\u00f3digo limpio, de modo que los usuarios puedan comprenderlo por s\u00ed mismos y, eventualmente, contribuir con Pull Requests (PR) a la base del c\u00f3digo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tres estrategias nos han resultado especialmente \u00fatiles:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La orientaci\u00f3n a objetos permite anular f\u00e1cilmente la funcionalidad predeterminada<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La programaci\u00f3n orientada a objetos no es adecuada para todos los casos de uso, pero funciona bien cuando se desea exponer componentes que los usuarios pueden ampliar si es necesario. Esto es a\u00fan m\u00e1s f\u00e1cil en lenguajes din\u00e1micos como Python (la lengua franca del mundo DS\/ML), donde puede ampliar las clases principales y anular el comportamiento predeterminado en <em>tiempo de ejecuci\u00f3n<\/em> simplemente agregando m\u00e9todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto ha resultado \u00fatil en m\u00faltiples ocasiones; muchos usuarios avanzados pueden codificar para lograr lo que quieran creando subclases ligeramente modificadas en su propio c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Valores predeterminados sensatos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La mayor\u00eda de las herramientas tienen opciones de configuraci\u00f3n; Puede ser un archivo de configuraci\u00f3n, pantallas de \u201cconfiguraci\u00f3n\u201d de una aplicaci\u00f3n o algo as\u00ed. Las opciones de configuraci\u00f3n permiten la personalizaci\u00f3n del usuario, por lo que definitivamente las necesita. Pero no desea que los usuarios tengan que establecer opciones de configuraci\u00f3n <em>para cada<\/em> tarea.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las opciones de configuraci\u00f3n deben tener <em>valores predeterminados sensatos<\/em> que se adapten a la mayor\u00eda de los casos \u2014 al tiempo que permitan la personalizaci\u00f3n cuando sea apropiado. Decidir <em>qu\u00e9<\/em> valores predeterminados usar requiere que comprenda a su usuario promedio y c\u00f3mo usa su herramienta. Desc\u00fabralos entrevistando y estudiando sus necesidades.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Facilidad de uso por encima de la elegancia del c\u00f3digo, siempre<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando necesite elegir entre facilidad de uso y <em>elegancia<\/em> del c\u00f3digo interno, favorezca la facilidad de uso \u2014 incluso a costa de cierta <em>deuda t\u00e9cnica<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es m\u00e1s dif\u00edcil recuperarse de la p\u00e9rdida de usuarios que de una p\u00e9rdida temporal de la calidad del c\u00f3digo, lo que deber\u00eda ser f\u00e1cil de solucionar<em> <\/em>si a\u00edsla el c\u00f3digo de uni\u00f3n <em>de cara al usuario <\/em>de las reglas comerciales centrales, como sugerimos en la secci\u00f3n Cuidado con las Dependencias desse blog post.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como vimos en la publicaci\u00f3n, hay muchas formas de evitar \u2014 o al menos mitigar \u2014 problemas al crear y mantener herramientas internas, especialmente para usuarios t\u00e9cnicos como cient\u00edficos de datos e ingenieros de aprendizaje autom\u00e1tico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tuvi\u00e9ramos que resumir las lecciones en un breve <em>TL;DR<\/em>, dir\u00edamos:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>(a) <\/strong>Trate las herramientas internas como productos y a los usuarios como clientes. Todo comienza aqu\u00ed;<\/li>\n\n\n\n<li><strong>(b) <\/strong>Comprenda los incentivos. Quiere optar por zanahorias, no por palos;<\/li>\n\n\n\n<li><strong>(c) <\/strong>Tenga formas de realizar un <em>seguimiento<\/em> de c\u00f3mo se utiliza su herramienta, tanto <em>impl\u00edcita<\/em> como <em>expl\u00edcitamente<\/em>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.<\/p>\n","protected":false},"author":178110136,"featured_media":28502,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2509,2508],"tags":[2510,2543,3169],"class_list":["post-28515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-analytics-es","category-data-science-machine-learning-es","tag-ciencia-de-los-datos","tag-machine-learning-es","tag-tools-es"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas - Building Nubank<\/title>\n<meta name=\"description\" content=\"Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Nubank\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-05T15:10:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-30T14:09:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1196\" \/>\n\t<meta property=\"og:image:height\" content=\"648\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Felipe Almeida - Machine Learning Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@queirozfcom\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felipe Almeida - Machine Learning Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/\"},\"author\":{\"name\":\"Felipe Almeida - Machine Learning Engineer\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\"},\"headline\":\"Creando y Manteniendo Herramientas Internas para Equipos de DS\\\/ML: Lecciones aprendidas\",\"datePublished\":\"2024-03-05T15:10:06+00:00\",\"dateModified\":\"2024-10-30T14:09:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/\"},\"wordCount\":4696,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1\",\"keywords\":[\"ciencia de los datos\",\"machine learning\",\"tools\"],\"articleSection\":[\"Data &amp; Analytics\",\"Data Science &amp; Machine Learning\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/\",\"url\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/\",\"name\":\"Creando y Manteniendo Herramientas Internas para Equipos de DS\\\/ML: Lecciones aprendidas - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1\",\"datePublished\":\"2024-03-05T15:10:06+00:00\",\"dateModified\":\"2024-10-30T14:09:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\"},\"description\":\"Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1\",\"width\":1196,\"height\":648},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nu.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creando y Manteniendo Herramientas Internas para Equipos de DS\\\/ML: Lecciones aprendidas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/building.nu.com\\\/es\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nu.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\",\"name\":\"Felipe Almeida - Machine Learning Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/building.nubank.com.br\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/avatar_user_178110136_1697720449-96x96.jpg\",\"url\":\"https:\\\/\\\/building.nubank.com.br\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/avatar_user_178110136_1697720449-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/building.nubank.com.br\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/avatar_user_178110136_1697720449-96x96.jpg\",\"caption\":\"Felipe Almeida - Machine Learning Engineer\"},\"description\":\"Felipe Almeida is responsible for engineering and managing Data Science &amp; Machine Learning projects at Nubank. He has a Bachelor's degree in Computer Science and a Master's degree in Computer Engineering, both from UFRJ. Felipe has experience working with e-commerce, credit and fraud. Before joining Nubank in 2019, he worked in companies such as Ita\u00fa-Unibanco and VTEX. In his spare time, he likes to exercise and learn foreign languages. He is active on twitter and he blogs at https:\\\/\\\/queirozf.com\",\"sameAs\":[\"http:\\\/\\\/queirozf.com\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/felipeqbalmeida\",\"https:\\\/\\\/x.com\\\/queirozfcom\"],\"url\":\"https:\\\/\\\/building.nu.com\\\/es\\\/author\\\/felipe-almeida-data-scientist\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas - Building Nubank","description":"Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/","og_locale":"es_ES","og_type":"article","og_title":"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas - Building Nubank","og_description":"Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.","og_url":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/","og_site_name":"Building Nubank","article_published_time":"2024-03-05T15:10:06+00:00","article_modified_time":"2024-10-30T14:09:40+00:00","og_image":[{"width":1196,"height":648,"url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","type":"image\/png"}],"author":"Felipe Almeida - Machine Learning Engineer","twitter_card":"summary_large_image","twitter_creator":"@queirozfcom","twitter_misc":{"Escrito por":"Felipe Almeida - Machine Learning Engineer","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#article","isPartOf":{"@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/"},"author":{"name":"Felipe Almeida - Machine Learning Engineer","@id":"https:\/\/building.nu.com\/es\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5"},"headline":"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas","datePublished":"2024-03-05T15:10:06+00:00","dateModified":"2024-10-30T14:09:40+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/"},"wordCount":4696,"commentCount":0,"image":{"@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","keywords":["ciencia de los datos","machine learning","tools"],"articleSection":["Data &amp; Analytics","Data Science &amp; Machine Learning"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/","url":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/","name":"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas - Building Nubank","isPartOf":{"@id":"https:\/\/building.nu.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#primaryimage"},"image":{"@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","datePublished":"2024-03-05T15:10:06+00:00","dateModified":"2024-10-30T14:09:40+00:00","author":{"@id":"https:\/\/building.nu.com\/es\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5"},"description":"Lecciones aprendidas sobre c\u00f3mo construir y mantener herramientas de fuente interna, con un enfoque en casos de uso de ciencia de datos y aprendizaje autom\u00e1tico.","breadcrumb":{"@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","contentUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","width":1196,"height":648},{"@type":"BreadcrumbList","@id":"https:\/\/building.nu.com\/es\/creando-y-manteniendo-herramientas-internas-para-equipos-de-ds-ml-lecciones-aprendidas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nu.com\/es\/"},{"@type":"ListItem","position":2,"name":"Creando y Manteniendo Herramientas Internas para Equipos de DS\/ML: Lecciones aprendidas"}]},{"@type":"WebSite","@id":"https:\/\/building.nu.com\/es\/#website","url":"https:\/\/building.nu.com\/es\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nu.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/building.nu.com\/es\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5","name":"Felipe Almeida - Machine Learning Engineer","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/10\/avatar_user_178110136_1697720449-96x96.jpg","url":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/10\/avatar_user_178110136_1697720449-96x96.jpg","contentUrl":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/10\/avatar_user_178110136_1697720449-96x96.jpg","caption":"Felipe Almeida - Machine Learning Engineer"},"description":"Felipe Almeida is responsible for engineering and managing Data Science &amp; Machine Learning projects at Nubank. He has a Bachelor's degree in Computer Science and a Master's degree in Computer Engineering, both from UFRJ. Felipe has experience working with e-commerce, credit and fraud. Before joining Nubank in 2019, he worked in companies such as Ita\u00fa-Unibanco and VTEX. In his spare time, he likes to exercise and learn foreign languages. He is active on twitter and he blogs at https:\/\/queirozf.com","sameAs":["http:\/\/queirozf.com\/","https:\/\/www.linkedin.com\/in\/felipeqbalmeida","https:\/\/x.com\/queirozfcom"],"url":"https:\/\/building.nu.com\/es\/author\/felipe-almeida-data-scientist\/"}]}},"jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-7pV","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","_links":{"self":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts\/28515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/users\/178110136"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/comments?post=28515"}],"version-history":[{"count":6,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts\/28515\/revisions"}],"predecessor-version":[{"id":30566,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts\/28515\/revisions\/30566"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/media\/28502"}],"wp:attachment":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/media?parent=28515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/categories?post=28515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/tags?post=28515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}