Porque o planejamento tradicional não funciona?

4, novembro, 2009 Pitty 3 comentários

planejamentoEstimativa e planejamento são passos críticos para o sucesso de qualquer projeto de desenvolvimento de software. No entanto, planejar é uma atividade difícil e os planos geralmente falham. Estimativas feitas no início de um planejamento ou projeto tem pouquíssima exatidão e a probabilidade de termos uma estimativa correta para um planejamento de 1 ano é muito menor que a probabilidade de acertarmos a estimativa para um planejamento de 2 semanas. Esse refinamento na probabilidade do acerto das estimativas é chamado de cone da incerteza (Boehm, 1981).

No entanto, a dificuldade em planejar não é desculpa para não fazê-lo. O planejamento reduz o risco, diminui a incerteza, ajuda na tomada de decisões, estabelece uma maior confiança e dissemina informações. Infelizmente, o planejamento tradicional não vem funcionando. Ao tentar combinar e responder às necessidades do trio escopo\cronograma\recursos, o planejamento tradicional não nos leva a respostas e produtos satisfatórios.

E por que o planejamento tradicional não funciona? Mike Cohn, em seu livro Agile Estimating and Planning, elenca 5 causas para as falhas de planejamento. Leia mais…

Categories: Uncategorized Tags:

Você entrega algo de valor para seu cliente?

12, outubro, 2009 Douglas Cunha Sem comentários

dilbert

Quando trabalhamos com equipes mais enxutas, utilizando metodologias ágeis (como o Scrum), temos um considerável poder de decisão e planejamento sobre o que será implementado em cada build. Digo considerável pois existem vários fatores que influenciam o que fará parte do seu sprint (sprint é uma interação que segue o ciclo PDCA e entrega incremento de software pronto), como a priorização do Product Owner (o cliente), tamanho estimado para cada uma das user stories que farão parte da interação, restrições técnicas e outras.

Durante o processo de estimativa, é comum decompormos as user stories em várias tarefas menores, com o objetivo de facilitar a pontuação de cada uma delas. Esse processo é adequado e, se bem feito, aumenta muito a precisão das estimativas, porém, ao quebrar uma solicitação em atividades menores, corremos um sério risco de perdermos de vista o real objetivo de cada uma das tarefas, que é contribuir para a conclusão de um recurso solicitado pelo cliente. Convém não esquecermos que, para o cliente, essas pequenas atividades geralmente não possuem valor por si, a não ser que todas sejam feitas e a feature solicitada seja entregue. Leia mais…

A importância da interface com o usuário

27, setembro, 2009 Douglas Cunha 1 comentário

dilbert3

Programar muitas vezes é considerado como sinônimo de codificar, ou seja, escrever código para ser compilado. A importância de um bom algoritmo na qualidade final de um software é indiscutível e não pretendo levantar discussões a este respeito por aqui, mas colocar em pauta outro aspecto – que também é programação – porém nem sempre tem a atenção merecida: a interface gráfica, ou, mais precisamente, a interface de usuário (IU).

Assim como a parte que fica por debaixo dos panos (o código) a interface gráfica tem uma importância fundamental para o sucesso de seu sistema. Padrões de projeto (Design Patterns), Grasp, POO, POA e etc. São inúmeras as técnicas existentes para auxiliar a construção de excelentes softwares. Mas, quantos de vocês conhecem alguma para desenhos de interfaces gráficas? O que deve ter em mente o programador ou projetista de interface para construir uma boa IU?

Leia mais…

Categories: Programação Tags: ,

Estimando pelo tamanho e não pela duração

22, setembro, 2009 Pitty 1 comentário

Estimativas de tamanho são diferentes das estimativas de duração. Ao estimar a duração tentamos estabeler quanto tempo será necessário para concluir uma tarefa. Mas, ao estimar pelo tamanho, analisamos quanto esforço (ou quanto trabalho) será necessário dispender para executar a tarefa.

Times ágeis estimam pelo tamanho e separam essa estimativa da estimativa de duração. Utilizarei uma metáfora como exemplo para entendermos melhor essa distinção.

