A life committed to learning.

Tag: Agile Developemnt

Quick introduction to REST and JAX-RS

Here are some slides introducing to REST world. Examples are using JAX-RS (JSR 311).

If we’re moving to the cloud-era, the undestanding of this architecture style is essential. In the cloud we are presented with services (Storage, Search, Graph, Geolocation, …) that we can and should use to build applications. Almost all of these services, available  in the cloud, provide some kind of interface and happens that, this  interfaces is, generally, a RESTful Web Service. If I want collaborate with these services I must talk the same language!! Moreover, exploring this architectural style in new applications opens the door for realy distributed and scalable systems, while the simplicity is kept high!

Here the slides:

PDF can be downloaded from here.

Continue Reading

Software Architecture disruption?

:Adrian Colyer is a smart guy and he  put together, in a talk, what software architectures will look like for the next years. True is, most of the services you’re using online today follow these architecture principles. Nothing new, thought.

Nothing in this architecture is can go wrong,  it’s so simple! This type of architecture is the perfect fit for this ubiquitous platform that is Internet.

Btw,  SpringSource makes it really easy to develop applications in this way, just look to Spring Integration project, for example. They have a plenty of projects, built on top of Spring, that makes development of this type of architectures more, and more fun and easy.

(Ignore the sound problems at the beginning 🙂 )

Contrast this with traditional “enterprise” architectures. Which side of the fence you want to be?

Continue Reading

OO Design Principles, part 2

This second part is also the last one of this short introduction to OO design principles. I see these principles a the basic conceptual framework to build Object Oriented programs.

Continue Reading

Porque é que eu gosto das metodologias ágeis para desenvolvimento de Software?

Nesta história a equipa estava a trabalhar no lançamento de um produto para o mercado. O projecto já dura à um ano e é gerido com técnicas “tradicionais”* de desenvolvimento de software. Uma das iniciativas (ou sub-projecto, ou projecto no contexto de um programa) inclui um site,  um blog e um perfil no Facebook, no Twitter e no Youtube, onde se irá anunciar o grande lançamento do produto para o mercado.

Um mês antes do grande lançamento a equipa responsável pela comunicação pergunta ao desenvolvimento: “Quando é que o produto vai estar pronto? Precisamos de uma data para comunicar ao público o grande lançamento”.

A equipa de desenvolvimento respondeu qualquer coisa como: “Já está 85% feito.”

Com uma contas, o gestor de projecto prevê que dentro de um mês o produto estará pronto para o mercado. E foi com esse pressuposto que a equipa de comunicação anunciou a data do lançamento “imprevisível” do grande lançamento no site, no blog, no Facebook, no Twitter e no Youtube.

Mas será que aconteceu o pior?

No dia de lançamento (segundo as expectativas da equipa de comunicação), a equipa de desenvolvimento diz que não é possível lançar o produto hoje.

Infelizmente para a equipa, a data de lançamento calhou a uma Sexta-Feira, quando já todos andavam atacados com o stress pre-release. Depois do problema escalado, a direcção da empresa pede gentilmente que se esforcem ao máximo durante o fim de semana para lançar o produto na próxima Segunda-Feira. Até lhes ofereceu recompensas financeiras.

O produto é lançado na Segunda-Feira, mas apesar do incentivo financeiro,  a equipa perdeu muita motivação com este acontecimento. O overtime e sensação de “falha” é sempre um desmotivador e não há dinheiro que “mexa” nessa psicologia.

Agora, porque é que eu gosto das metodologias ágeis para desenvolvimento de software? Não vou aqui falar de tudo, é claro, mas apenas de um ponto que acho importante no contexto desta história tão comum.

Disciplina nas entregas (e tudo que o processo traz de borla)

  • A trabalhar com iterações que produzem Software “utilizável”  e com um conjunto de funcionalidades conhecidas, a equipa ganharia disciplina nas datas de entrega (Com uma gestão apropriada da equipa).
  • Se as iterações tivessem duração de 3 semanas e a equipa confiasse que necessitava de uma iteração para atingir um conjunto de funcionalidades, que somadas às produzidas nas iterações anteriores igualavam as funcionalidades mínimas para lançar o produto, então a equipa de comunicação poderia estar confiante ao anunciar a data do grande lançamento

Será este ponto importante para repensar algumas metodologias de desenvolvimento de Software? Ou assumimos a postura da  negação: “Ahh, podia ser pior se tivéssemos marcado um evento com a comunicação social e grandes investidores.”?  🙂

* Refiro-me aqui às técnicas que apenas são reconhecidas como boas práticas dentro da empresa um por um grupo restrito de empresas. 🙂

Continue Reading

O conhecimento é gratuito!

Será o conhecimento gratuito ou quase gratuito?  Não sei se existem muitas empresas em Portugal a utilizar mailing-lists efectivamente. Acho que as mailing-lists podem ser uma fonte de conhecimento gratuita.

Este poderá ser a história de muitas equipas em muitos projectos. É uma história de uma equipa de desenvolvimento de software que trabalhou para uma pequena empresa de fogões de sala. Eles ganharam um contrato de um projecto para integrar uma aplicação Web, desenvolvida em Java, com o Twitter. O projecto deveria estar pronto em 6 meses, sob pena de perderem 10 000€ por mês de atraso.

A empresa cliente vai experimentar utilizar o Twitter para aumentar as vendas e querem integrar o site com o Twitter. A cliente quer utilizar palavras chave associadas aos produtos para actualizar várias contas do Twitter. Cada actualização automática tem palavras chave de um produto e um link para a página do mesmo.

Depois de alguma pesquisa e análise, decidiram utilizar o Twitter4J, uma biblioteca de software em Java para abstracção da API Restful do Twitter.

Não tinham qualquer conhecimento na biblioteca Twitter4J. Inicialmente estimaram que demorariam cerca de 2 meses para ganhar o conhecimento e experiência necessária para fazer algo do género em seis meses.

Depois de um pequeno brainstorming chegaram a duas alternativas para colmatar a falta de experiência e eliminar, ou reduzir, qualquer risco de atraso.

Alternativa 1 – Contratar um consultor com conhecimento em Twitter4J para trabalhar no projecto durante dois meses que custaria ao projecto cerca de 15 000 euros.

Alternativa 2 – Assumir o atraso de 2 meses que custaria cerca de 20 000 euros.

Como ambas as alternativas custavam bastante dinheiro à equipa, eles decidiram seguir por outro caminho mais arriscado, mas que nunca poderia custar mais que a segunda alternativa. A alternativa seguida foi:

Alternativa 3 – Começar já a desenvolver qualquer coisa, e se tiveram alguma questão bloqueante utilizam as mailing-list do Twitter4J e da API Restful do Twitter.

Eles seguiram com a terceira alternativa, e qualquer dúvida eles colocavam questões nas mailing-lists, tendo não acesso a um consultor, mas a centenas de consultores que lhes respondiam quase imediatamente.

A equipa consegui terminar o projecto com um atraso de 1/2 mês, o que significou um prejuízo para equipa de cerca de 5 000, comparados com os 15 000 da primeira alternativa e os 15 000 da segunda.

Acham que  nesta história o conhecimento foi quase gratuito?

Disclaimer: Isto é mesmo só uma história 🙂

Continue Reading
Continue Reading