terça-feira, 18 de outubro de 2011

Plataforma, coma sua própria ração.

Steve Yegge, um desenvolvedor do google que trabalhou na amazon, compartilhou internamente um texto que era mais um desabafo, para nossa alegria, vazou na interwebz.

Versão TL;DR (Too Long, Didn't Read).

Steve conta como o Google não entende plataforma, que vc deve criar plataformas e comer de sua própria ração, ou seja, construir uma plataforma e com ela fazer o seu produto, com isso oferecendo a chance de desenvolvedores externos aprimorarem a experiência e a funcionalidade do seu produto.

"Resumo" traduzido do texto:

Neste texto Steve repassa os seus anos de amazon e como era digamos "sujo" o ambiente deles, inclusive a sua cultura que dava risada de quem se preocupasse com a comunidade e coisas do tipo. Ele enumera várias coisas que a google faz de melhor que a amazon e muitas outras companias, porém, existem 3 coisas que a amazon faz melhor que o google.

Destas 3 coisas, a mais importante é plataforma. O líder da amazon, Jeff Bezos, um dia baixou um decreto mais ou menos assim:

1) Todos os times devem expor seus dados e funcionalidades através de serviços.
2) Times devem comunicar-se através desses serviços
3) Não haverá qualquer outra forma de comunicação entre processos permitida: link direto, leitura direta da base de dados de outro time, memória compartilhada ou qualquer outro backdoor. A única forma de comunicação permitida é via serviços de chamada remota.
4) Não importa qual tecnologia seja usada. HTTP, Corba, Pubsub, protocolos próprios -- não importa. (Bezos não liga)
5) Todas os serviços, sem exceção, devem ser desenhados desde o início para serem externalizados. Isto é, o time precisa planejar e desenhar de forma que seja possível expor seu serviço para desenvolvedores de fora. Sem exceções.
6) Qualquer um que não fizer isto, será demitido.
7) Obrigado e tenha um bom dia.

O item 7 foi claro uma brincadeira, segundo Steve, Bezos não liga se você terá um bom dia, ele chegava ao ponto de dizer que as pessoas deveriam pagar pra trabalhar na amazon.

Já o item 6 foi verdadeira, Bezos contratou um carrasco para supervisionar os times pessoalmente e garantir que tudo seria cumprido.

Através dos tempos, a amazon se transformou internamente em uma arquitetura orientada a serviços, SOA. Porém, com a escala da amazon, diversos problemas ocorreram. Tickets de suporte demoravam mais para serem investigados, já que passavam por uns 20 serviços diferentes. O seu time vizinho se transforma em um potencial risco de causar um ataque de DOS, então limites de consumo eram levados muito a sério.

Com isto a amazon ganhou a cultura de pensar tudo em forma de serviço, e tendo desenvolvido tantos serviços, levaram a bons padrões como documentação e serviços de descoberta de serviços.

Naturalmente, a amazon passou de uma vendedora de livros para ter uma infraestrutura que poderia vender serviços de computação, sendo a mais famosa a Elastic Cloud Computing (EC2), a cloud da amazon. Serviços estes que você pode conferir em http://aws.amazon.com/.

E esta, é a coisa que o google não faz, desenvolver plataformas. Então Steve conta como poucos dentro do google entendem oque é plataforma, e como isto é uma das últimas prioridades da empresa. Ele conta que a mentalidade é de produzir produtos, e que serviços precários são feitos para consumir os dados. Ele segue dizendo, produto sem plataforma é inútil, ou melhor, um produto sem plataforma será sempre superado por outro com plataforma e dá um exemplo. Gloogle+ é o principal exemplo de como o google desde os mais altos níveis executivos até os desenvolvedores na ponta não entendem plataforma. A regra de ouro de plataformas é "Coma sua própria ração". Google+ tem uma api apática e quando foi lançado nem tinha uma.

Segundo Steve, Microsoft conhece a regra da ração a mais de 20 anos, por toda uma geração eles sabem que você não pode comer comida e dar ração para os seus desenvolvedores. Isto significa ter sucesso a curto prazo sacrificando o valor da sua plataforma, e pensamento de longo prazo é tudo para plataformas.

Ele conta como Google+ é uma tentativa de prever o que as pessoas querem, desenvolver tudo e entregar. "Acho que Facebook fez sucesso devido os jogos, vamos contratar alguém pra fazer alguns jogos para nós", percebe o erro deste pensamento? Apenas alguns poucos gênios conseguem prever o que as pessoas querem, Steve Jobs era um deles, nós (google) não temos um.

Bezos, percebeu como ele também não tinha um Steve Jobs, mas bastava ele ter uma plataforma que outros desenvolvedores fariam isto acontecer automáticamente.

Ele conta como a Microsoft entende o que é plataforma, e como isto é impressionante já que a microsofot não entende mais nada. Porém ao dar uma olhada em http://msdn.com/ você pode conferir como é gigante a plataforma deles, como existem milhares de chamadas de api, é até grande demais já que eles não conseguem desenhar nada.

