👷🏽♂️ Construindo o Gato GraphQL em Público #1 (março de 2021)
Bem-vindo à primeiríssima newsletter "Building in the Open"!
Este é um canal para compartilhar novidades sobre o desenvolvimento do Gato GraphQL com a comunidade, enviado na primeira semana de cada mês.
Por meio deste espaço, vamos conhecer tudo o que aconteceu durante o último mês, incluindo:
✅ No que estivemos trabalhando, quais novos recursos lançamos
✅ No que trabalharemos no próximo mês
✅ Volume de tráfego que recebemos no site
✅ Como foi o plugin: número de downloads, assinaturas da newsletter, estrelas no GitHub
✅ Progresso em direção à sustentabilidade financeira
✅ Guias recém-publicados
✅ Resumo dos nossos posts do blog publicados recentemente
✅ Divulgação / Menções do plugin
✅ Notícias gerais
Se você gosta desta newsletter, convide seus amigos a assinar.
Vamos começar!
Atenção: Esta newsletter é um canal de comunicação bidirecional. Se houver algo que você queira dizer, fique à vontade para adicionar um comentário (no final do post do blog).

No que estivemos programando
Se você observar os Guias, a seção "Extending Gato GraphQL" ainda está bem vazia:

Minha prioridade é completar esses guias. Mas antes de fazer isso, quero que o código do plugin seja o mais simples possível. Quanto mais simples, menos documentação é necessária, e mais qualquer pessoa consegue entendê-lo.
Com isso em mente, decidi refatorar o código para que ele seja totalmente baseado no componente DependencyInjection do Symfony.
A ideia é que qualquer extensão ao plugin (como um TypeResolver, FieldResolver ou DirectiveResolver personalizado) seja simplesmente definida como um serviço no container, e o serviço seja configurado automaticamente via Compiler passes.
Confiar totalmente na injeção de dependência do Symfony tem diversas vantagens:
✅ Existe uma única forma consistente de criar extensões
✅ Basta criar uma classe PHP implementando alguma interface para fazer todo o trabalho, e o desenvolvedor não precisa conhecer os detalhes técnicos mais complexos
✅ A documentação do Symfony é muito extensa. Ao direcionar os desenvolvedores para ela, essa é uma documentação que eu não preciso escrever
Interessado no código? Confira meus últimos PRs mergeados (#453, #452, #449 e vários outros).
Continuarei trabalhando neste código nas próximas semanas, até que a migração esteja 100% completa e eu consiga escrever os guias que estão faltando.
Tráfego para gatographql.com
Deixa eu ser claro sobre uma coisa: me importo com quantas pessoas visitam o site do plugin, como um indicador indireto de quantas pessoas conhecem o plugin.
Não tenho recursos financeiros para publicizar meu plugin. E mesmo que tivesse, não gastaria meu dinheiro promovendo-o, pois isso vai contra o espírito do open source. (Seria diferente se o open source fosse apenas um canal para vender algum produto ou serviço, mas esse não é o meu caso.)
Isso significa que me apoio totalmente no boca a boca para promovê-lo. Para isso, tenho dedicado muito esforço em escrever conteúdo de alta qualidade para o blog do plugin, esperando que esse conteúdo seja compartilhado, alcançando pessoas que de outra forma não saberiam sobre o plugin.
E até agora estou bastante satisfeito com os resultados.
Durante o mês passado, tive 4,5 mil visitantes, com 6 mil visualizações de página:

Vamos analisar essas estatísticas.
A maioria dos meus visitantes vem do Hacker News, onde consegui aparecer em algumas páginas iniciais com "Show HN", e do Reddit, principalmente de /r/PHP e /r/graphql (onde sempre compartilho meus artigos).
Consegui ficar em #1 no Google ao pesquisar "wordpress core graphql", e isso trouxe bastante tráfego. Infelizmente, foi algo pontual: depois de 24h desapareceu tão subitamente quanto chegou. Fora isso, em um dia típico recebo entre 3 e 10 visitantes do Google.
Twitter e Facebook trazem um volume considerável de tráfego, mas não sei de quem (não vem de mim, pois sou extremamente ruim em redes sociais). Eu compartilho meus artigos no Twitter, mas raramente são retuitados. E não uso 👎🏾 Facebook.
(Por falar nisso, para quem compartilha meus artigos nas redes sociais, obrigado ❤️)
Recebo um tráfego modesto mas consistente da listagem de servidores GraphQL em PHP no graphql.org, e de um artigo que publiquei no dev.to, que aparece em #1 quando se pesquisa no Google "graphql execute multiple queries".
Por fim, meus artigos aparecem consistentemente nas principais newsletters do WordPress (incluindo WP Owls, wpMail.me, Post Status, WP Builds e The WP Weekly). Não sei exatamente quanto tráfego cada uma traz, já que o referrer aparecerá como Gmail e similares. No entanto, consideradas em conjunto, essas newsletters produzem um número considerável de visitantes.
Meus posts do blog são de longe meu conteúdo mais popular, com os últimos três (este, este e este) trazendo mais de 1 mil visitantes cada.
Esses números parecem bem bons, ainda mais porque mal lancei o site há menos de 2 meses. No entanto, nem tudo são flores: com 88%, a taxa de rejeição é bastante alta. Preciso trabalhar nisso.
Métricas
O tráfego no site é apenas uma métrica decorativa, para estimar o conhecimento sobre o plugin. Mas muito mais importante é perguntar: quantas pessoas começaram a usar o plugin durante o último mês?

Durante o último mês, o plugin se saiu assim:
🎯 Número de downloads do plugin: 170
⭐️ Estrelas no GitHub: 27
O número de downloads pode ser obtido da API do GitHub, passando o parâmetro per_page=3 para incluir apenas os 3 releases criados durante o último mês:
curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/GatoGraphQL/GatoGraphQL/releases?per_page=3 | grep "download_count"Não estou nem feliz nem infeliz com esses números. Não são ótimos (e desejaria que fossem melhores), mas são um bom começo.
Quanto aos downloads, diz-se que conseguir o primeiro usuário é a tarefa mais difícil. Somente após algumas pessoas começarem a usar o plugin e falar sobre ele, seu uso se tornará mais difundido. Ainda estou nesta fase inicial de encontrar o primeiro grupo de usuários comprometidos.
Quanto às estrelas no GitHub, devo dizer que parece bem estável: cerca de 1 estrela por dia em média. Isso certamente não é nada extraordinário. Se você gosta do que estou construindo com o Gato GraphQL e não se importa em demonstrar um pouco de ❤️ carinho, então considere dar uma ⭐️ estrela no GitHub.
Sustentabilidade Financeira
Esta é a questão difícil: o projeto precisa ser financeiramente sustentável. Ou gera um pouco de dinheiro, ou não durará muito.

Se eu conseguir gerar uma renda para mim, posso continuar trabalhando nele pelo tempo que for necessário. É tudo que preciso: uma renda. Não investidores batendo na minha porta em busca de milhões. Apenas alguns milhares por mês, para pagar o teto acima da minha cabeça.
Meu objetivo é manter o plugin totalmente open source. Para isso, estou atualmente entrando em contato com alguns patrocinadores em potencial, perguntando se gostariam de ajudar a financiar o desenvolvimento do plugin. Será uma situação ganha-ganha.
Por que estou recorrendo a alguns patrocinadores "de peso", em vez de depender do patrocínio comum, de qualquer pessoa da comunidade?
Sim, estou tentando isso também: estou no GitHub Sponsors. No entanto, não funciona de verdade, a menos que você já tenha milhares de usuários, seguidores ou pessoas inscritas em sua lista de e-mails, para as quais você pode se dirigir esperando que muitas delas financiem você.
Por exemplo, pedindo um valor padrão de u$d 5 ou 10 por mês, eu precisaria de várias centenas de financiadores para essa abordagem custear meu trabalho. E estou longe dessa fase.
Mas ainda mais, quem pode realmente ter sucesso com essa abordagem? Sei que Caleb Porzio (criador do Livewire) conseguiu, e agora alcançou mais de 1350 patrocinadores! Mas isso é mais exceção do que regra.
Pense no Composer, por exemplo. O Composer mudou fundamentalmente a forma como desenvolvemos aplicações PHP, mas ele mal tem 90 patrocinadores. Como eu poderia esperar ter mais patrocinadores do que o Composer?
É por isso que minha abordagem atual é criar uma situação ganha-ganha para o meu projeto e as poucas empresas dispostas a patrocioná-lo. Tomara que funcione, e que o Gato GraphQL seja gratuito para todos, com todos os recursos, e que eu não precise colocar as coisas boas atrás de um paywall.
(Se você quiser saber como é uma situação ganha-ganha, me envie um e-mail ou um DM. Talvez sua empresa também possa estar interessada?)
Vou dar a essa abordagem alguns meses, com a esperança de conseguir. Se não tiver sucesso, só então precisarei considerar construir uma versão PRO do plugin e restringir alguns recursos para a versão paga. (Sim, seria uma pena, então espero poder evitar essa fase.)
Nas próximas newsletters, manterei vocês atualizados sobre se consegui patrocinadores ou não.
Posts do blog
Os posts do blog têm sido meu orgulho e alegria absolutos.
Atenção: Você sabia que existe um feed RSS no site? Você pode se inscrever para receber todos os meus posts do blog e lê-los no seu leitor favorito.
Durante o último mês, consegui publicar um post do blog de alta qualidade toda semana:
🛠 O WordPress deveria ter uma API GraphQL no core? defende que o WordPress poderia se beneficiar do GraphQL, já que a WP REST API recebeu uma nova funcionalidade no WordPress 5.6 (operações em lote), que uma API GraphQL pode oferecer nativamente.
🥊 Gato GraphQL vs WPGraphQL: o duelo! compara meu plugin com o WPGraphQL, em um confronto que será lembrado por gerações, e que deixará os fãs pedindo mais.
👶🏻 Rejuvenescendo o WordPress através do GraphQL demonstra como um WordPress headless pode ser desacoplado da base de código do WordPress, oferecendo a oportunidade de corrigir (ou, pelo menos, contornar) a dívida técnica acumulada.
🍾 O Gato GraphQL agora é scoped, graças ao PHP-Scoper! descreve uma estratégia para fazer o scoping de um plugin WordPress usando o PHP-Scoper, a fim de evitar conflitos com outros plugins.
Divulgação / Menções do plugin
Fico muito feliz que o plugin tenha sido destacado em alguns lugares.
✅ Dei a palestra "Intro to Gato GraphQL" no WordCamp India 2021, fazendo uma demo do plugin, e (surpreendentemente para uma demo) tudo saiu perfeito! Confira o vídeo no YouTube.
✅ Joe Howard me entrevistou para o podcast WPMRR. A gravação sairá em breve.
✅ Chris Coyier destacou meu plugin na newsletter do CSS-Tricks #239!

Um pouco de tudo
Algumas notícias gerais, sobre tudo o que aconteceu durante o último mês.
Jason Bahl vai para a WP Engine
Parabéns ao Jason por entrar na WP Engine! Espero que ele continue arrasando, como tem feito até agora com o WPGraphQL.
Por falar nisso, o fato de sermos concorrentes (bem, sou eu quem compete com ele, ele está muito à frente) não significa que não possamos ser amigos ou colaborar para melhorar os projetos um do outro. Na verdade, compartilhamos o mesmo objetivo: levar o GraphQL ao WordPress (mesmo que tenhamos ideias diferentes sobre como isso deve acontecer).
Mas acredito que a concorrência é boa e beneficiará a todos.

WP Engine lança o Atlas, e afirma saber tudo sobre headless (será mesmo?)
Também parabenizo a WP Engine por lançar o Atlas, sua nova solução WordPress headless.
Infelizmente, eles afirmam algumas informações imprecisas:
As empresas que utilizam uma solução inteiramente headless geralmente hospedam uma aplicação JavaScript separada para o front-end, que busca dados específicos do WordPress via APIs — a WordPress REST API ou o plugin WPGraphQL.
Quer dizer, o Gato GraphQL não existe, certo?

Normalmente não me incomodaria com isso, já que não espero que todos conheçam meu plugin. Mas acredito que eles conhecem meu projeto e parecem estar deliberadamente ignorando-o.
Depois que lançaram developers.wpengine.com (o "hub único para melhores práticas, tutoriais, blogs e documentação para WordPress headless"), entrei em contato com eles:
- Matt Landers, Developer Relations na WP Engine para WordPress headless, no Twitter
- A equipe de desenvolvimento deles, no repositório GitHub do framework headless
- Alguém do Torque (a revista de propriedade da WP Engine), via DMs com @TheTorqueMag.
Acho que não levaram meu projeto a sério. Ou talvez simplesmente não se importaram, já que estão totalmente investidos no WPGraphQL.
Agora, tudo bem se eles não quiserem mencionar meu plugin. No entanto, afirmar que a WP REST API e o WPGraphQL são as únicas duas opções é muito enganoso. Como consequência, meu plugin é prejudicado, e a comunidade de desenvolvedores fica confusa.
E então sim, devo admitir que estou irritado. Isso não é legal de forma alguma. Espero que eles corrijam suas informações imprecisas (já enviei um e-mail a eles).
Concluindo
Este foi o fim do primeiríssimo "Construindo o Gato GraphQL em Público".
O que você achou? Sinta-se à vontade para compartilhar seus pensamentos nos comentários.
Se você gostou, ficaria grato se pudesse compartilhar a newsletter com seus amigos (ou, melhor ainda, convidá-los a assinar).
Até o próximo mês!