Google: Como a Engenharia de Software contribui para o sucesso da empresa.





  Há muitas razões para o sucesso do Google, incluindo liderança esclarecida, ótimas pessoas, um alto sarrafo para contratações e a força financeira que vem de aproveitar com sucesso uma vantagem inicial em um mercado em rápido crescimento. Mas uma dessas razões é que o Google desenvolveu excelentes práticas de engenharia de software, que o ajudaram a ter sucesso. Neste texto vamos apresentar de forma sucinta algumas das práticas de Engenharia de Software que ajudou a Google ser a gigante que ela é hoje.


Desenvolvimento de software


A maior parte do código do Google é armazenada em um único repositório de código-fonte unificado e é acessível a todos os engenheiros de software do Google. Existem algumas exceções notáveis, particularmente os dois grandes projetos de código aberto Chrome e Android, que usam repositórios separados de código aberto e alguns trechos de código de alto valor ou de segurança crítica para os quais o acesso de leitura é bloqueado.

Culturalmente, os engenheiros são incentivados a consertar qualquer coisa que vejam que esteja quebrada e saibam como consertar, independentemente dos limites do projeto. Isso capacita os engenheiros e leva a uma infraestrutura de maior qualidade.

Quase todo o desenvolvimento ocorre na “cabeça” do repositório, não nas ramificações. Isso ajuda a identificar problemas de integração antecipadamente e minimiza a quantidade de trabalho de mesclagem necessária. As alterações em uma subárvore podem ser feitas por qualquer pessoa no Google, não apenas pelos proprietários, mas devem ser aprovadas por um proprietário. Isso garante que cada mudança seja revisada por um engenheiro que entenda o software que está sendo modificado.

Os sistemas automatizados executam testes com frequência, geralmente após cada alteração em qualquer arquivo nas dependências transitivas do teste, embora isso nem sempre seja viável. Esses sistemas notificam automaticamente o autor e os revisores sobre qualquer alteração para a qual os testes falharam. O Google usa um sistema de compilação distribuído conhecido como Blaze, que é responsável por compilar e vincular software e por executar testes. Ele fornece comandos padrão para construir e testar softwares que funcionam em todo o repositório. Isto significa que normalmente é muito simples e rápido para qualquer engenheiro do Google criar e testar qualquer software no repositório. 


-----------------------------------------------------------------------------------------------------------------------------

Você já pensou como é trabalhar na Google? A Google é uma empresa que tem profissionais altamente capacitados. Para manter estes profissionais motivados, é necessário um ambiente que estimule o bem-estar e produtividade.


Como é trabalhar no Google?

-----------------------------------------------------------------------------------------------------------------------------

A implementação do sistema de compilação usa a infraestrutura de computação distribuída do Google. O trabalho de cada compilação é normalmente distribuído em centenas ou mesmo milhares de máquinas. Isso possibilita a construção rápida de programas extremamente grandes ou a execução de milhares de testes em paralelo.

Os resultados da compilação são armazenados em cache “na nuvem”. Isso inclui resultados intermediários. Se outra solicitação de compilação precisar dos mesmos resultados, o sistema de compilação os reutilizará automaticamente em vez de reconstruir, mesmo que a solicitação venha de um usuário diferente. Reconstruções incrementais são rápidas. O sistema de compilação permanece residente na memória para que, para reconstruções, ele possa analisar incrementalmente apenas os arquivos que foram alterados desde a última compilação.

O Google construiu excelentes ferramentas de revisão de código baseadas na web, integradas com e-mail, que permitem que os autores solicitem uma revisão e que os revisores visualizem diferenças lado a lado e comentem sobre elas. Quando o autor de uma alteração inicia uma revisão de código, os revisores são notificados por e-mail, com um link para a página da ferramenta de revisão da Web para essa alteração. Todas as alterações no repositório principal do código-fonte devem ser revisadas por pelo menos um outro engenheiro.

Um problema potencial com a revisão de código é que, se os revisores demorarem demais para responder ou estiverem muito relutantes em aprovar as alterações, isso poderá retardar o desenvolvimento. O fato de o autor do código escolher seus revisores ajuda a evitar esses problemas, permitindo que os engenheiros evitem revisores que possam ser excessivamente possessivos sobre seu código ou enviem revisões de alterações simples para revisores menos completos e enviem revisões de alterações mais complexas para mais experientes revisores ou a vários revisores.

