{"id":28512,"date":"2024-03-05T15:10:06","date_gmt":"2024-03-05T15:10:06","guid":{"rendered":"https:\/\/building.nubank.com\/building-and-maintaining-internal-tools-for-ds-ml-teams-lessons-learned\/"},"modified":"2024-10-30T14:04:19","modified_gmt":"2024-10-30T14:04:19","slug":"criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas","status":"publish","type":"post","link":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/","title":{"rendered":"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Contribui\u00e7\u00e3o: <a href=\"https:\/\/building.nubank.com\/author\/arthur-kamienski-data-scientist\/\">Arthur Kamienski<\/a>, <a href=\"https:\/\/building.nubank.com\/author\/caique-lima-data-scientist\/\">Caique Lima<\/a>, <a href=\"https:\/\/building.nubank.com\/author\/sarah-malaman\/\">Sarah Malaman<\/a>, <a href=\"https:\/\/building.nubank.com\/author\/vitor-pinheiro-data-scientist\/\">Vitor Pinheiro<\/a><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introdu\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Os profissionais de Ci\u00eancia de Dados (DS) e Aprendizado de M\u00e1quina (ML) usam muitas ferramentas, embora isso nem sempre seja imediatamente \u00f3bvio. Sempre que <em>importamos<\/em> uma biblioteca para um notebook do Python ou executamos comandos como <em>grep<\/em>, <em>find<\/em> e <em>sed<\/em> em sistemas UNIX e similares, estamos aproveitando uma ferramenta que outra pessoa programou.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas tamb\u00e9m podemos programar as <em>nossas pr\u00f3prias<\/em> ferramentas. As ferramentas geralmente surgem quando algu\u00e9m detecta uma funcionalidade repetida em v\u00e1rios produtos e projetos. O instinto natural do programador \u00e9 extrair o comportamento comum para um local separado, a fim de evitar a duplica\u00e7\u00e3o e facilitar futuras mudan\u00e7as. E \u00e9 assim que nasce uma biblioteca de software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O uso de ferramentas como bibliotecas (mas tamb\u00e9m de aplica\u00e7\u00f5es baseadas em interface de usu\u00e1rio, plataformas e aplica\u00e7\u00f5es de linha de comando) em <em>toda<\/em> a organiza\u00e7\u00e3o \u00e9 algo comum nas empresas de tecnologia modernas. Essa estrat\u00e9gia \u00e9 geralmente chamada de <strong><em>inner-sourcing<\/em><\/strong>. Embora ela ofere\u00e7a vantagens consider\u00e1veis, tamb\u00e9m traz desafios que devem ser cuidadosamente analisados.<\/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>A cria\u00e7\u00e3o de ferramentas de software para uso interno de toda a organiza\u00e7\u00e3o \u00e9 conhecida como <\/em><strong><em>inner-sourcing<\/em><\/strong><em> na m\u00eddia t\u00e9cnica<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Neste artigo, listaremos as li\u00e7\u00f5es que aprendemos ao longo dos anos, usando ferramentas internas no Nubank. Essas li\u00e7\u00f5es n\u00e3o s\u00e3o apenas sobre pontos t\u00e9cnicos, mas tamb\u00e9m quest\u00f5es subjetivas que devem ser consideradas para garantir o sucesso dessas ferramentas, tratando-as como <em>produtos<\/em> internos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse artigo foi escrito para equipes que criam e mant\u00eam as ferramentas internas usadas por outras equipes, <em>especialmente<\/em> aquelas feitas para os casos de uso de DS e ML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos come\u00e7ar resumindo os <em>porqu\u00eas<\/em> do desenvolvimento de ferramentas internas, com uma breve explica\u00e7\u00e3o sobre os tipos principais, e ent\u00e3o listaremos as li\u00e7\u00f5es que consideramos mais importantes, sem ordem espec\u00edfica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por que criar ferramentas internas?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00f3s criamos ferramentas porque elas nos tornam mais eficazes e eficientes. Isso \u00e9 verdadeiro no n\u00edvel individual e organizacional, pois h\u00e1 muitos fen\u00f4menos <em>emergentes<\/em> e n\u00e3o-lineares que s\u00f3 ocorrem quando alcan\u00e7amos uma certa escala.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">As ferramentas promovem a padroniza\u00e7\u00e3o&nbsp;<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se as equipes usam um conjunto de bibliotecas em comum, \u00e9 mais f\u00e1cil fazer mudan\u00e7as no \u00e2mbito de toda a empresa. Depois que uma nova vers\u00e3o da biblioteca \u00e9 fornecida e todas as equipes a atualizam, as mudan\u00e7as s\u00e3o aplicadas em toda parte. Geralmente, esse \u00e9 o caso com ferramentas de seguran\u00e7a e <em>logging<\/em>.<\/li>\n\n\n\n<li>Se todas as equipes usam o mesmo conjunto de ferramentas, as pessoas podem mudar de equipe e alcan\u00e7ar rapidamente a produtividade.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">As ferramentas aumentam o impacto das solu\u00e7\u00f5es locais<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As melhorias e otimiza\u00e7\u00f5es criadas por pequenas equipes (ou at\u00e9 indiv\u00edduos) podem ser rapidamente compartilhadas entre todos na empresa. Esse \u00e9 um enorme efeito amplificador, que fica maior conforme a pr\u00f3pria empresa cresce.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">As ferramentas codificam o conhecimento t\u00e1cito<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As ferramentas codificam um conhecimento que, de outra forma, ficaria espalhado entre v\u00e1rias equipes, ou ainda pior, viveria apenas tacitamente na cabe\u00e7a de algumas pessoas essenciais. Depois que elas saem da empresa, o conhecimento tamb\u00e9m \u00e9 perdido.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">As ferramentas reduzem o risco e os erros<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usar um conjunto em comum de bibliotecas\/fun\u00e7\u00f5es robustas e testadas \u00e9 muito menos arriscado do que exigir que cada equipe construa suas pr\u00f3prias vers\u00f5es.&nbsp;<\/li>\n\n\n\n<li>As ferramentas podem ser usadas para <em>impor<\/em> regras e princ\u00edpios a toda a empresa, incorporando-os no c\u00f3digo. Isso inclui recursos de controle de acesso e <em>logging<\/em>, por exemplo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">As ferramentas reduzem o TTM&nbsp;<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sem <em>analysis paralysis<\/em>: n\u00e3o \u00e9 necess\u00e1rio gastar tempo pesquisando qual \u00e9 a melhor forma de lidar com cada problema quando existe uma ferramenta padr\u00e3o criada para isso.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos de ferramentas internas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As ferramentas de software s\u00e3o s\u00f3 mais c\u00f3digo. Mas se olharmos mais de perto, existem tipos diferentes de ferramentas em rela\u00e7\u00e3o \u00e0 <em>interface<\/em> que elas oferecem aos usu\u00e1rios e os <em>recursos<\/em> que elas fornecem. Cada um deles tem um papel separado na organiza\u00e7\u00e3o de tecnologia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma distin\u00e7\u00e3o importante \u00e9 entre as ferramentas <em>t\u00e1ticas<\/em> e <em>estrat\u00e9gicas<\/em>: aquelas que s\u00e3o usadas por no m\u00e1ximo uma ou duas equipes e aquelas que podem ser compartilhadas com toda a empresa, possivelmente se tornando um ativo importante para a companhia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Temos os seguintes tipos principais: Aplicativos baseados em interface gr\u00e1ficae linha de comando, bibliotecas e plataformas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 f\u00e1cil ver a diferen\u00e7a entre aplicativos baseados em interface gr\u00e1ficae interface de linha de comando, mas isso n\u00e3o \u00e9 verdade em rela\u00e7\u00e3o a bibliotecas e plataformas: uma diferen\u00e7a importante \u00e9 que as plataformas geralmente exigem que o usu\u00e1rio fa\u00e7a uso <em>integral<\/em> dela. Normalmente, n\u00e3o \u00e9 poss\u00edvel escolher quais partes da plataforma voc\u00ea deseja usar. Ou voc\u00ea a usa <em>toda<\/em>, ou n\u00e3o usa. Compare isso com as bibliotecas: voc\u00ea pode usar v\u00e1rias bibliotecas ao mesmo tempo, combinando-as de v\u00e1rias formas, mas depois de escolher uma plataforma, voc\u00ea tem que continuar com ela.<\/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>As bibliotecas s\u00e3o cole\u00e7\u00f5es de software que permitem que voc\u00ea escolha o que quer usar. De forma geral, as plataformas s\u00e3o r\u00edgidas <\/em>\u2013<em> impondo decis\u00f5es de design que voc\u00ea n\u00e3o pode recusar.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Outra diferen\u00e7a \u00e9 que as plataformas geralmente s\u00e3o <em>r\u00edgidas<\/em>. Decis\u00f5es de design claras s\u00e3o feitas e voc\u00ea precisa aceit\u00e1-las, se escolher usar a plataforma. Por esse motivo, as plataformas s\u00e3o \u00f3timas para <em>impor<\/em> a padroniza\u00e7\u00e3o e as diretrizes da organiza\u00e7\u00e3o que devem ser seguidas por todas as equipes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agora que conclu\u00edmos a introdu\u00e7\u00e3o, vamos passar ao artigo em si.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">As ferramentas internas s\u00e3o produtos e devem ser gerenciadas como tal<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As ferramentas internas s\u00e3o <strong>produtos<\/strong> e devem ser gerenciadas como tal. \u00c9 necess\u00e1rio pensar nos usu\u00e1rios internos como <em>clientes<\/em>, o que \u00e0s vezes \u00e9 dif\u00edcil, devido \u00e0 proximidade e \u00e0 informalidade das opera\u00e7\u00f5es do dia a dia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seria ideal ter <strong>gerentes de produto<\/strong> dedicados, para entender e interagir com os usu\u00e1rios e definir prioridades conforme as necessidades deles. Se isso n\u00e3o for poss\u00edvel, deve haver pelo menos algumas pessoas com <em>habilidades<\/em><strong><em> <\/em><\/strong>de gerenciamento de produto na equipe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O m\u00ednimo que voc\u00ea precisa para <em>gerenciar<\/em><strong><em> <\/em><\/strong>um produto interno \u00e9 um plano de desenvolvimento claro, feedback estruturado dos usu\u00e1rios e um bom canal de suporte.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Roadmap<\/strong>: Um roadmap claro e <em>p\u00fablico<\/em>, com marcos, ajuda os usu\u00e1rios e a equipe de desenvolvimento a entender o que foi planejado e quais tarefas t\u00eam prioridade sobre as outras.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rotinas estruturadas de feedback: <\/strong>Voc\u00ea precisa <em>consultar<\/em> os usu\u00e1rios periodicamente para receber feedback positivo e negativo. Uma combina\u00e7\u00e3o de perguntas curtas e objetivas com um espa\u00e7o aberto para feedback geralmente funciona bem.<strong> <\/strong>O feedback an\u00f4nimo \u00e9 prefer\u00edvel para garantir que os clientes n\u00e3o deixem de fazer cr\u00edticas por causa da pol\u00edtica de escrit\u00f3rio. Deixe claro que <em>qualquer<\/em> feedback (especialmente cr\u00edticas construtivas) \u00e9 bem-vindo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Canais de suporte: <\/strong>No in\u00edcio, um canal do Slack pode servir, mas \u00e9 dif\u00edcil de escalar conforme o n\u00famero de usu\u00e1rios aumenta: logo voc\u00ea pode precisar de sistemas de bilhetagem ou acompanhamento de casos para lidar com a carga, o que permite que voc\u00ea quantifique e <em>me\u00e7a<\/em> o qu\u00e3o bom \u00e9 o suporte.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplos e uma boa documenta\u00e7\u00e3o ajudam a reduzir a necessidade de suporte 1:1. Al\u00e9m disso, certifique-se de que os usu\u00e1rios saibam como pesquisar no Slack para encontrar respostas a perguntas frequentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A divulga\u00e7\u00e3o \u00e9 essencial<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Geralmente, as pessoas n\u00e3o querem aprender a usar mais uma ferramenta, ainda mais se as vantagens n\u00e3o forem imediatamente claras. Devemos praticar ativamente a divulga\u00e7\u00e3o, promovendo a ferramenta para os usu\u00e1rios em potencial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em algumas inst\u00e2ncias, a ado\u00e7\u00e3o de uma ferramenta pode ser <em>obrigat\u00f3ria<\/em> por meio de abordagens impostas pela empresa, como incorpor\u00e1-la aos objetivos e resultados-chave (OKRs) ou outras estruturas de defini\u00e7\u00e3o de metas corporativas. Nesses cen\u00e1rios, provavelmente a divulga\u00e7\u00e3o n\u00e3o \u00e9 muito necess\u00e1ria. Mas esse n\u00e3o \u00e9 o nosso foco: preferimos criar ferramentas que os usu\u00e1rios <em>queiram<\/em> usar, porque entendem o valor delas, e n\u00e3o porque s\u00e3o <em>for\u00e7ados<\/em> a isso.<\/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>Uma boa ferramenta que &#8220;apenas funciona&#8221; e \u00e9 apreciada sempre precisar\u00e1 de menos marketing do que uma ferramenta detestada pelos usu\u00e1rios.&nbsp;<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Do ponto de vista dos clientes, usar uma nova ferramenta significa ter que <em>aprender<\/em> a us\u00e1-la e, talvez, mudar algum aspecto de seu trabalho.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso pode ser uma barreira importante, porque as pessoas geralmente resistem \u00e0 mudan\u00e7a, ainda mais quando isso envolve modificar um fluxo de trabalho que j\u00e1 conhecem bem e est\u00e3o acostumadas. V\u00e1rios fatores s\u00e3o importantes aqui: as percep\u00e7\u00f5es sobre a seguran\u00e7a no trabalho, quest\u00f5es de ego e ideias de perda de influ\u00eancia. As pessoas n\u00e3o gostam de abandonar algo que passaram 2 anos aprendendo, <em>ainda mais<\/em> se acharem que isso lhes traz <em>status<\/em> na empresa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na nossa experi\u00eancia, \u00e9 melhor <em>demonstrar valor primeiro<\/em>. Se voc\u00ea fizer isso corretamente, a decis\u00e3o de adotar a sua ferramenta ser\u00e1 \u00f3bvia e f\u00e1cil. Eis como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Projetos-piloto:<\/strong> A <em>pr\u00f3pria<\/em> equipe de desenvolvimento pode executar projetos iniciais usando a ferramenta para gerar as primeiras hist\u00f3rias de sucesso e incentivar a ado\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Canais de suporte:<\/strong> Acreditamos que cerca de 30% do sucesso de uma ferramenta vem de um bom suporte. Um canal dedicado do Slack para <em>assist\u00eancia<\/em> <em>imediata e sem julgamento<\/em> aumenta muito a disposi\u00e7\u00e3o dos usu\u00e1rios de interagir com a ferramenta.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Recursos acess\u00edveis:<\/strong> <a href=\"https:\/\/docs.google.com\/document\/d\/1Af9M795Tk6mYOYuCwT0k9d8bNtUDME68\/edit#heading=h.26in1rg\">Fornecer muitos exemplos<\/a> e manter um reposit\u00f3rio com c\u00f3digo-fonte claro e bem escrito ajuda os usu\u00e1rios a entender e usar facilmente a ferramenta. O canal de suporte (por exemplo, Slack) tamb\u00e9m serve como um reposit\u00f3rio <em>pesquis\u00e1vel<\/em> de solu\u00e7\u00f5es, facilitando ainda mais o aprendizado dos usu\u00e1rios.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Quantifica\u00e7\u00e3o de benef\u00edcios:<\/strong> Demonstrar o poss\u00edvel impacto da ferramenta em termos de economia de tempo e dinheiro ajuda a promover sua ado\u00e7\u00e3o de forma convincente. Use valores monet\u00e1rios e estimativas de tempo (como horas-homem economizadas) aproximadas para tornar o impacto mais concreto.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Logging, instrumenta\u00e7\u00e3o e feedback de usu\u00e1rios<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ao criar ferramentas internas, existe um risco real de <em>supor<\/em> que sabemos do que os nossos usu\u00e1rios precisam e como eles usam nossas ferramentas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em vez disso, use <em>dados<\/em>. Sem dados, o gerenciamento de produto \u00e9 reduzido \u00e0 tomada de decis\u00f5es baseadas em palpites, o que a transforma em um exerc\u00edcio puramente pol\u00edtico, em que a opini\u00e3o da pessoa com maior remunera\u00e7\u00e3o vence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Coletar informa\u00e7\u00f5es permite que a equipe de manuten\u00e7\u00e3o compreenda como os usu\u00e1rios utilizam a ferramenta. Isso ajuda a medir a satisfa\u00e7\u00e3o do cliente e a detectar \u00e1reas de foco para melhorias, tornando a manuten\u00e7\u00e3o mais eficaz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00f3s vemos duas formas principais de coletar informa\u00e7\u00f5es: <strong>impl\u00edcita<\/strong> e <strong>expl\u00edcita<\/strong>, respectivamente por meio de instrumenta\u00e7\u00e3o do sistema e pesquisas. Cada uma delas fornece insights a partir de um \u00e2ngulo diferente e ambas t\u00eam vantagens e desvantagens.<\/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>Duas formas de coletar dados de uso de ferramentas: <\/em><strong><em>impl\u00edcita<\/em><\/strong><em> (logs e instrumenta\u00e7\u00e3o) e <\/em><strong><em>expl\u00edcita<\/em><\/strong><em> (pesquisas com usu\u00e1rios)<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Colete dados <strong>implicitamente<\/strong> por meio de logs e instrumenta\u00e7\u00e3o. Toda linguagem de programa\u00e7\u00e3o suporta o registro em log, que pode ser visualizado em ferramentas como Splunk ou Grafana. A maior vantagem do feedback impl\u00edcito \u00e9 que ele \u00e9 imposs\u00edvel de falsificar \u2013 mas d\u00e1 trabalho para configurar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui est\u00e3o alguns exemplos de informa\u00e7\u00f5es que podem ser obtidas com logs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quantos clientes est\u00e3o usando a ferramenta ao longo do tempo?<\/li>\n\n\n\n<li>Quais funcionalidades ou componentes espec\u00edficos s\u00e3o mais usados?<\/li>\n\n\n\n<li>Mensagens de erro\/exce\u00e7\u00f5es;<\/li>\n\n\n\n<li>Detectar usu\u00e1rios que come\u00e7aram a usar a ferramenta mas eventualmente a <em>abandonaram<\/em>;<\/li>\n\n\n\n<li>Medir tempos de carregamento e resposta.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Por outro lado, as pesquisas com usu\u00e1rios s\u00e3o boas para obter feedback de forma <strong>expl\u00edcita<\/strong>, desde que os usu\u00e1rios se sintam confort\u00e1veis com isso. O maior risco \u00e9 que os clientes internos <em>evitem<\/em> dar um feedback honesto negativo, por medo de retalia\u00e7\u00e3o e da pol\u00edtica de escrit\u00f3rio. Para evitar isso, as pesquisas com usu\u00e1rio devem ser <em>an\u00f4nimas<\/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>As pesquisas com usu\u00e1rios devem ser an\u00f4nimas. As pessoas nunca ficar\u00e3o \u00e0 vontade para fornecer feedback negativo se acharem que os coment\u00e1rios poder\u00e3o prejudicar sua carreira na empresa.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Ao escolher pesquisas como Formul\u00e1rios do Google, considere o tempo dos seus clientes: Inclua o m\u00e1ximo poss\u00edvel em um <em>formul\u00e1rio<\/em> <em>curto<\/em>. As pessoas t\u00eam coisas melhores para fazer do que responder a uma pesquisa de 20 p\u00e1ginas sobre o seu produto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00ea prefer\u00eancia a perguntas com respostas classificadas numericamente (como a escala de Likert) para permitir compara\u00e7\u00f5es ao longo do tempo e que sejam t\u00e3o <em>espec\u00edficas<\/em> quanto poss\u00edvel: <em>&#8220;Em uma escala de 1 a 5, quanto voc\u00ea diria que a ferramenta X aumentou sua produtividade ao realizar a tarefa Y?&#8221;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por fim, lembre-se de incluir uma ou duas perguntas abertas para receber opini\u00f5es gerais e conselhos dos usu\u00e1rios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Os exemplos s\u00e3o o melhor tipo de documenta\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ter uma documenta\u00e7\u00e3o \u00e9 um requisito comum das ferramentas internas, especialmente quando voc\u00ea precisa atender usu\u00e1rios n\u00e3o t\u00e9cnicos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00e9m, custa muito caro criar e manter uma boa documenta\u00e7\u00e3o. Acrescentar recursos \u00e0s ferramentas sempre<em> <\/em>ter\u00e1 prioridade sobre a atualiza\u00e7\u00e3o dos documentos. Ent\u00e3o, a ferramenta evolui e a evolu\u00e7\u00e3o fica defasada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 comum que a documenta\u00e7\u00e3o fique ultrapassada com o tempo e sofra uma morte lenta, eventualmente chegando ao ponto em que ningu\u00e9m mais confia nela. \u00c0s vezes, ela se torna <em>abertamente<\/em> <em>enganosa<\/em>: instru\u00e7\u00f5es que n\u00e3o fazem mais sentido, refer\u00eancias a recursos que foram alterados, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m disso, ningu\u00e9m <em>quer<\/em> ler a documenta\u00e7\u00e3o. Os usu\u00e1rios querem <em>resolver as coisas<\/em> o mais r\u00e1pido poss\u00edvel. Geralmente, a forma mais r\u00e1pida \u00e9 ver exemplos e tentar descobrir como adapt\u00e1-los para o seu pr\u00f3prio caso de uso. Facilite a vida deles com um conjunto de <em>exemplos can\u00f4nicos<\/em> como parte da documenta\u00e7\u00e3o 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>Hoje em dia as pessoas t\u00eam uma capacidade de aten\u00e7\u00e3o reduzida e ningu\u00e9m tem tempo ou vontade de ler a documenta\u00e7\u00e3o para aprender como algo funciona, exceto como \u00faltimo recurso. Em vez disso, foque nos exemplos.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m dos benef\u00edcios acima, um bom conjunto de exemplos tamb\u00e9m ajuda a reduzir o esfor\u00e7o do suporte. Isso evita que as equipes de suporte tenham que lidar com perguntas que poderiam ser respondidas indicando um exemplo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os exemplos tamb\u00e9m podem servir como <em>&nbsp;testes de integra\u00e7\u00e3o <\/em>para as ferramentas, garantindo que os exemplos sejam sempre validados com as novas vers\u00f5es, como parte do seu fluxo de CI\/CD. Agora, a sua documenta\u00e7\u00e3o \u00e9 <em>test\u00e1vel<\/em>, o que \u00e9 o melhor de dois mundos, impedindo que ela fique desatualizada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por fim, os exemplos ajudam a impedir a propaga\u00e7\u00e3o de &#8220;m\u00e1s pr\u00e1ticas&#8221; entre a base de usu\u00e1rios. \u00c9 surpreendente quantos usu\u00e1rios copiam e colam o c\u00f3digo de outras pessoas para tentar fazer as coisas funcionarem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os exemplos s\u00e3o o melhor tipo de documenta\u00e7\u00e3o, <em>especialmente<\/em> para ferramentas internas que ser\u00e3o usadas por pessoal t\u00e9cnico, como profissionais de dados. Eles s\u00e3o mais f\u00e1ceis de <em>criar<\/em>, <em>validar<\/em> e <em>manter<\/em> do que o texto escrito. Eles est\u00e3o mais pr\u00f3ximos da origem (o c\u00f3digo-fonte) e s\u00e3o consumidos mais rapidamente. Os exemplos s\u00f3 ficam abaixo do pr\u00f3prio c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Manter a consist\u00eancia<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando algu\u00e9m usa uma ferramenta, ele precisa criar um <em>modelo mental<\/em> de como ela funciona. Um \u00fanico exemplo \u00e9 a configura\u00e7\u00e3o dos pedais em carros manuais.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As marcas de carro variam muito em rela\u00e7\u00e3o \u00e0s cores e tamanhos, e at\u00e9 o lado onde fica o volante, mas s\u00e3o <strong><em>consistentes <\/em><\/strong>em rela\u00e7\u00e3o \u00e0 configura\u00e7\u00e3o dos pedais: depois que voc\u00ea criou um modelo<em> <\/em>mental de como us\u00e1-los, voc\u00ea pode confiar no modelo independentemente do carro que estiver dirigindo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, imagine se cada marca de carro tivesse uma configura\u00e7\u00e3o de pedais diferente. Ao dirigir um novo carro, voc\u00ea n\u00e3o saberia o que esperar e precisaria criar um novo modelo mental, reaprendendo a dirigir.<\/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>Os carros diferem muito em rela\u00e7\u00e3o \u00e0s cores, estilos e tamanhos, mas s\u00e3o <\/em><strong><em>consistentes<\/em><\/strong><em> na configura\u00e7\u00e3o dos pedais: o modelo mental (embreagem, freio e acelerador) geralmente n\u00e3o varia.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">As ferramentas internas como bibliotecas e plataformas tamb\u00e9m s\u00e3o assim. Quanto mais <em>consistente<\/em> for uma ferramenta, usando os mesmos padr\u00f5es, nomenclatura, estrutura e conven\u00e7\u00f5es em todas as partes, mais r\u00e1pido os usu\u00e1rios poder\u00e3o criar um modelo mental, e mais <em>intuitiva<\/em> a ferramenta ser\u00e1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso ajuda a impedir erros, reduz a necessidade de suporte e, mais importante, reduz a <em>carga cognitiva<\/em> da sua ferramenta. Usar uma ferramenta consistente significa que depois de aprender a realizar uma tarefa espec\u00edfica, voc\u00ea ter\u00e1 aprendido todas elas, como acontece com os carros e a configura\u00e7\u00e3o dos pedais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todos n\u00f3s conhecemos ferramentas que parecem f\u00e1ceis e intuitivas, e aquelas que nunca nos lembramos de como usar (e precisamos procurar exemplos no Google constantemente). <em>Pandas<\/em> e <em>Matplotlib<\/em> s\u00e3o bons exemplos: embora sejam bibliotecas muito boas, h\u00e1 alguma inconsist\u00eancia nos nomes, na ordem dos argumentos e na sem\u00e2ntica das fun\u00e7\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma boa regra para seguir \u00e9 o <a href=\"https:\/\/www.linkedin.com\/pulse\/principle-least-surprise-incus-data-pty-ltd\/\"><em>princ\u00edpio da menor surpresa<\/em><\/a>, onde voc\u00ea, o mantenedor da ferramenta, sempre escolhe estruturar as coisas de uma forma que pare\u00e7a mais natural ou menos surpreendente para o usu\u00e1rio.<\/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>O princ\u00edpio da menor surpresa: no design de interfaces, sempre fa\u00e7a a coisa menos surpreendente.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">A maior vantagem da consist\u00eancia \u00e9 reduzir a carga mental dos usu\u00e1rios, mas descobrimos que isso ajuda at\u00e9 na capacidade de descoberta: os usu\u00e1rios s\u00e3o capazes de <em>explorar<\/em> melhor as suas ferramentas se as coisas tiverem nomes e estruturas consistentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui est\u00e3o algumas dicas pr\u00e1ticas sobre como alcan\u00e7ar a consist\u00eancia nas ferramentas internas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Convention_over_configuration\"><strong>Conven\u00e7\u00e3o antes da configura\u00e7\u00e3o<\/strong><\/a>: Popularizada pela estrutura Ruby on Rails, essa dica diz que as coisas precisam seguir <em>alguma <\/em>conven\u00e7\u00e3o por padr\u00e3o. Por exemplo, as classes devem ser nomeadas como FooBar (CamelCase) e a tabela correspondente no banco de dados deve se chamar foo_bar (snake case).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ordena\u00e7\u00e3o consistente de par\u00e2metros:<\/strong> Mantenha consistente a ordem dos argumentos das fun\u00e7\u00f5es! Se voc\u00ea tem v\u00e1rias fun\u00e7\u00f5es em que cada uma recebe um nome e um caminho_do_arquivo, fa\u00e7a isso de forma que a ordem de par\u00e2metros seja sempre a mesma! Por exemplo, nome ser\u00e1 <em>sempre<\/em> o primeiro argumento e caminho_do_arquivo ser\u00e1 sempre o segundo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Estrutura consistente:<\/strong> Se voc\u00ea estruturar uma biblioteca em pastas, certifique-se de que todas sigam os mesmos padr\u00f5es, por exemplo: pa\u00edses\/\u00e1reas de neg\u00f3cios\/grupos. Isso ajuda os usu\u00e1rios a encontrar as coisas com mais facilidade.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ordena\u00e7\u00e3o consistente:<\/strong> Ao listar qualquer coisa, <em>ordene<\/em> as coisas da mesma forma. Encontrar as coisas \u00e9 muito mais f\u00e1cil se voc\u00ea souber que elas est\u00e3o em ordem alfab\u00e9tica, por exemplo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use os mesmos nomes para as mesmas coisas<\/strong>: Se a sua ferramenta usa elementos visuais e voc\u00ea decidiu cham\u00e1-los de &#8220;elementos<em>&#8220;<\/em>, <em>sempre<\/em> os chame de &#8220;elementos&#8221;, no c\u00f3digo-fonte, na documenta\u00e7\u00e3o e em todos os lugares. N\u00e3o use &#8220;componentes visuais&#8221;, nem &#8220;widgets&#8221;. Usar nomes diferentes para as mesmas coisas (ou, inversamente, o mesmo nome para coisas diferentes) dificulta para os usu\u00e1rios a compreens\u00e3o de ferramentas complexas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Cuidado com as depend\u00eancias<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Conforme as pessoas come\u00e7am a usar as ferramentas que voc\u00ea cria, elas inevitavelmente come\u00e7ar\u00e3o a <em>depender<\/em> dessas ferramentas para fazer o trabalho. Se a ferramenta mudar de formas inesperadas, isso afetar\u00e1 os usu\u00e1rios e os impedir\u00e1 de trabalhar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na verdade, isso <em>\u00e9<\/em> <em>um<\/em> <em>problema<\/em> <em>positivo<\/em>, pois significa que as pessoas est\u00e3o extraindo valor suficiente das suas ferramentas para integr\u00e1-las em seus fluxos de trabalho. As \u00fanicas ferramentas sem problemas de depend\u00eancia s\u00e3o aquelas que ningu\u00e9m usa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas as depend\u00eancias s\u00e3o um problema porque limitam a capacidade de mudar e melhorar as ferramentas: as atualiza\u00e7\u00f5es podem atrapalhar os fluxos de trabalho que dependem atualmente das ferramentas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como qualquer software, as ferramentas internas precisam mudar e evoluir, conforme mais recursos s\u00e3o adicionados. Por\u00e9m, quanto mais forte o <em>acoplamento<\/em> que o usu\u00e1rio fizer entre a sua ferramentas e os fluxos de trabalho, mais dif\u00edcil ser\u00e1 adicionar recursos e fazer as altera\u00e7\u00f5es necess\u00e1rias para combater a entropia e a obsolesc\u00eancia do software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea precisa limitar o acoplamento entre os usu\u00e1rios e as ferramentas, para que quando chegar o momento de adicionar recursos e refatorar, seja poss\u00edvel fazer isso com seguran\u00e7a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais especificamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Voc\u00ea precisa de testes de integra\u00e7\u00e3o abrangentes para validar que a API voltada para o usu\u00e1rio continue est\u00e1vel conforme voc\u00ea adiciona recursos e faz altera\u00e7\u00f5es. Sem os testes de integra\u00e7\u00e3o, os mantenedores <em>jamais<\/em> ter\u00e3o confian\u00e7a suficiente para fazer grandes mudan\u00e7as na base de c\u00f3digo, o que leva \u00e0 degrada\u00e7\u00e3o e obsolesc\u00eancia do c\u00f3digo. Voc\u00ea tamb\u00e9m ganha pontos de b\u00f4nus se os adicionar aos seus fluxos de trabalho de CI\/CD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use o controle de vers\u00f5es desde o in\u00edcio. Para bibliotecas, use <a href=\"https:\/\/semver.org\/\"><em>semver<\/em><\/a> (controle de vers\u00e3o sem\u00e2ntico), que ajuda os usu\u00e1rios a escolher vers\u00f5es espec\u00edficas das ferramentas para usar de forma previs\u00edvel. Para outros tipos de ferramentas, certifique-se de que os usu\u00e1rios saibam com qual <em>vers\u00e3o<\/em> (v1, v2 etc.) da ferramenta est\u00e3o trabalhando. Isso permite que voc\u00ea, o mantenedor da ferramenta, crie novas vers\u00f5es, al\u00e9m de manter as antigas ainda ativas.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nas bibliotecas, limite o uso de elementos p\u00fablicos, como classes e fun\u00e7\u00f5es. Em linguagens din\u00e2micas, como Python, os usu\u00e1rios ainda s\u00e3o capazes de invocar elementos privados, mas sabem que est\u00e3o operando por sua pr\u00f3pria conta e risco.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Desacople a API p\u00fablica da implementa\u00e7\u00e3o interna. Isso inclui padronizar a sintaxe e criar estruturas melhores de importa\u00e7\u00e3o para invocar a funcionalidade <em>central<\/em> da ferramenta. Isso permite que voc\u00ea fa\u00e7a as mudan\u00e7as necess\u00e1rias nas partes internas da ferramenta, e tudo funcionar\u00e1 desde que a API p\u00fablica continue a mesma.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.hyrumslaw.com\/\">A Lei de Hyrum<\/a> \u00e9 uma interpreta\u00e7\u00e3o extrema do problema da depend\u00eancia. Ela define que os clientes depender\u00e3o n\u00e3o s\u00f3 da API p\u00fablica exposta pela sua ferramenta, mas tamb\u00e9m de <em>qualquer comportamento observ\u00e1vel<\/em> que possa ser inferido ou visto de fora.&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>De acordo com a Lei de Hyrum, cada detalhe p\u00fablico que possa ser visto <\/em>\u2013<em> ou inferido <\/em>\u2013<em> de fora eventualmente causar\u00e1 depend\u00eancia em algu\u00e9m, conforme o n\u00famero de clientes aumenta.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Inicialmente, a lei era sobre depend\u00eancias entre m\u00f3dulos de software, mas a analogia ainda \u00e9 v\u00e1lida. \u00c9 <em>imposs\u00edvel<\/em> garantir que nunca haver\u00e1 mudan\u00e7as disruptivas quando voc\u00ea atualiza as suas ferramentas. Ainda assim, h\u00e1 muitas coisas que n\u00f3s, mantenedores da ferramenta, podemos fazer para reduzir os riscos, mantendo as APIs est\u00e1veis e garantindo que a ferramenta seja atualizada sempre que necess\u00e1rio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O racioc\u00ednio 80\/20<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As boas ferramentas n\u00e3o tentam incluir o mundo todo. Elas t\u00eam um equil\u00edbrio entre quanta liberdade e quantos limites v\u00e3o expor aos usu\u00e1rios: se os limites forem poucos demais, as ferramentas ser\u00e3o muito desestruturadas e dif\u00edceis de usar. Se forem em excesso, os casos de uso avan\u00e7ados ficar\u00e3o de fora.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea deve se concentrar em garantir que os 80% de tarefas comuns <em>apenas funcionem<\/em> de forma natural, intuitiva e eficiente. Mas voc\u00ea tamb\u00e9m deve deixar espa\u00e7o para os casos de uso avan\u00e7ados: os 20% restantes. Isso significa suportar algum n\u00edvel de <em>personaliza\u00e7\u00e3o<\/em> a fim de atender usu\u00e1rios avan\u00e7ados, que \u00e0s vezes t\u00eam casos de uso complexos e incomuns que voc\u00ea nunca chegou a considerar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Com uma boa ferramenta, os 80% dos casos de uso s\u00e3o facilitados, enquanto os 20% restantes tornam-se poss\u00edveis.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os usu\u00e1rios sempre dar\u00e3o um jeito de fazer o trabalho. Se n\u00e3o puderem adaptar a sua ferramenta para o caso de uso deles, eles n\u00e3o v\u00e3o us\u00e1-la. Ponto final. Como mantenedor, \u00e9 <em>sua<\/em> responsabilidade criar uma ferramenta que apenas funcione para os casos de uso mais simples, mas que possa ser personalizada para os mais avan\u00e7ados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As ferramentas de aquisi\u00e7\u00e3o interna t\u00eam o <em>c\u00f3digo aberto<\/em> dentro da empresa. Portanto, a primeira forma de incentivar a personaliza\u00e7\u00e3o \u00e9 seguir boas pr\u00e1ticas de ES e criar c\u00f3digo limpo, para que os pr\u00f3prios usu\u00e1rios possam entend\u00ea-lo e contribuir com Pull Requests (PRs) para a base de c\u00f3digo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para n\u00f3s, tr\u00eas estrat\u00e9gias foram especialmente \u00fateis:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A orienta\u00e7\u00e3o a objetos permite a sobrescrita f\u00e1cil da funcionalidade padr\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A programa\u00e7\u00e3o orientada a objetos n\u00e3o \u00e9 adequada para todos os casos de uso, mas funciona bem quando voc\u00ea quer expor componentes que podem ser ampliados pelos usu\u00e1rios, se necess\u00e1rio. Isso \u00e9 ainda mais f\u00e1cil em linguagens din\u00e2micas, como o Python (a l\u00edngua franca do mundo de CD\/AM), em que voc\u00ea pode estender as classes centrais e sobrescrever (<em>override<\/em>) o comportamento padr\u00e3o durante o <em>tempo de execu\u00e7\u00e3o<\/em> apenas adicionando m\u00e9todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso j\u00e1 se mostrou \u00fatil em muitas ocasi\u00f5es. Muitos usu\u00e1rios avan\u00e7ados sabem programar, ent\u00e3o eles hackeiam uma forma de conseguir o que quiserem, criando subclasses levemente modificadas em seu pr\u00f3prio c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Padr\u00f5es sensatos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A maioria das ferramentas possui op\u00e7\u00f5es de configura\u00e7\u00e3o. Pode ser um arquivo &#8220;config&#8221;, uma tela de op\u00e7\u00f5es em um aplicativo ou algo assim. As op\u00e7\u00f5es de configura\u00e7\u00e3o permitem a personaliza\u00e7\u00e3o pelo usu\u00e1rio, ent\u00e3o voc\u00ea precisa delas. Mas n\u00e3o \u00e9 desej\u00e1vel que os usu\u00e1rios precisem configurar op\u00e7\u00f5es para <em>cada uma<\/em> das tarefas.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As op\u00e7\u00f5es de configura\u00e7\u00e3o devem ter <em>padr\u00f5es sensatos<\/em> que atendam \u00e0 maioria dos casos, mas tamb\u00e9m devem permitir a personaliza\u00e7\u00e3o quando isso for apropriado. Decidir <em>quais<\/em> valores padr\u00e3o devem ser usados exige que voc\u00ea compreenda o usu\u00e1rio m\u00e9dio e como ele usa a sua ferramenta. Descubra isso entrevistando-os e estudando as necessidades deles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Facilidade de uso antes da eleg\u00e2ncia do c\u00f3digo, sempre<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando voc\u00ea tiver que escolher entre a facilidade de uso e a <em>eleg\u00e2ncia<\/em> do c\u00f3digo interno, escolha a facilidade de uso, mesmo se isso causar uma <em>d\u00edvida t\u00e9cnica<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 mais dif\u00edcil se recuperar da perda de usu\u00e1rios do que da perda tempor\u00e1ria de qualidade no c\u00f3digo, que deve ser f\u00e1cil de corrigir<em> <\/em>se voc\u00ea isolar o <em>c\u00f3digo adaptador <\/em>das regras de neg\u00f3cios centrais, como sugerimos na se\u00e7\u00e3o Cuidado com as Depend\u00eancias desse blog post.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e1 muitas formas de evitar, ou ao menos minimizar, os problemas ao criar e manter ferramentas internas, especialmente para usu\u00e1rios t\u00e9cnicos como Cientistas de Dados e Engenheiros de Aprendizado de M\u00e1quina.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se tiv\u00e9ssemos que fazer o menor <em>resumo<\/em> dessas li\u00e7\u00f5es, dir\u00edamos:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>(a) <\/strong>Trate as ferramentas internas como produtos e os usu\u00e1rios como clientes. Tudo come\u00e7a aqui;<\/li>\n\n\n\n<li><strong>(b) <\/strong>Compreenda os incentivos. \u00c9 melhor usar a cenoura do que o chicote;<\/li>\n\n\n\n<li><strong>(c) <\/strong>Tenha formas de <em>rastrear<\/em> como a sua ferramenta est\u00e1 sendo usada, tanto <em>impl\u00edcita<\/em> quanto <em>explicitamente<\/em>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.<\/p>\n","protected":false},"author":178110136,"featured_media":28501,"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":[2503,2502],"tags":[2504,2540,3168],"class_list":["post-28512","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-analytics","category-data-science-machine-learning-pt-br","tag-ciencia-de-dados","tag-machine-learning-pt-br","tag-tools-pt-br"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas - Building Nubank<\/title>\n<meta name=\"description\" content=\"Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.\" \/>\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.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-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:04:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/building.nubank.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=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/\"},\"author\":{\"name\":\"Felipe Almeida - Machine Learning Engineer\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\"},\"headline\":\"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\\\/ML: Li\u00e7\u00f5es Aprendidas\",\"datePublished\":\"2024-03-05T15:10:06+00:00\",\"dateModified\":\"2024-10-30T14:04:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/\"},\"wordCount\":4719,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1\",\"keywords\":[\"ci\u00eancia de dados\",\"machine learning\",\"tools\"],\"articleSection\":[\"Data &amp; Analytics\",\"Data science &amp; Machine Learning\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/\",\"name\":\"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\\\/ML: Li\u00e7\u00f5es Aprendidas - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.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:04:19+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\"},\"description\":\"Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.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.nubank.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.nubank.com\\\/pt-br\\\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\\\/ML: Li\u00e7\u00f5es Aprendidas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\",\"name\":\"Felipe Almeida - Machine Learning Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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.nubank.com\\\/pt-br\\\/author\\\/felipe-almeida-data-scientist\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas - Building Nubank","description":"Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.","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.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/","og_locale":"pt_BR","og_type":"article","og_title":"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas - Building Nubank","og_description":"Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.","og_url":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/","og_site_name":"Building Nubank","article_published_time":"2024-03-05T15:10:06+00:00","article_modified_time":"2024-10-30T14:04:19+00:00","og_image":[{"width":1196,"height":648,"url":"https:\/\/i0.wp.com\/building.nubank.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","Est. tempo de leitura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#article","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/"},"author":{"name":"Felipe Almeida - Machine Learning Engineer","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5"},"headline":"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas","datePublished":"2024-03-05T15:10:06+00:00","dateModified":"2024-10-30T14:04:19+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/"},"wordCount":4719,"commentCount":0,"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-05-at-12.10.50.png?fit=1196%2C648&ssl=1","keywords":["ci\u00eancia de dados","machine learning","tools"],"articleSection":["Data &amp; Analytics","Data science &amp; Machine Learning"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/","url":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/","name":"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas - Building Nubank","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#primaryimage"},"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.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:04:19+00:00","author":{"@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5"},"description":"Li\u00e7\u00f5es aprendidas sobre como criar e manter ferramentas inner-sourced, com foco em casos de uso de ci\u00eancia de dados e aprendizado de m\u00e1quina.","breadcrumb":{"@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nubank.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.nubank.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.nubank.com\/pt-br\/criacao-e-manutencao-de-ferramentas-internas-para-equipes-de-ds-ml-licoes-aprendidas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nubank.com\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Cria\u00e7\u00e3o e Manuten\u00e7\u00e3o de Ferramentas Internas para Equipes de DS\/ML: Li\u00e7\u00f5es Aprendidas"}]},{"@type":"WebSite","@id":"https:\/\/building.nubank.com\/pt-br\/#website","url":"https:\/\/building.nubank.com\/pt-br\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nubank.com\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5","name":"Felipe Almeida - Machine Learning Engineer","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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.nubank.com\/pt-br\/author\/felipe-almeida-data-scientist\/"}]}},"jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-7pS","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nubank.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.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/28512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/users\/178110136"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/comments?post=28512"}],"version-history":[{"count":7,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/28512\/revisions"}],"predecessor-version":[{"id":30561,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/28512\/revisions\/30561"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media\/28501"}],"wp:attachment":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media?parent=28512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/categories?post=28512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/tags?post=28512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}