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.
Colete: apareceu na sua frente? Coloque para fora da cabeça!
Processe.
Organize.
Planeje.
Faça!
Workflow: https://en.wikipedia.org/wiki/Getting_Things_Done#/media/File:GTDcanonical.png
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
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:
Visualizar o fluxo de trabalho, o que é feito tipicamente usando um quadro físico, afixado numa parede, ou virtual, usando um gestor de software.
Limitar o trabalho em andamento, determinando quantos itens podem se encontrar em cada etapa.
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¶
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.
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.
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¶
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?
Pesquisa: pesquise pesquise pesquise! O que você encontrou?
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!
Realização: quer ver como o projeto pode ser realizado? Continue com o curso! :P
1.10 - Atividades¶
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?
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! :)
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¶
Imagens usadas nos vídeos?
Boas práticas de engenharia de software | Guia da Startup e da Gestão de Produtos de Software.
Boas Práticas de Desenvolvimento – melhorando o seu dia-a-dia.
Melhores Práticas para Desenvolvimento de Sistemas e Software.
Arquitetura, padrões, projetos e boas práticas sobre desenvolvimento de software - georgemendonca.
Técnica de Pomodoro: Melhorar a Produtividade | Freelancer e Produtividade
Zen To Done (ZTD): The Simple Productivity System : zen habits.
https://www.mountaingoatsoftware.com/blog/differences-between-scrum-and-extreme-programming
http://manifesto.co.uk/kanban-vs-scrum-vs-xp-an-agile-comparison/
Aprenda sobre Desenvolvimento Ágil de Software | DesenvolvimentoAgil.com.br.
Open Kanban - An Open Source, Ultra Light, Agile & Lean Method | AgileLion.
Open Kanban Presentation - Discover the Power of Kanban | AgileLion.
(Engenharia de Software - Edi347343o 45.pdf) - A6 - 45-6- Kanbam.pdf.
Extreme Programming, XP metodologia desenvolvimento ágil | XP | DesenvolvimentoAgil.com.br.
Scrum: metodologia ágil para gestão e planejamento de projetos | Scrum | DesenvolvimentoAgil.com.br.