2617756Suponha que, em uma bela manhã de domingo, minha esposa me incumba de recolher uma grande pilha de folhas e lixo de um canto do nosso jardim. Após um café da manhã reforçado, posso olhar aquela enorme pilha, analisar e avaliar minhas ferramentas (uma pá e um carrinho de mão) e estimar imediatamente que levarei 5 horas para terminar o trabalho. Para chegar a esse valor, ignorei qualquer estimativa de tamanho e parti diretamente para uma estimativa de duração.

Agora, imagine que eu olhe para a pilha e estime seu tamanho. Baseando-me nas suas dimensões, estimo que a pilha contem cerca de 10 metros cúbicos de sujeira. Essa é minha estimativa do tamanho da tarefa. Mas, nesse caso, somente uma estimativa de tamanho não é lá muito útil. Como no domingo tem um joguinho de futebol, quero saber quanto tempo vou demorar para limpar toda a sujeira. Ou seja, preciso converter minha estimativa de tamanho em uma estimativa de duração.

Leia mais…

Categories: Metodologias Tags: ,

GRASP – como atribuir responsabilidades com eficiência, uma introdução

13, setembro, 2009 Douglas Cunha 3 comentários

dilber

A programação orientada a objetos é, de longe, o paradigma mais utilizado em programação. Com várias décadas de existência, (apesar de muita gente não saber, a OO surgiu com as linguagens SIMULA I (1962-65) e Simula 67 (1967)) evoluiu bastante, porém, é muito comum encontrar projetos com problemas de arquitetura dos mais diversos tipos, entre eles, problemas de coesão, acoplamento desnecessários, generalizações inconsistentes e outras.

O intenção deste artigo é introduzir o conceito de GRASP (General Responsibility Assignment Software Patterns), que, conforme o nome já diz, tem o objetivo de tornar a distribuição de responsabilidade entre as classes uma tarefa mais criteriosa e eficiente, melhorando de forma significativa a qualidade de seu projeto e reduzindo os problemas de arquitetura mais comuns.

Leia mais…

Categories: Programação Tags: ,

Dual view: luxo ou ferramenta de produtividade?

1, setembro, 2009 Pitty 1 comentário

Dual view é a utilização simultânea de 2 monitores no mesmo computador, com a respectiva extensão da área de trabalho disponível. Neste artigo pretendo apresentar argumentos de como uma equipe pode ganhar produtividade utilizando bem não apenas um, mas dois monitores LCD.

DSC02339 (Medium)

O argumento mais óbvio é o ganho de espaço para visualização simultânea de várias janelas, mas somente isso não é suficiente; devemos utilizar esse espaço adicional de forma inteligente. E tudo começa com um conceito que aparentemente não tem relação alguma com monitores: “contexto mental”.

Segundo Andy Hunt, em seu livro “Pragmatic Thinking”, contexto mental é o conjunto de fatos, estados e/ou objetos em que estamos focados em um certo momento. Por exempo, quando participamos de uma reunião, o assunto em pauta, a entonação de voz do interlocutor, sua aparência, a sala, a mesa, a iluminação, até mesmo aquela cadeira desconfortável, tudo se une para formar o contexto. Pense nele como o conjunto de informações para as quais você dedica sua atenção em um certo momento e que estão carregadas na sua memória de curta-duração.

Leia mais…

Categories: Metodologias Tags: ,

Uma alternativa para montar seu Agile Board

24, agosto, 2009 Pitty 2 comentários

Há alguns meses vi um post muito interessante e criativo sobre a montagem do agile board da BlueSoft. Os curiosos podem acessá-lo aqui. Desde então fiquei tentado a aplicar a idéia na empresa onde trabalho e montar para minha equipe um quadro magnético na parede. No entanto, não é uma solução muito barata, a sala é pequena, e se nossa equipe aumentar teremos que mudar de sala… e lá se vai todo o trabalho de pintura.

