Pular para o conteúdo

Além de hard e soft skills: o que separa um bom engenheiro

hardskills_softskills_developers | | Cheesecake Labs
Resumo
  • O artigo propõe um fluxo de oito passos para enxergar além da tarefa: entender e comprar a ideia, levantar critérios de aceite, abstrair e materializar, planejar e arquitetar, desenvolver com testes, revisar, aprovar e olhar o projeto inteiro.
  • Destaca atributos que conectam soft e hard skills no dia a dia: ser autêntico e criterioso com bibliotecas e frameworks, ser rigoroso com o que entrega, entender conceitos de gestão de projetos, controlar o tempo e adaptar-se com pensamento crítico.
  • Alerta contra achar que frameworks novos melhoram o código por si só, contra adotar biblioteca externa para cada feature simples e contra tratar cursos como algo além de didático.
  • Reforça que soft skills como resolução de problemas, visão sistêmica e adaptabilidade impactam tarefas diárias e entrevistas, e que a evolução vem de dar um passo pequeno por dia.

Olá, desenvolvedor, tudo bem? Alguém já te perguntou hoje como foi o seu dia? Para ser um engenheiro de software competente, você se vê diante de um oceano de habilidades exigidas pelo trabalho: cada empresa tem o seu stack, o seu jeito de trabalhar e a sua cultura. Em quais habilidades focar? Quais você precisa ter?

pilha de ofertas de emprego

De modo geral, as habilidades são divididas entre  “Hard Skills” e “Soft Skills” e a avaliação normalmente considera uma combinação das duas. Às vezes é difícil enxergar como as soft skills aparecem na prática, ainda mais quando o engenheiro não tem o hábito de prestar atenção nelas. Neste artigo, mostro alguns atributos, métodos e ferramentas que um engenheiro pode aplicar para conectar melhor soft e hard skills no dia a dia.

Enxergue além da tarefa

Cada atividade, cada tarefa e cada story de desenvolvimento estão inseridas em um contexto muito mais amplo. Elas não chegaram até você apenas para serem “codadas” e nunca mais vistas. Para ajudar a entender isso melhor, desenhei uma linha de raciocínio ideal em oito passos. Você pode tratá-la como um método ou como uma referência simples.

Entenda e compre a ideia
O primeiro passo deve ser sempre entender, mas, além disso, é fundamental que você concorde com a forma como a tarefa será desenvolvida. Desenvolver contra a própria vontade dificilmente traz um bom resultado.

Levante os critérios de aceite
Esse é um dos passos mais ignorados do desenvolvimento. Afinal, você já sabe o que fazer, então por que perder tempo escrevendo os critérios? A resposta é simples: como você garante que o seu entendimento é o mesmo dos outros stakeholders?

Abstraia e materialize
É normal fazer algumas modificações na ideia original ao transformá-la em código, por uma série de motivos: facilidade de entendimento, performance e viabilidade. Então, nesse passo, você resolve coisas como modelar os dados no banco, montar os modelos lógicos no código, definir como eles interagem e como inserir e consultar as informações que a aplicação exige.

Planeje e arquitete
Você provavelmente já ouviu que existe mais de um jeito de resolver o mesmo problema. Esse passo é o momento de escolher qual solução será aplicada e seguida. Documente, desenhe e compare soluções diferentes para chegar ao melhor resultado.

Desenvolva (código e testes)
Agora sim é hora de escrever código de verdade: siga os padrões de desenvolvimento, faça os testes necessários e aplique o seu conhecimento.

Revise e analise
Fazer code review é uma prática excelente, não só para aumentar a qualidade do código, mas também para compartilhar conhecimento com os colegas. Preste atenção em complexidade cognitiva e redundância, e envolva outras pessoas do time.

Aprove
Agora que está tudo certo, você precisa buscar a aprovação do PO ou do cliente. É muito importante corrigir e ajustar o que for necessário antes de considerar a tarefa concluída. Mesmo que nada te impeça de começar outra tarefa, tente deixar as tarefas aprovadas, ou melhor ainda, liberadas, e não acumule coisas esperando aprovação, porque isso pode virar um refactoring grande lá na frente.

