Engenheiros de software não são programadores – são muito mais

Os engenheiros de software não pensam em sua carreira apenas como escrever programas. Eles pensam em termos de satisfação de necessidades e resolução de problemas de maneira eficiente e escalável.

Ninguém pode negar o fato de que a ciência da computação se tornou um dos mais populares cursos universitários. De fato, nos últimos quatro anos, o número de diplomas em ciência da computação aumentou 92%! A rota típica após a faculdade para esses estudantes é encontrar um emprego como engenheiro de software. Surpreendentemente, mesmo com esse crescimento exponencial do interesse, os estudantes – e o resto do mundo – têm uma percepção equivocada do que o papel implica.

Desde o surgimento da indústria de tecnologia e do Vale do Silício, sempre houve uma crença de que “Engenheiro de Software” é um título inflado para programador. Na realidade, um engenheiro de software é muito mais.

Muitas pessoas de fora da indústria de tecnologia – e, surpreendentemente, muitas de dentro – veem o papel de um engenheiro de software como assumir uma tarefa do gerente de produto, sentado na frente de um computador e codificando o dia inteiro (também conhecido como macaco de código). Não me interpretem mal, não há nada de errado nisso. No entanto, a função de engenheiro de software envolve muito mais. Um verdadeiro engenheiro de software não é apenas um programador, mas também um gerente de produto, designer, arquiteto e cientista de dados.

Semelhanças com um gerente de produtos

Os gerentes de produto usam muitos chapéus, mas grande parte de seu papel é determinar os problemas de um produto, encontrar soluções para melhorar o produto e planejar um roteiro para essas soluções. Dado que os engenheiros de software são o ponto final da execução, sua perspectiva é extremamente importante e valiosa.

Priorização

Os engenheiros são a fonte da verdade ao determinar cronogramas e roteiros. Eles estão sempre mexendo com o produto no nível mais profundo ao codificar e testar, para entender o trabalho técnico necessário para novos recursos e quanto tempo eles podem levar. Portanto, os engenheiros devem se manifestar durante as reuniões de brainstorming e planejamento. Se a ideia de um colega de trabalho tende a ser extremamente difícil de construir e exige muito tempo, é responsabilidade do engenheiro trazer isso à tona e incentivar a equipe a analisar se vale a pena o tempo em relação ao impacto. Sem essa orientação dos engenheiros, é quase impossível priorizar efetivamente e criar uma linha do tempo precisa.

Gerenciamento de Projetos

Os gerentes de produto são responsáveis ​​pelo gerenciamento de ponta a ponta de novos recursos, incluindo o monitoramento do progresso em todas as equipes multifuncionais, como pesquisa, design, estratégia de conteúdo, jurídico e engenharia. Enquanto eles controlam o progresso geral entre as funções, os engenheiros são altamente responsáveis ​​por comunicar o progresso da implementação dos recursos que possuem. Exemplos de comunicação necessária incluem:

  1. Zombarias de recursos sendo construídos
  2. Tempo estimado de conclusão
  3. Quaisquer bloqueadores que impeçam a conclusão, como iterações de design ou conteúdo
  4. Configuração da experiência: qual o tamanho de um teste A / B que você está executando, quem é o público-alvo do teste, quais métricas estão sendo monitoradas
  5. Resultados de quaisquer experiências em execução e análise correspondente
  6. Lançamentos de recursos

The Inner Designer

Os designers são os melhores amigos dos usuários, pois estão sempre procurando a melhor experiência do usuário para novos recursos. A usabilidade é um requisito essencial para o sucesso de qualquer produto, e os engenheiros são o ponto de execução; portanto, sua atenção aos detalhes é muito importante.

Atenção aos detalhes