Utilizávamos um quadro de feltro verde que não recomendo. Por baixo do feltro o que existe é um papelão fajuto (isso mesmo!) que após alguns furos perde o tônus e não segura mais nada. Por sorte, encontramos uma alternativa bem legal e de baixo custo. São placas de cortiça auto-colante que podem ser fixadas diretamente na parede.

Na foto abaixo mostramos um pacote com 6 placas dessas. Cada pacote custa R$ 26,90 e cobre meio metro quadrado.

DSC02329 (Medium)

A montagem é muito simples; basta remover o plástico protetor e posicionar a placa no local desejado. Deve-se ter cuidado com a colocação da primeira, pois as outras placas serão alinhadas com ela. Se ela estiver torta o quadro ficará fora de prumo. Leia mais…

Categories: Metodologias Tags:

Comentários no código. Até aonde ir?

15, agosto, 2009 Douglas Cunha 3 comentários

codigo

Existe uma cultura entre os programadores na qual a máxima ‘use comentários sempre que puder e deixe seu código bem explicado’ é praticamente uma lei fundamental da programação. Pouca gente discute isso, afinal, nada como um código bem documentado para torná-lo legível, certo? Nem sempre. E é sobre esta questão que eu vou falar neste artigo. Quando devemos usar comentários? Até que ponto comentar é uma boa prática? Existem outros artifícios que podemos usar para substituir um comentário?

Para começar, vamos voltar um pouco pela história. Há muito tempo, os compiladores tinham uma limitação de memória, onde existia um limite de caracteres por arquivo compilável. Em consequência disso, os programadores eram obrigados a serem muito seletivos e econômicos ao codificar, usando o menor número de caracteres para nomes de operações, variáveis e etc. Imagine um complexo código de ordenação onde todas as variáveis tivessem apenas um caractere. A primeira variável seria a variável ‘a’, a segunda ‘b’, a terceira ‘c’. Qual seria sua reação, ao ‘tentar’ ler esse código? Um pouco confuso, provavelmente. Nessa hora qualquer um rezaria por encontrar um código bem comentado. Leia mais…

Programe para uma interface, não para uma implementação

9, agosto, 2009 Douglas Cunha 3 comentários

engrenagens

Um conceito simples, mas nem sempre bem entendido e aplicado. ‘Programar para uma interface e não para uma implementação’, você sabe o que isto significa?

Apesar deste conceito ser aplicável a projetos de software, é mais antigo que ele, e é utilizado bem antes do primeiro compilador ser desenvolvido. Um exemplo bem obvio do que é isto, pode ser encontrado na casa de qualquer pessoa: um interruptor de luz. ‘Como assim José?’.

Um interruptor de luz é um exemplo muito bom. Consiste em um botão, que liga e desliga a luz. Uma interface simples, que esconde os detalhes de implementação de quem vai utilizá-la. Para ligar a luz, basta apertar o botão, e para desligá-la, adivinhem? Aperte novamente. A implementação está bem encapsulada – o usuário não precisa entender nada de pólo positivo, neutro, 127v, amperagem ou resistência. Qual foi o pensamento do designer ao projetar um interruptor de luz? Com certeza foi algo parecido com: ‘qual o mínimo possível de informação o usuário do meu produto precisa para usá-lo?’.

Leia mais…

Por que AgileZ?

dilbert-agile-programming

O AgileZ surgiu de uma idéia, ou, pra ser mais preciso, de uma necessidade pessoal de dar vazão a grande quantidade de informação que recebo diariamente em decorrência de meu trabalho como analista e programador.

Entre os assuntos que você verá por aqui, encontrará artigos sobre metodologias ágeis (XP, Scrum, TDD) e conceitos de padrões de projeto (Design Patterns, Grasp) – tudo baseado em minhas experiências – e, ocasionalmente, de colegas colaboradores -  sempre procurando enfatizar o lado conceitual, de forma que a informação possa ser facilmente aplicada a qualquer linguagem ou equipe.

Categories: Geral Tags:
Theme Tweaker by Unreal