Olhe o projeto inteiro
Tenha sempre em mente como está o backlog: o que já foi feito, o que ainda falta e qual é o prazo. É aqui que você avalia se o planejamento está indo como o previsto ou se precisa de ajuste.

fluxo de tarefas

Com esse fluxo em mente, fica mais fácil pensar nas características que um desenvolvedor precisa ter para entregar melhor.

Seja autêntico

Tecnologia é uma área em evolução constante, então as ferramentas que os programadores escolhem e o que se aprende ao longo da carreira pesam bastante. Bons engenheiros entendem o que é bom para eles e o que é bom para o projeto; não aceitam qualquer coisa, mas também não negam tudo; são criteriosos e conscientes das próprias escolhas. Ainda assim, alguns comportamentos aparecem com muita frequência e me chamam a atenção:

  • Achar que biblioteca e framework novos são responsáveis por um código melhor: estrutura de pastas, separação de responsabilidade e uso de Design Patterns são alguns dos itens que deveriam governar a qualidade do que você escreve. Eu uso bibliotecas e frameworks com critério, como ferramenta e não como ditador;
  • Biblioteca externa para cada feature simples: com uma comunidade open source cada dia mais forte, existem bibliotecas de sobra à disposição. Isso não quer dizer que você deva adaptar cada parte do seu código para encaixá-las. Legibilidade, escalabilidade do código e exposição a vulnerabilidades importam. Pese benefícios e ressalvas, e não deixe uma biblioteca guiar a estrutura do seu código. Usar uma biblioteca de terceiros não terceiriza a responsabilidade. Tenha clareza dos impactos que ela traz;
  • Curso é didático e só isso: muitas videoaulas e cursos disponíveis passam a impressão de que se desenvolve tudo de forma rápida e fácil com “novas tecnologias”, mas não esqueça que desenvolver é muito mais do que “digitar as palavras certas em um editor”, como foi dito no começo do artigo. Então, ao fazer um curso, aprenda o conteúdo, mas aprenda também a encaixá-lo no seu mundo, e não o contrário;

Seja rigoroso com o que você entrega

Muitos engenheiros não enxergam todas as bordas do que está sendo desenvolvido, e às vezes é preciso tentar sabotar o próprio trabalho para descobrir esses limites. Ao desenvolver, é comum considerar apenas os critérios de aceite levantados antes e esquecer de avaliar as formas diferentes com que um usuário pode interagir com a aplicação. Não pense só no caminho ideal, pense também em todos os caminhos alternativos que um usuário pode testar.

Tem quem argumente que isso seria trabalho do designer de UX/UI. Entregar um produto de altíssima qualidade é esforço de time. Ainda que requisitos e especificações iniciais sejam o guia principal da implementação, muitos detalhes só aparecem no caminho. Então preste atenção, tenha a cabeça aberta e seja rigoroso com o que entrega.

Entenda conceitos de gestão de projetos

Coordenar, planejar e executar um projeto é trabalho do gerente de projetos. Você deve estar pensando que um desenvolvedor não precisa nem se preocupar com isso, e você tem alguma razão, mas, mesmo que não seja a sua preocupação principal, você é corresponsável. É bem ingênuo não saber sequer o que um PM faz.

Na relação entre PMs e engenheiros, há momentos em que o engenheiro deve delegar funções ao PM e vice-versa. Só que como fazer isso sem saber o que a outra pessoa faz? Ou se ela está disponível para você? Pergunte. Ajude. Você também consegue apoiar o PM ou até delegar tarefas que ajudem o projeto.

Habilidades de gestão de release e de time aparecem dentro do seu código: nome de branch, formato de commit, fluxos de git e por aí vai. Saiba usar isso a seu favor.

Controle o seu tempo