Os designers estão muito focados em obter a melhor experiência possível do usuário, como transições entre telas, espaçamento entre elementos e até cores e tamanhos de fonte. No entanto, existem alguns detalhes muito específicos, porém impactantes, que são descobertos apenas durante a fase de engenharia. Por exemplo, se houver um formulário de entrada que solicite aos usuários que insiram seu endereço de email, uma boa experiência do usuário permitiria que os usuários digitassem letras maiúsculas, permitindo que o código fosse traduzido para minúsculas. Além disso, adicionar validação ao endereço de e-mail para informar ao usuário desde o início se ele inseriu um endereço inválido, como um que está faltando um sinal “@”, seria útil. Podem parecer pequenos detalhes, mas sem eles, o usuário terá uma experiência pior quando precisar digitar novamente as informações depois de descobrir que tudo precisa estar em minúsculas.

Manutenção da base de código

O design não é apenas para produtos voltados para o cliente. Um engenheiro estará constantemente checando centenas de linhas de código na base de código de toda a empresa toda semana. Imagine ter mil engenheiros fazendo check-in de códigos codificados e repetidos com dependências em todo o lugar – seria uma bagunça enorme! Isso diminui o trabalho imensamente devido aos muitos erros criados quando os engenheiros tocam no código de seus colegas de trabalho sem atualizar todas as dependências relevantes.

Portanto, o design é especialmente importante ao escrever código sustentável. Isso inclui escrever componentes reutilizáveis ​​e classes extensíveis, reduzir o código repetido, evitar muitas dependências e melhorar a legibilidade do código. Sim, a legibilidade do código inclui os nomes que você fornece às suas variáveis! No entanto, a parte mais importante é ter uma boa cobertura de teste. Os testes impedirão que outros engenheiros quebrem seu código e o tornem mais lento para consertar tudo.

Planejando como um arquiteto

Antes de escrever uma linha de código, os engenheiros de software devem primeiro mapear as especificações técnicas que serão convertidas em código. Eles devem se perguntar:

  1. Quais são os requisitos técnicos desta tarefa?
  2. Que infraestrutura existente ou serviços de terceiros podem ser usados? Como posso integrar esses serviços?
  3. Quais compensações são aceitáveis ​​em termos de custo de recursos? Por exemplo, se estou trabalhando no aplicativo do YouTube, quantos vídeos devo armazenar em cache antes de ter que carregar mediante solicitação?
  4. Que segurança é necessária para evitar se tornar o próximo Equifax? Que privacidade o usuário deve receber? Quais informações devem ser criptografadas? Quantas tentativas um usuário deve digitar uma senha?

Estas são apenas algumas das muitas perguntas que precisam ser respondidas antes que qualquer código possa ser escrito. Um verdadeiro engenheiro de software gastará tempo coletando essas informações e encontrando a solução mais eficiente, escalável e segura.

Dados, Dados, Dados

É de extrema importância determinar se o lançamento do seu recurso é bem-sucedido e atende às expectativas, monitorando as métricas relevantes. Por exemplo, Robinhood, o aplicativo que permite investir dinheiro no mercado de ações sem taxas, entrou recentemente no espaço de criptomoedas. Como mencionado pelo CEO, Vlad Tenev, isso não resultará em nenhum lucro direto para eles, mas ele espera que isso incentive mais pessoas a ingressar na plataforma e se tornarem usuários ativos transferindo mais dinheiro para a plataforma. Para medir isso, Robinhood deve acompanhar o crescimento da base de usuários e dos investimentos por usuário que eles experimentam diretamente da oferta de investimento em criptografia, que requer trabalho dos engenheiros de software.

No software, as métricas são rastreadas por meio do registro de informações em um banco de dados. Essas informações podem ser qualquer coisa, como a localização de um clique ou o tempo gasto na plataforma. Os engenheiros de software devem planejar o registro apropriado necessário para determinar o impacto. Se esse registro estiver um pouco desligado, todo o experimento deverá ser reiniciado, atrasando o lançamento do recurso, o que nunca é bom em um setor que está sempre se movendo rapidamente.

Encerramento

A programação é apenas um aspecto da função de engenheiro de software. Os engenheiros devem estar envolvidos do começo ao fim para qualquer novo recurso. Portanto, não pense em engenharia de software como programação; pense nisso como fazer tudo e todo o possível para resolver problemas e satisfazer as necessidades dos clientes e da empresa de maneira eficiente e escalável.

por Kevin Shah

Engenheiro de software @ Facebook, CSE 2017 @ Universidade de Michigan