Os engenheiros são incentivados a manter cada alteração individual pequena, com alterações maiores preferencialmente divididas em uma série de alterações menores que um revisor pode revisar facilmente de uma só vez.

O teste unitário é fortemente encorajado e amplamente praticado no Google​. Espera-se que todo o código usado na produção tenha testes de unidade, e a ferramenta de revisão de código destacará se os arquivos de origem forem adicionados sem os testes correspondentes.

O Google usa um sistema de rastreamento de bugs chamado Buganizer para rastrear problemas: bugs, solicitações de recursos, problemas de clientes e processos (como lançamentos ou esforços de limpeza). Os bugs são categorizados em componentes hierárquicos e cada componente pode ter um responsável padrão e uma lista de e-mail padrão para CC.

Os engenheiros de software do Google são fortemente encorajados a programar em uma das cinco linguagens de programação oficialmente aprovadas no Google: C++, Java, Python, Go ou JavaScript. Minimizar o número de linguagens de programação diferentes usadas reduz os obstáculos à reutilização de código e à colaboração do programador. Também existem guias de estilo do Google para cada idioma, para garantir que o código em toda a empresa seja escrito com estilo, layout, convenções de nomenclatura semelhantes, etc.


-----------------------------------------------------------------------------------------------------------------------------

Uma empresa que tem por premissa e valores, a velocidade, a a precisão, a facilidade de uso, serviço ao cliente corporativo e inovação. O que a gestão de pessoas tem a contribuir para a empresa ser um sucesso?  É o que veremos no próximo vídeo.



Qual o papel da gestão de pessoas nos resultados do Google?


-----------------------------------------------------------------------------------------------------------------------------


Os servidores do Google estão vinculados a bibliotecas que fornecem várias ferramentas para depurar servidores em execução. No caso de um travamento do servidor, um manipulador de sinal despejará automaticamente um rastreamento de pilha em um arquivo de log, além de salvar o arquivo principal.

O lançamento de qualquer mudança visível ao usuário ou mudança significativa no projeto requer aprovações de várias pessoas fora da equipe de engenharia principal que implementa a mudança. Em particular, aprovações são necessárias para garantir que o código esteja em conformidade com os requisitos legais, requisitos de privacidade, requisitos de segurança, requisitos de confiabilidade, requisitos de negócios, e assim por diante. O Google tem uma ferramenta interna de aprovação de lançamento que é usada para rastrear as revisões e aprovações necessárias. Essa ferramenta é facilmente personalizável, para que diferentes produtos ou áreas de produtos possam ter diferentes conjuntos de revisões e aprovações necessárias.

A maioria dos softwares do Google é reescrito a cada poucos anos. Isso pode parecer incrivelmente caro. De fato, consome uma grande fração dos recursos do Google. No entanto, também tem alguns benefícios cruciais que são fundamentais para a agilidade e o sucesso a longo prazo do Google.

    O software com alguns anos de idade foi projetado em torno de um conjunto de requisitos mais antigo e normalmente não é projetado de uma maneira ideal para os requisitos atuais. Além disso, normalmente acumulou muita complexidade. Reescrever o código elimina toda a complexidade acumulada desnecessária que estava abordando requisitos que não são mais tão importantes.