Ao longo de anos de trabalho, percebi como é difícil controlar o tempo:  “preciso ignorar as pessoas para manter o foco e bater o prazo”, ou “nem vi o tempo passar”.

Tenha sempre em mente que você precisa dividir o seu tempo entre todos os passos do desenvolvimento, e não só o tempo de “escrever código”. Cada pessoa é diferente, então funciona melhor quando você encontra o seu próprio jeito, seja definindo metas, seja usando ferramentas de time tracking. Use a criatividade. Não concentre todo o seu tempo em uma coisa só, senão as outras vão virar os seus pontos fracos.

Adapte-se

A tecnologia evolui muito rápido. É impressionante o quanto o desenvolvimento de software mudou em tão pouco tempo, então vale aceitar que o jeito de trabalhar hoje pode não ser o jeito de trabalhar amanhã.

Mas tenha em mente que nem toda novidade vira o novo padrão. Tenha consciência das ferramentas que você escolhe para trabalhar, aplique pensamento crítico sobre prós e contras e evite escolher algo só porque é novo.

Se precisamos nos adaptar às ferramentas que escolhemos, por que não adaptar também o uso do que escolhemos? Aqui na Cheesecake Labs, por exemplo, queríamos seguir o gitflow junto com o rastreamento feito pelos smart-commits do Jira. Nesse caso, mudamos a forma de nomear as branches e também desenvolvemos uma ferramenta open source para ajudar a adicionar a informação do smart-commit de um jeito mais ágil. Isso não quer dizer que estejamos certos ou errados, nem que não sigamos as diretrizes do gitflow ou do smart-commit, mas sim que adaptamos à nossa realidade e ao que acreditamos para que aquilo funcione da melhor forma.

Dê um passo à frente

Todos os pontos acima são soft skills. Quis destacar como elas impactam diretamente as tarefas do dia a dia, e até as entrevistas, e como muitos engenheiros não levam isso em conta. Resolução de problemas, visão sistêmica, adaptabilidade, resiliência e paciência são as palavras que mais aparecem, mas nem sempre alguém explica o que elas significam na prática.

Fazer acontecer depende só de você. Evolução nunca é repentina. Para crescer, basta dar um passo pequeno por dia, e com o tempo você fica melhor. Dê sempre um passo à frente.

FAQ

Quais são os oito passos da linha de raciocínio proposta para tratar uma tarefa de desenvolvimento?

Entenda e compre a ideia; levante os critérios de aceite; abstraia e materialize; planeje e arquitete; desenvolva (código e testes); revise e analise; aprove; e olhe o projeto inteiro.

Por que levantar critérios de aceite é importante, mesmo quando o desenvolvedor já sabe o que fazer?

Porque é a forma de garantir que o seu entendimento é o mesmo dos outros stakeholders. Esse é apontado como um dos passos mais ignorados do desenvolvimento.

Quais comportamentos comuns o artigo destaca ao falar de autenticidade nas escolhas técnicas?

Achar que biblioteca e framework novos são responsáveis por um código melhor; usar biblioteca externa para cada feature simples; e tratar curso apenas como algo didático, sem aprender a encaixar o conteúdo na própria realidade. O artigo defende usar bibliotecas e frameworks com critério, como ferramenta e não como ditador.

Um desenvolvedor precisa entender conceitos de gestão de projetos?

Sim. Embora coordenar, planejar e executar um projeto seja trabalho do gerente de projetos, o desenvolvedor é corresponsável. Saber o que um PM faz permite delegar funções e receber delegações, apoiar o PM e usar habilidades de gestão de release e de time, como nome de branch, formato de commit e fluxos de git, a seu favor.

Como o artigo recomenda lidar com a evolução constante da tecnologia?

Aceitar que o jeito de trabalhar hoje pode não ser o de amanhã, mas lembrar que nem toda novidade vira o novo padrão. Deve-se ter consciência das ferramentas escolhidas, aplicar pensamento crítico sobre prós e contras, evitar escolher algo só porque é novo e adaptar o uso das ferramentas à própria realidade.