15

Até onde uma biblioteca deve crescer antes de perder seu propósito?

Há algum tempo venho desenvolvendo uma biblioteca open source para ESP32 chamada ESP32-HTTP-Client.

Ela começou como um projeto pessoal para criar um cliente HTTP simples, leve e com baixo consumo de memória. Com o tempo, começaram a surgir issues, sugestões e pessoas utilizando o projeto.

Um dos momentos que mais me surpreendeu foi quando um post que fiz sobre a biblioteca no LinkedIn passou de 1.300 curtidas, recebi issues de alguns paises e feedbacks.

Para mim, isso foi muito legal, principalmente porque o projeto começou como uma forma de aprender.

E ele acabou se tornando algo ainda mais importante: uma maneira de sair um pouco da rotina de apenas entregar funcionalidades no trabalho e voltar a construir coisas porque quero entender como elas funcionam

Trabalhar com ESP32 também me força a pensar em coisas que muitas vezes ficam escondidas em aplicações tradicionais: memória, conexões, timeouts, headers, sockets e limitações de hardware

Mas agora eu estou em um dilema

A biblioteca tem um propósito bem definido: ser um cliente HTTP para ESP32.

Só que existem muitas funcionalidades que poderiam ser interessantes:

  • streaming;
  • cache HTTP;
  • upload/download;
  • Graphql;
  • Mqtt;
  • MCP;
  • WebSocket;
  • entre várias outras.

E aí comecei a me perguntar:

Até onde uma biblioteca deve crescer antes de perder seu propósito?

Não quero simplesmente adicionar funcionalidades porque parecem legais. Quero continuar evoluindo a biblioteca sem transformá-la em um projeto completamente diferente.

Então queria a opinião de vocês

E não precisa entender de ESP32, C++ ou baixo nível.

Na verdade, quero que vocês viajem nas ideias.

Se essa biblioteca fosse sua, o que você gostaria que ela fizesse?

Que funcionalidade você sentiria falta em um cliente HTTP?

E onde você colocaria o limite para ela continuar sendo, de fato, uma biblioteca HTTP?

Pode ser uma ideia simples, absurda ou tecnicamente difícil.

Talvez justamente uma sugestão que eu nunca teria pensado seja o que vai definir a próxima versão do projeto.

Quero ouvir vocês.

Github: https://github.com/PedroFnseca/esp32-http-client
Doc: https://esp32httpclient.com/ (Antes de dar uma sugestão, é legal ver o que já tem)

Carregando publicação patrocinada...
8

Só que existem muitas funcionalidades que poderiam ser interessantes

todas essas ao meu ver fogem do escopo original. acredito que se você fosse implementar qualquer uma deveria fazer bibliotecas adicionais e modulares, ex:

http-streaming, http-cache, http-mqtt, ...

assim quem quiser usar só o módulo base consegue, e quem precisar de adicionais tem o poder de customizar.

A questão é quanto tu quer se dedicar a manter tudo isso

3

Ao meu ver faz bastante sentido pensar nessa possibilidade, ainda mais por uma questão da pessoa conseguir tambem encontrar a biblioteca por termos chaves, aumentando o alcance.

Em questão de dedicação, só queria ter o orgulho de colocar uma lib com mais de 1k de projetos no mundo real no meu curriculo, ou até mesmo transformar em open source com pessoas ajudando

1

ou até mesmo transformar em open source com pessoas ajudando

Aqui eu considero como a nata do mundo de software, manter uma biblioteca sem o intuito de ter algum retorno, só pelo esporte.

O único detalhe é que eu considero essa uma abordagem de longo prazo, então só te recomendo expandir mais se tiver intenção de ficar 5, 10 anos mantendo ela.

6

Desde que comecei a usar Rust algum tempo atrás, notei um padrão em praticamente todos os projetos sérios: A arquitetura é levado muito a sério.