Gerenciamento de Projetos

    Os engenheiros podem gastar até 20% de seu tempo trabalhando em qualquer projeto de sua escolha, sem precisar da aprovação de seu gerente ou de qualquer outra pessoa. Essa confiança nos engenheiros é extremamente valiosa, por vários motivos. 

    Em primeiro lugar, permite que qualquer pessoa com uma boa ideia, mesmo que seja uma ideia que outros não reconheceriam imediatamente como valendo a pena, tenha tempo suficiente para desenvolver um protótipo, demonstração ou apresentação para mostrar o valor de sua ideia. Em segundo lugar, fornece ao gerenciamento visibilidade das atividades que, de outra forma, poderiam estar ocultas. Em outras empresas que não têm uma política oficial de conceder 20% de tempo, os engenheiros às vezes trabalham em projetos “skunkwork” sem informar a gerência. É muito melhor se os engenheiros puderem ser abertos sobre esses projetos, descrevendo seu trabalho nesses projetos em suas atualizações regulares de status, mesmo nos casos em que sua gerência não concorde com o valor do projeto. Em terceiro lugar, ao permitir que os engenheiros gastem uma pequena parte de seu tempo trabalhando em coisas mais divertidas, isso mantém os engenheiros motivados e empolgados com o que fazem, e evita que fiquem esgotados, o que pode acontecer facilmente se eles se sentirem compelidos a gastar 100% do tempo seu tempo trabalhando em tarefas mais tediosas.

    Indivíduos e equipes do Google precisam documentar explicitamente suas metas e avaliar seu progresso em relação a elas. As equipes definem objetivos trimestrais e anuais, com resultados-chave mensuráveis que mostram o progresso em direção a esses objetivos. Isso é feito em todos os níveis da empresa, indo até a definição de metas para toda a empresa. As metas para indivíduos e equipes pequenas devem estar alinhadas com as metas de nível superior para as equipes mais amplas das quais fazem parte e com as metas gerais da empresa.

    OKRs e pontuações de OKR normalmente são visíveis no Google (com exceções ocasionais para informações especialmente confidenciais, como projetos altamente confidenciais), mas não são usados diretamente como entrada para a avaliação de desempenho de um indivíduo.


Considerações Finais


        A Google tem diferentes razões para seu tamanho sucesso. Um mercado que tende ao monopólio e  ter sucesso inicial em um ambiente de estrategia do Oceano Azul é um dos motivos. Mas sabemos que isto não basta para se manter no topo, qualquer empresa para se manter precisa de resultados e isto é construído com profissionais altamente capacitados e práticas de desenvolvimento modernas.

    Neste artigo apresentamos um compilado das praticas de Engenharia de Software que são determinantes para o sucesso da Google. Podemos observar que para a maior parte das práticas de desenvolvimento a Google possui padronizações, manuais e softwares próprios que ajudam a organizar, facilitar e agilizar o processo de desenvolvimento. Adicionalmente, estas ferramentas conferem confiabilidade ao processo, como as ferramentas de testes e revisões.

Como já foi dito, a Google possui um amplo grau de padronização de seus processos, porém vale ressaltar que não existe um processo bem definido para aprovação e cancelamento de projetos, o que deixa a cargo dos gerentes de diferentes níveis. Outro fato curioso é que os desenvolvedores têm 20% do seu tempo para trabalhar no projeto que quiser, o que estimula a criatividade e evita que seus colaboradores fiquem desmotivados por trabalhar 100% do tempo em apenas um projeto. Neste modelo, é bem provável que uma ideia não aprovada previamente, saia do papel e depois se torne um software útil para a empresa.

Não podemos neglicenciar que todos os outros aspectos como boa remuneração, uma gestão de pessoas eficiente, façam parte deste sucesso. Porém, processos bem estruturados facilitam a vida do desenvolvedor, e por isto, entender estas práticas podem ser fundamental para qualquer empresa ou profissional que queira realizar uma gestão eficiente de uma empresa de tecnologia.


Leitura complementar:

Software Engineering at Google: Lessons Learned from Programming Over Time

Is Working At Google Really The Gold Standard For Software Engineers?


Referências 

HENDERSON, Fergus. Software engineering at Google. arXiv preprint arXiv:1702.01715, 2017.

Quora Contributor. Is Working At Google Really The Gold Standard For Software Engineers? Forbes. Publicado em: 31 de Julho de 2017. Disponível em: https://www.forbes.com/sites/quora/2017/07/31/is-working-at-google-really-the-gold-standard-for-software-engineers/?sh=285440312727 Acessado em 17 de maio de 2022.

Turma FGV Foz. Qual o papel da gestão de pessoas nos resultados do Google? Youtube, 12 de novembro de 20147 Disponível em: https://www.youtube.com/watch?v=Gg4GHGoqu3o. Acessado em 18 de maio de 2022.

Valor Econômico. Como é trabalhar no Google. Youtube, 3 de novembro de 2014. Disponível em: https://www.youtube.com/watch?v=Gg4GHGoqu3o. Acessado em 18 de maio de 2022.

WINTERS, Titus; MANSHRECK, Tom; WRIGHT, Hyrum. Software engineering at google: Lessons learned from programming over time. O'Reilly Media, 2020.



Comentários

Postagens mais visitadas deste blog

Sentimentos e Emoções na Engenharia de Software