A Apple também entende oque é plataforma, obviamente. Eles fizeram escolhas bastante fechadas, principalmente em sua plataforma mobile, mas eles entendem a importância de ter desenvolvedores externos e comem de sua própria ração, que aliás é de excelente qualidade, sua API é muito mais limpa que a da Microsoft e tem sido desde sempre.

Mas o que fez ele escrever este grande desabafo, foi como o Facebook entende o que é plataforma, e como ele escreveu este desabafo na torcida para que o google supere isso tudo.

Ele conta como alguns grupos dentro da empresa lutam para conseguir implementar plataformas num ambiente inóspito a plataformas e que os que entendem são minorias como o time de maps e docs.

Ironicamente, Wave era uma excelente plataforma, que descanse em paz, porém uma plataforma sem uma app matadora, não terá sucesso. Facebook é uma app matadora para a plataforma Facebook, e não ache que ela sozinha teria tanto sucesso sem a plataforma do Facebook.

Microsoft nasceu fazendo plataformas.

Amazon começou como produto, porém uma força externa obrigou Bazos a mudar, esta força sendo os lucros minguando. Então ele olhou aquele bando de engenheiros e um parque computacional imenso e pensou, como eu monetizo tudo isso? Dai você vê de onde veio a idéia do AWS (Amazon Web Services).

Facebook também deve ter nascido como produto, e isto é intrigante, não sei como o Facebook migrou para plataformas, talvez eles tenham olhado para o Google e se perguntado, como podemos enfrentar o Google? O que falta para eles?

E então ele diz como eles devem olhar seriamente para isto e como ele acredita que ainda não é tarde, mas que talvez eles estejam muito próximo do muito tarde.

Eu (Mauricio) tive uma boa experiência desenvolvendo para Facebook e para Orkut (OpenSocial), e as diferenças são gritantes. A plataforma social promovida pelo google, o OpenSocial, é um lixo asqueroso que irrita qualquer desenvolvedor, com padrões ultrapassados de xml e conceitos básicos como apresentação e lógica misturados em um mesmo padrão tosco que deve ser tão difícil de implementar quanto foi pra mim desenvolver para eles.

E creia que quando fazemos um app para alguma destas plataformas, nós estamos desenvolvendo para eles, e o apresso por isso é traduzido no suporte e nas ferramentas que nos são apresentadas. Eu te digo que o google mostrou uma falta de apresso gigante no que tange o OpenSocial, uma api complicada, mal documentada e hoje abandonada.

O texto integral de Steve Yegge você confere no link abaixo:

https://plus.google.com/112678702228711889851/posts/eVeouesvaVX

Abraços,

sexta-feira, 4 de junho de 2010

Getting Real

Olá,

Ultimamente eu tenho lido este livro (http://gettingreal.37signals.com/) e achei realmente interessante. Uma abordagem super moderna ao eterno processo de design e deploy de uma aplicação web, ele aborda conceitos como pensar na estratégia (do grego stratego), desenhar, construir e excluir manter.
Pontos interessantes:
  • Menos é mais: a idéia é focar em features que importam e ignorar as menos importantes, dessa forma seu app ficará menos confuso, mais conciso e simples de entender. Quando as features são analisadas de acordo com o tempo para implementar, você acaba com um software cheio de features bobas que só confundem.
  • Reuniões são venenosas: Conta ae, fora a sua entrevista de emprego, quando que uma reunião gera frutos?
  • Execução: Uma idéia brilhante sem ser executada, vale nada, uma ideia mais ou menos, com uma boa execução, vale alguma coisa, uma boa idéia e uma boa execução $$$
  • O mais importante primeiro, desenhe de dentro pra fora: Já reparou que quando se pensa em um site, a primeira coisa que se desenha são os frames e as nav bars? a ideia é desenhar o interior primeiro, depois as navegações, headers e footers da vida.
  • Mockup e Wireframes: Tente fazer o site todo como um mockup primeiro, custa muito menos tempo $$$ e stress mudar nessa etapa que depois, além de ajudar a TODOS a entender oque realmente vai ser feito do sistema.
  • Ciclos curtos: eu poderia (e talvez faça) um post inteiro sobre isso, ciclos curtos ajudam a se adaptar facilmente a qualquer problema, aumenta o número de realizações, melhora sua percepção de tempo, motivação e mantém o fluxo de trabalho. Ex.: Dê um trabalho de 3 semanas para um programador, ele vai coçar 2 semanas, tentar fazer em 1 e atrasar 3 dias.
  • Equipes pequenas: quanto maior a equipe, maior o overhead de comunicação e gerenciamento, uma equipe de 3 costuma ser o melhor.

Agora larga a preguiça e vai ler o livro vai, tem online de graça. Se gostar, compra, os caras merecem.