As opiniões expressas aqui são exclusivamente do autor. Se você discordar, deixe um comentário e deixe-nos saber sua opinião — respeitosamente, é claro. Suspeito que muita gente…

Esta é a primeira de uma série contínua de desenvolvedores expressando suas opiniões sobre vários tópicos no mundo da engenharia de software e ciência da computação. As opiniões expressas aqui são exclusivamente do autor. Se você discordar, deixe um comentário e deixe-nos saber sua opinião — respeitosamente, é claro.

Suspeito que muitas pessoas interpretarão este artigo como “gatekeeping”. Embora eu possa entender essa perspectiva, eu me esforcei para fornecer uma visão honesta que reflete minha experiência ao longo dos últimos anos (principalmente startups). Também quero negar explicitamente que me concentrarei em fullstack em um contexto de desenvolvimento web. Eu apoio totalmente a noção de um engenheiro fullstack que nunca escreveu uma linha de HTML ou CSS, eles simplesmente não são o foco deste artigo. Sem mais delongas:

 

Se há uma coisa que ninguém no ecossistema de desenvolvedores pode concordar, é o que constitui um engenheiro fullstack. Ao longo do último ano de me ensinar webdev, encontrei muitos mitos e aprendi muitas coisas sobre o desenvolvimento de fullstack.

 

O que é um Fullstack?

 

Vamos começar com uma definição genérica, definitivamente não controversa de um engenheiro fullstack:

 

“Individualmente responsável pela engenharia das características de ponta a ponta de um sistema. Desde a experiência inicial do usuário até o backend code executado em servidores distribuídos.”

 

Se você tem críticas sobre essa definição, bom. Isso porque a engenharia fullstack não é uma coisa real. Não há nenhum modelo científico que descreva o que é fullstack. Não há como medir se uma pessoa é mais um engenheiro fullstack do que outra pessoa. O único consenso em relação ao fullstack é que ninguém concorda o que é. Isto também deve deixar claro que qualquer outra coisa que você leu neste artigo é inerentemente opinião.

 

Por que Fullstack é tão romantizado?

 

Mesmo que não haja consenso sobre o que é um fullstack, todos parecem concordar que é algo que eles querem. Em sua defesa, a noção de fullstack é muito sedutora, e não tem nada a ver com programação. Fullstack é emocionante porque aborda um dos problemas mais inevitáveis ao construir coisas complexas:

 

“Não importa o quão bem você possa construir peças separadamente para algo, a sobrecarga da integração é quase sempre não-zero.”

 

Integração pode significar muitas coisas, mas no mínimo inclui a comunicação exigida pelos componentes para se encaixarem. Em teoria, um engenheiro fullstack reduz a sobrecarga de integração para quase 0, pois eles controlam os componentes separados e, portanto, só precisam se comunicar consigo mesmos. Embora a comunicação não seja o único aspecto da integração, na minha experiência, a comunicação tende a ser o gargalo. Com essa compreensão da engenharia fullstack, uma única pessoa pode potencialmente ser mais produtiva do que duas, três ou até mesmo quatro pessoas (assumindo que a sobrecarga de integração não é desprezível). Especialmente do ponto de vista empresarial, o potencial de pagar uma pessoa um pouco mais para fazer um trabalho que anteriormente levava quatro é cativante.

 

Opinião Popular

 

Eu queria criar um modelo simples para um engenheiro fullstack baseado na opinião popular (mais média). Depois de ler sobre muitas opiniões diferentes online, cheguei à seguinte definição generalizada de um engenheiro fullstack. Um engenheiro fullstack é qualquer engenheiro capaz de executar todo o processo de construção de uma experiência web completa. Criei um modelo abaixo, que formaliza minha interpretação da opinião popular:

 

Um engenheiro fullstack viável mínimo (MVFE):

 

Usa controle de versão

 

Conhece HTML

 

Conhece O CSS

 

Tem uma forte compreensão dos fundamentos da programação

 

É confortável com o desenvolvimento de frontend JavaScript (outras línguas são uma vantagem, js é inegociável)

 

Entende sistemas distribuídos

 

Conhece pelo menos uma língua primária backend (provavelmente NodeJS, PHP ou Java)

 

É qualificado com pelo menos um datastore/banco de dados

 

Essa definição imediatamente levanta algumas questões como:

 

Isso inclui testes?

 

Isso inclui design?

 

Isso inclui operações?

 

No início, pode parecer que essas habilidades não são necessárias para a vida diária como um engenheiro fullstack. Mas lembre-se, o valor do fullstack vem da redução esperada na sobrecarga de integração. Embora as operações não sejam as mesmas que o desenvolvimento, há uma área de superfície compartilhada onde os dois são obrigados a estar cientes um do outro. Um engenheiro fullstack pode ser capaz de passar sem entender a infraestrutura e a arquitetura em nuvem ao nível da equipe devops, mas se eles não podem falar uma linguagem comum, seu valor potencial começa a diminuir. Se ainda não está claro, essa noção vai muito além das operações. Inclui qualquer aspecto do sistema (ou processo do produto) pelo qual o engenheiro fullstack é responsável e que precisa ser integrado.

 

Onde a opinião popular fica aquém

 

É minha experiência que o MVFE acima é bastante incomum. O perfil descreve uma pessoa com habilidades que exigem milhares de horas para dominar, mas que não participa do processo holístico de tomada de decisão. Por natureza, o valor de um engenheiro fullstack decorre de sua capacidade de tomar decisões unilaterais competentes (decisões sem pedir permissão a ninguém). Tenho certeza que há pessoas que se encaixam principalmente no MVFE, mas aposto que eles são poucos e distantes entre si. Você provavelmente poderia resumir minha visão sobre o MVFE como:

 

É muito impraticável se tornar um engenheiro completo sem entender o quadro geral.

Na minha opinião, o valor de um engenheiro fullstack é principalmente derivado de sua capacidade de projetar sozinho, arquitetar, executar e operar todo um sistema de ponta a ponta. Supondo