Full-Stack Serverless
Tags: ptbr, serverless, aws, webdev
Published: 2019-09-03 11:15:01

_Um futuro próximo em que focaremos apenas em nosso produto - [Créditos da Imagem](https://unsplash.com/photos/LqKhnDzSF-8)_

# Créditos

- [Fullstack Serverless](https://dev.to/kkemple/fullstack-serverless-440e), escrito originalmente por [Kurtis Kemple](https://twitter.com/kurtiskemple)

## Como o cenário de desenvolvimento está mudando

Nos últimos anos, houve grandes mudanças no desenvolvimento de back-end e front-end. À medida que os clientes se tornam cada cheios de estados, os serviços que os apoiam se tornam mais magros e sem estado. A complexidade de gerenciar todos esses minúsculos serviços e funções está sendo abstraída, permitindo que aqueles que não possuem habilidades de devops aproveitem as tecnologias serverless. À medida que os clientes cresciam, também aumentava a complexidade do gerenciamento de estado e as interações com qualquer número de serviços de apoio ou APIs. Ferramentas e estruturas começaram a surgir, abstraindo isso do desenvolvedor, permitindo que eles se concentrassem na criação de produtos mais rapidamente.

Então, por que estou trazendo isso à tona? Porque sinto que toda essa mudança está culminando em uma nova maneira de criar aplicativos. Um que tira proveito das mudanças que vimos nos últimos anos, tanto no front-end quanto no back-end, e permite que os desenvolvedores criem aplicativos realmente interessantes sobre serviços prestados e em muito pouco tempo.

# Serviços em Serverless

No back-end, vimos o poder da computação se tornar uma mercadoria, desencadeando a evolução do servidor serverless. No entanto, se você já construiu algo de uma maneira verdadeiramente serverless, sabe que a escalabilidade e economia de custos que você obtém vêm com uma pilha enorme de complexidade.

Se você pensou que gerenciar micro-serviços era ruim, tente dividir todas as funções unicamente em seus próprios locais e colar elas de volta por meio de eventos. 😱

Embora serverless definitivamente tenha suas vantagens, não é para fingir de coração. Não é fácil acertar e geralmente exige meses de trabalho de uma equipe de desenvolvedores de back-end. [Ben Kehoe](https://read.acloud.guru/serverless-is-a-state-of-mind-717ef2088b42) aborda os "PORQUES do serverless" melhor do que eu poderia, visite o link no nome dele, mas é suficiente dizer que você escolheu serverless pelo valor de seu foco.

No final do dia, queremos criar valor rapidamente. Esperamos que não às custas de experiência e segurança do desenvolvedor, mas queremos escrever o mínimo de código possível para resolver um problema de negócios. Talvez nem mesmo uma linha...

Como aproveitar os benefícios do serverless sem precisar gerenciar essa nova complexidade? Bem, geralmente à medida que uma determinada tecnologia evolui, ela passa por uma mudança de complexidade. Embora o próprio serverless consista em funções lambda (_aws lambda_), configuração de tópicos (_aws sns_) e gerenciamento de eventos (_event-driven architecture_), houve algumas abstrações de nível superior criadas sobre ele que o tornam bastante amigável para aqueles que se consideram desenvolvedores de produtos ou front-end.

Por sua vez, isso trouxe [vários](https://medium.com/@dabit3/full-stack-development-in-the-era-of-serverless-computing-c1e49bba8580) produtos e [serviços em serverless](https://medium.com/@dabit3/full-stack-development-in-the-era-of-serverless-computing-c1e49bba8580) que tiram proveito da escalabilidade do serverless, mas abstraem isso para trás de um produto significativo que resolve um domínio de problema específico. Nader Dabit lista alguns ótimos exemplos de serviços prestados no link que eu vinculei anteriormente. Em seu artigo, ele diz:

> Alguns exemplos de serviços prestados incluem **Auth0** / **Amazon Cognito** (autenticação gerenciada), **Algolia** (pesquisa gerenciada), **Contentful** (infraestrutura de conteúdo), **AWS AppSync** / **Cloud Firestore** (serviços de API gerenciada), **Amazon Lex** / **Rekognition** / **Textract** (serviços de aprendizado de máquina) e **Cloudinary** (serviço gerenciado de hospedagem de imagens e vídeos). - _Nader Dabit, Full-Stack Development in the Era of Serverless Computing_

# Kits e Ferramentas de Interface do Usuário

No front-end, também vimos um grande aumento na complexidade, emprestando novamente as palavras de Nader Dabit, ele explica o que mudou, tornando as coisas muito mais complexas:

> Devido ao surgimento de SPAs, preocupações com dados mais complexos, vários destinos de dispositivos e expectativas crescentes de experiência do usuário, o desenvolvimento do lado do cliente se tornou mais complexo na última década. - _Nader Dabit, Full-Stack Development in the Era of Serverless Computing_

No entanto, com essa complexidade, surgiram algumas ferramentas e estruturas realmente surpreendentes. Essas abstrações facilitam o gerenciamento da nova complexidade, permitindo que os desenvolvedores se concentrem na criação de valor. A melhor parte é que não precisamos fazer isso à custa de coisas como acessibilidade e segurança. Nós integramos isso diretamente nas soluções.

É bastante justo dizer que essas ferramentas estão fornecendo foco. Eles permitem que você lide estritamente com problemas de negócios e lide com todos os problemas técnicos para você. Isso mostra as mesmas mudanças no back-end e na evolução da computação serverless.

Estruturas como [Expo](https://expo.io/), [Ionic](https://ionicframework.com/), [Gatsby](https://www.gatsbyjs.org/) e [Meteor](https://www.meteor.com/) estão possibilitando a criação de aplicativos prontos para produção e qualidade, com base em seus componentes.

# O melhor de dois mundos

O que estamos vendo agora são plataformas que abrangem o melhor dos dois mundos. Fornecendo soluções para todo o ciclo de vida de desenvolvimento de um aplicativo. Facilitando muito a criação de aplicativos completos que podem ser escalados sem questionar e custam menos do que criar sua própria infraestrutura e ferramentas serverless. Soluções como [Firebase](https://dev.to/kkemple/fullstack-serverless-440e), [Netlify](https://dev.to/kkemple/fullstack-serverless-440e), [Zeit](https://dev.to/kkemple/fullstack-serverless-440e) e [AWS Amplify](https://dev.to/kkemple/fullstack-serverless-440e) fornecem recursos de stack completa, como kits de ferramentas e APIs, armazenamento de dados, armazenamento de arquivos e serviços de build e deploy. Refiro-me a esses tipos de plataformas como `Full-Stack Serverless`. Eles fornecem conjuntos de recursos que geralmente abrangem desde ferramentas da linha de comando até serviços de back-end e tudo entre eles.

Recentemente, [fiz uma pesquisa no Twitter](https://twitter.com/kurtiskemple/status/1109126793938767872) onde perguntei: "Ao arquitetar um novo aplicativo, qual você considera a preocupação mais crucial na escolha de soluções?"

![](https://res.cloudinary.com/practicaldev/image/fetch/s--yp7F94aC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/zditbaqx5cvxye3gthbn.png)

O que não foi muito surpreendente é que a maioria das pessoas votou em "Manutenção e longevidade", com "Criando valor rapidamente" em segundo lugar. Não é surpreendente ver a manutenção e a longevidade no topo, porque quando você é responsável por seu próprio servidor ou garante que seu aplicativo seja seguro e com bom desempenho, há muito código de problema técnico extra. Código que resolve problemas de tecnologia e não problemas de negócios.

É por isso que sinto que o futuro é aquele em que não lidamos com manutenção e longevidade de serviços ou aplicativos, porque delegamos essa responsabilidade para serviços prestados. Com isso, vamos focar na criação de produtos que levem à criação de valor rapidamente.

Na enquete, a experiência do desenvolvedor veio logo atrás de agregar valor, o que é interessante, porque eu sinto que, para que as soluções operem nesse espaço, a experiência do desenvolvedor é tudo. Muitas pessoas temem ficar presas aos fornecedores (_vendor lock in_)... ao menos que o que eles estejam usando forneça uma experiência tão agradável para o desenvolvedor que eles confiam em que você obtenha o que precisam e de fato se preocupam com o sucesso deles.

Quando você escolhe um fornecedor, é porque sente que a plataforma está aumentando sua produtividade o suficiente para que não faça sentido não usá-la. Você é quem busca criar valor rapidamente e se concentra na criação de seu aplicativo, não na infraestrutura. Esse é o balde em que eu caio, é por isso que estou sempre entusiasmado com soluções como Gatsby e Expo, quero criar produtos imediatamente e saber que o resto é tratado por mim, agora você está me dizendo que não preciso mais me preocupar eu mesmo escolhendo como manipular dados, autenticação, usuários e conteúdo. Eu. To. Dentro.

Acho que anteriormente havia sempre uma preocupação com a forma de escalar essas soluções, o que dificultava a compra desses fornecedores de stack completa, mas com o movimento serverless, vejo essa ideia como algo muito mais acessível. Acho que estamos nos estágios iniciais desta nova era de plataformas com stack completa serverless e estou muito animado para ver para onde as coisas vão.

---