1. Metodologias e técnicas de produtividade

1.1 - O que são boas práticas em desenvolvimento?

1.1 - Apresentação do curso

  • Curso dividido em aulas independentes umas das outras.

  • O curso completo é acompanhado pelo desenvolvimento de uma pequena aplicação.

1.1 - O que são boas práticas de desenvolvimento?

  • Trata-se de organização no trabalho para que ele flua.

  • Não há um único caminho: existem inúmeras metodologias e técnicas.

  • Vou ensinar as mais simples e que tendem a resistir ao tempo.

  • Foco em Software Livre e Aberto (FOSS).

  • Experimente diversas metodologias, técnicas e ferramentas e monte seu próprio kit!

Imagens:

Link:

1.1 - O problema fundamental

  • O processo criativo não é linear e difícil de colocá-lo numa metodologia de trabalho.

  • Muitos métodos tentam dominar e formatar o fluxo natural de atividades.

  • Queremos técnicas e ferramentas que reduzam o ruído no trabalho, mas que não acarretem na perda de liberdade criativa.

  • Dificuldades essenciais e acidentais (Aristóteles).

1.2 - Metodologias pessoais

Queremos evitar:

  • Cabeça cheia de ruído.

  • Ansiedade.

  • Procrastinação.

  • Empacamento.

Queremos:

  • Simplicidade sem perda de qualidade (KISS).

  • Excelência (melhoria incremental) ao invés de perfeccionismo obsessivo.

1.2 - Metodologias pessoais - Básico

  • Fundamental: fazer fluir a criatividade.

  • Evitar distrações e preocupações.

  • Foco na missão: uma tarefa por vez.

  • Básico: agenda, lista de tarefas e log (registro).

  • Fazer o essencial e ter autocrítica sobre isso.

  • Método não é lei, é sugestão de caminho. Você descobriu que é multi-tarefas e funciona melhor assim? Ok! :)

  • Mude seus hábitos aos poucos!

1.2 - Metodologias pessoais - Pomodoro

É uma técnica simples para execução de tarefas:

  • Material: alarme e lista de tarefas.

  • Escolha uma tarefa e anote na sua lista.

  • Ajuste o cronômetro (25 minutos tradicionalmente).

  • Trabalhe na tarefa até o cronômetro disparar. Marque um X na lista ao lado da tarefa.

  • Pare por um tempo curto (5 minutos, por exemplo).

  • Depois de 4 pomodoros, faça uma pausa mais longa (15 a 30 minutos).

Imagem:

1.3 - Get Things Done (GTD)

É uma técnica para organização de tarefas / vida.

1.4 - Zen to Done (ZTD)

ZTD é um GTD simplificado e mais estruturado:

  • Tenha uma rotina.

  • Reduza as suas tarefas ao essencial.

  • Comece o dia realizando as tarefas importantes. Não se perca.

  • Sugestão do chef: ZTD com Pomodoro!

1.5 - Metodologias em equipe

1.5 - A Catedral e o Bazar

  • Eficiência do código aberto.

  • Agile: conjunto de princípios.

1.5 - Agile

Mesmo havendo valor nos itens à direita, os itens à esquerda são mais valorizados:

  • Indivíduos e interação entre eles mais que processos e ferramentas

  • Software em funcionamento mais que documentação abrangente

  • Colaboração com o cliente mais que negociação de contratos

  • Responder a mudanças mais que seguir um plano

Link: http://www.manifestoagil.com.br

1.5 - Metodologias populares

  • Scrum: metodologia de gerenciamento de projetos.

  • XP: metodologia de engenharia de software.

  • Kanban: controle coletivo de tarefas.

  • Híbridação: Scrumban + XP :D

1.6 - Kanban

O Kanban é uma metodologia de trabalho baseada em três princípios:

  1. Visualizar o fluxo de trabalho, o que é feito tipicamente usando um quadro físico, afixado numa parede, ou virtual, usando um gestor de software.

  2. Limitar o trabalho em andamento, determinando quantos itens podem se encontrar em cada etapa.

  3. Acompanhar o tempo de execução de cada tarefa, ou templo de ciclo, para que você possa otimizar o trabalho futuro e prever melhor a duração média de cada tarefa e calibrar o limite de tarefas que podem estar em cada etapa do fluxo, descobrindo assim quais são os gargalos da equipe.

1.6 - Kanban: fluxo de trabalho

É fundamental no Kanban usar um quadro dividido em colunas, cada uma delas representando uma etapa do fluxo de trabalho (itens a fazer, em desenvolvimento, em teste, entregue, etc). Você também pode dividir o quadro em linhas para delimitar cada componente do seu produto, mas isso não é sempre necessário.

Em seguida, escolha o limite inicial de tarefas que podem se encontrar em cada etapa. Lembre-se que o Kanban é empírico!

Por fim, divida então o trabalho em tarefas menores, escreva cada uma delas num cartão e afixe-as no quadro Kanban.

Conforme as tarefas passam de etapa, os respectivos cartões são movidos ao longo do quadro Kanban.

1.7 - Scrum

O scrum prevê uma equipe pequena, muito coesa e que queira atingir objetivos bem definidos em períodos de tempo pequenos, tipicamente de 2 a 4 semanas.

A cada ciclo de trabalho, ou sprint, é estabelecida uma entrega comum para todo o time. Isso vai pautar a equipe numa série de tarefas que contribuam para esse objetivo seja atingido.