Projetos como Tokio, Hyper, Mio, Serde, dentre outros levam o design da crate (equivalente a uma "lib) muito a sério. Os mantedores não hesitam em fechar uma issue que pede uma feature fora do escopo. Se a demanda tá alta, criam uma crate específica para isso, que é o caso do Reqwest.

Reqwest é um client http em Rust pronto para uso. Rust é primordialmente uma linguagem de baixo nível, mas com Reqwest você consegue criar um servidor http (ou client) em minutos. Porém existe o Hyper que é uma biblioteca "low-level". O intuito do Hyper é prover ferramentas para você montar outras ferramentas HTTP. Muita gente pediu, ou tentou adicionar abstrações parecidas com o Reqwest, que não foram aceitas, preservado o propósito do projeto.

Detalhe: Reqwest e Hyper são dos mesmos mantedores.

O escopo do projeto é definido, e não foge disto. Fugiu disto? Melhor criar uma ferramenta nova específica para isso. Menos complexidade em código, menos gambiarra (glue) entre camadas, menos responsabilidades, menor build, menos latência, menos gerênciamento de memória, menos bugs, menos dor de cabeça, CI mais rápido... São tantos benfícios.

Em toda a minha vida a parte mais difícil nunca foi codificar, mas entender e criar arquiteturas escalavéis. Por isso gostaria de reforçar que, defina o escopo, para não virar "bagunça".

Uma vez que implementou uma feature que não faz sentido para o projeto, já era. Não se pode simplesmente remover isto. Pessoas criaram ferramentas usando versão "x" que contém esta versão. Remover isso é uma breaking change que exige uma manutenção absurda, fazendo usuários migrar para algo mais estavél e previsível. Um único commit errado já pode complicar a vida de milhares de pessoas, imagina uma feature inteira?

É muito importante considerar esses cenários, como escopo, escalabilidade, se faz sentido, e etc...

2

Valeu pelo comentário! Eu não tinha pensado por esse lado de descartar algo quando foge do propósito da biblioteca. Faz bastante sentido, talvez seja melhor focar em evoluir bem a estrutura atual, principalmente com benchmarks, performance e estabilidade. Obrigado pela visão

-5

Looking for a powerful video editing solution without premium restrictions? Filmora Mod APK is widely discussed by users who want access to advanced editing tools, premium effects, and creative features in one convenient platform.

2

Acho que o ponto principal é exatamente esse: manter o core simples e deixar funcionalidades mais específicas como módulos separados. Assim a biblioteca continua tendo um propósito claro sem limitar quem quiser expandir

1

Meus 2 cents,

Parabens pela iniciativa !

Sigo com os relatores @Pilati e @Programmer404: principio KISS na veia e features complementares como projetos separados, seja para uma manutencao mais simples, seja para manter o tamanho sob controle (ainda mais em um ambiente compacto como esp32).

Repositorio ja sido devidamente starreado e forkeado anteriormente e obrigado por compartilhar !

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS

1
1
1

Esse dilema é o clássico ponto de virada de qualquer projeto open-source que começa a ter tração. Parabéns pelo alcance da biblioteca!
No caso de sistemas embarcados como o ESP32, onde memória RAM e estabilidade de sockets são recursos escassos, o maior valor da sua biblioteca é justamente a promessa inicial: ser leve, simples e previsível.
Para não perder o propósito, uma boa regra arquitetural é separar o que é "evolução de transporte HTTP" do que são "outros protocolos/camadas":
1.O que pertence ao core: streaming de payload, timeouts bem tratados, suporte a chunked transfer e upload/download eficiente. Isso continua sendo estritamente HTTP.
2.O que NÃO pertence ao core: MQTT e WebSocket são protocolos de transporte completamente diferentes. Colocar MQTT dentro de um cliente HTTP quebra o Princípio da Responsabilidade Única (SRP) e incha o binário para quem só queria fazer um POST simples.
3.Camadas superiores: GraphQL e MCP rodam sobre HTTP. Em vez de embutir essas regras na biblioteca, o ideal é expor uma interface limpa para que outras bibliotecas possam usar o seu cliente como motor de transporte.
A melhor estratégia para manter o projeto respeitado a longo prazo é a Filosofia Unix: mantenha o core minimalista, afiado e focado em ser o melhor cliente HTTP para ESP32. Se quiser suportar outros protocolos no futuro, crie bibliotecas irmãs e modulares.
Quem escolhe uma biblioteca para microcontrolador prefere 10x uma ferramenta pequena que nunca quebra do que um canivete suíço pesado.