O scrum define alguns papéis de facilitação do processo para ajudar a resolver problemas e impedimentos do processo de trabalho.

1.7 - Scrum: fluxo de trabalho

  1. No início do sprint, a equipe realiza uma reunião de planejamento, estabelecendo quais tarefas serão realizadas de acordo com prioridade, esforço necessário, etc.

  2. Diariamente, o time faz uma reunião rápida de avaliação do dia anterior e onde cada integrante da equipe informa no que trabalhará no dia atual e quais dificuldades está enfrentando.

  3. Ao final do sprint, o time realiza duas reuniões: uma para apresentar o trabalho realizado e outra para avaliar quais mudanças no processo de trabalho precisam ser realizadas.

1.8 - XP

O Extreme Programming, ou XP, é útil em projetos com escopo pouco definido ou que mudam com muita frequência.

Ele assume uma equipe pequena e um desenvolvimento incremental, onde uma versão simples do projeto é implementada logo de início e é melhorada a cada iteração.

1.8 - XP: fluxo de trabalho

O Extreme Programming parte de uma ideia simples: se uma boa prática é boa mesmo, ela pode ser levada ao extremo.

Por exemplo: se a revisão do código é uma boa prática, por que não fazê-la continuamente através da programação em pares, isto é, com duas pessoas sentadas na mesma estação de trabalho fazendo o código juntas? A qualidade do código resultante é bem alta.

Outras ideias do XP incluem a integração contínua com testes frequentes do código, desenvolvimento orientado a testes, refatoração do código sempre que necessário, a padronização do código, design simples, releases frequentes e interatividade com o cliente.

1.9 - Começando um projeto

1.9 - Etapas

  • Etapa 0: descoberta, brainstorm e levantamento de escopo!

    • Qual ou quais problemas a serem atacados?

    • Como definir o projeto e seu escopo? O que é e o que não é?

    • Quais soluções possíveis? Qual a escolhida?

    • A ser realizado em conjunto pela equipe de desenvolvimento e quaisquer partes envolvidas (clientes, por exemplo).

    • Descrição em alto nível.

  • Etapa 1: pesquisa do que já existe: quais soluções abarcam os problemas formulados? No que deixam a desejar?

  • Etapa 2: planejamento inicial: escolha inicial de metodologias, bootstrap, provas de conceito, etc.

  • Etapa 3: aplicar um conjunto de metodologias mas principalmente realizar o projeto.

Imagens:

  • Diagramas jocosos de problema/solução.

1.9 - Projeto de exemplo

  1. Descoberta:

  • Problema: garantir que o aluno, ao concluir este curso, possua um blog simples para relatar suas descobertas em desenvolvimento de software (knowledge base / bagagem de conhecimento pessoal).

  • Escopo:

    • O blog deve ser construido de acordo com as ferramentas abordadas neste curso.

    • Quanto mais simples, melhor: fácil de construir e confortável para manter e consultar (afinal, não queremos gastar tempo no futuro mantendo esse projeto).

    • Que dificilmente se torne tecnologicamente obsoleto: sem base de dados, com o mínimo de programação e formato de edição simples.

    • Que dependa o mínimo de bibliotecas e aplicações externas.

    • Que seja fácil de hospedar em qualquer local, fácil de fazer backup e que possa facilmente ser transformado noutros formatos (livro).

  • Soluções:

    • Criar um blog em qualquer lugar e fazer backups na unha? Pouco elegante e não atende a todos os requisitos.

    • Criar um blog em HTML simples e subir manualmente para um servidor? Não, queremos algo entre a web 1.0 e a web contemporânea.

    • Que tal criarmos um blog gerado estaticamente, isto é, um conjunto de arquivos simples de editar e que são compilados para o formato de site que possa ser facilmente enviado para um servidor como qualquer outra aplicação web?

  1. Pesquisa: pesquise pesquise pesquise! O que você encontrou?

  2. Bootstrap:

    • Precisamos de um nome. Curiosamente, nomear um projeto é a etapa mais difícil, mas hoje estamos criativos e chamaremos de “blogático”, gerador de sítio estático :)

    • A metodologia utilizada será o desenvolvimento incremental ao longo deste curso.

    • Design inicial: o blogático varre uma pasta com arquivos de texto e gera o conteúdo no formato de website numa outra pasta.

    • Plano inicial para a dominação mundial:

    • Criar o repositório do projeto.

    • Script básico para geração do site.

    • Conteúdo inicial para testes.

    • Documentação.

    • Lançamento!

  3. Realização: quer ver como o projeto pode ser realizado? Continue com o curso! :P

1.10 - Atividades

  1. Adote a técnica Pomodoro numa tarefa grande e importante do seu dia. Você pode usar qualquer cronômetro disponível – do seu computador, do telefone, do relógio de pulso ou mesmo um timer de cozinha. Permaneça apenas realizando a tarefa importante em cada bloco de 25 minutos. Avalie a eficácia do método: ele te ajudou?

  2. Para este curso, definimos o nosso projeto de exemplo como sendo um website/blog bem simples. Você pode fazer o mesmo ou então escolher qualquer projeto que queira fazer usando qualquer linguagem de programação e adaptar as atividades propostas nas aulas seguintes de acordo com o seu caso. Sugerimos apenas que você escolhe um nome para o seu projeto, mesmo que temporário! Mas lembre-se: nomes tem poder! :)

  3. Bônus: esboce um documento simples de escopo para o seu projeto. Ele pode ser um importante guia nas fases iniciais.

1.11 - Referências