Guia das primeiras semanas

As primeiras semanas da disciplinas são as mais confusas, complexas e umas das mais importante. Vocês não sabem exatamente o que tem que ser feito, como tem que ser feito, e o que é esperado. Acreditem que faz parte da experiência. Esse documento tenta trazer um guiar para fazer bem as primeiras semanas.

  • Dinâmicas para conhecer todos os membros do time
  • Mapeamento das habilidades e dificuldades de cada pessoa do time
  • Estudos em pares nos seguintes temas: Scrum, papéis/habilidades ágeis (Scrum master, Product Owner, Arquiteto/DevOps), documentos de projeto de software (Documento de Visão, Documento de arquitetura, TAP), documentos ageis (issue, pull request, documento de sprint)
  • Treinamentos - configuração de ambiente (intalação de git, etc), uso de principais comandos git, treinamento práticas ágeis. Podem pedir para algum monitor dar o treinamento, ou alguém do time prepara o treinamento.

Conhecendo o time

No mercado de trabalho, nós não escolhemos com quem vamos trabalhar. Então se não estiver no time que gostaria, é uma ótima experiência para testar seu profissionalismo no ambiente de trabalho.

Antes de começar o trabalho mão na massa, é importante que as pessoas do time sintam a vontade de se expressar, e que verbalizem as expectativas, limitações e frustrações. Então, na primeira semana na disciplina, dediquem tempo para conhecer as pessoas do seu time, ver o perfil de cada um (gosta de programar, fazer interface, sonha em mexer com dados, ja sabe programar em python etc), mapear as expectativas individuais na carreira de engenharia de software, compartilhar os medos/inseguranças em relação à disciplina\faculdade, e dificuldades individuais. Essas conversas iniciais são muito importantes! Todas as pessoas devem falar, sentir parte do grupo, e devem agregar Todas as pessoas no time e criar uma expectativa coletiva.

Pra que essas conversas iniciais são importantes? Primeiro estamos trabalhando com pessoas, com usas histórias, seus sonhos e suas restrições. Conhecer as pessoas nos faz entender que cada uma vai dedicar o máximo possivel, dentro das suas limitações, para o sucesso do grupo. Vão perceber que o sumiço de um membro pode estar relacionado a questões muito mais complexas (muito raramente é por ser migué), e saber da historia de cada um nos faz compreender que as dedicações não são uniformes e ajudar os colegas de time em momentos de dificuldade.

Estudo em Pares

Uma das grandes práticas ágeis que vamos trabalhar no semestre é o pareamento. Nessa prática, todas as tarefas a serem realizadas no projeto são feita por dois integrantes. Trabalhar em dupla pode parecer contra produtivo em um primeiro momento (se cada pessoa ficasse com uma tarefa parece que teria mais tarefas entregues), mas estudos mostram que trabalhar em dupla, além de ter revisão do que é feito, é uma forma de trocar conhecimento, aumenta a qualidade da tarefa entregue, e é mais produtivo.

Por isso, todas as tarefas devem ser realizadas por duplas no time/squad.

Encontros

Desde a primeira semana, o time deve fazer reuniões de planejamento, com o objetivo de levantar as atividades a serem realizadas na semana e quem é o responsável para realizar as tarefas.

Nas primeiras semanas, as tarefas são exclusivamente de estudos, e treinamentos. Estudos e treinamento incluem: Scrum, papéis/habilidades ágeis (Scrum master, Product Owner, Arquiteto/DevOps), documentos de projeto de software (Documento de Visão, Documento de arquitetura, TAP), documentos ageis (issue, pull request, documento de sprint).

Além das reuniões de planejamento, precisam marcar reuniões para discutir o escopo do software que vocês gostariam de desenvolver - funcionalidades (login, x, etc), e as tecnologias que vcs gostariam de usar (python, etc).

Ao final da semana, deve ter uma reunião para que cada membro do time entregue o que foi desenvolvido na semana. Chamamos essa reunião de Review. O objetivo é que todos saibam o que foi finalizado, o que está pendente, e o que não foi finalizado. Com essa reunião, terão as informações necessárias para fazer o planejamento de um novo ciclo semanal.

  • Reunião Semanal de planejamento
  • Reunião semanal de revisão/entrega (review)
  • Reuniões focadas técnicos sobre o projeto (com temas definidos).

Treinamentos

O início do semestre deve ser dedicado à estudos e treinamentos. O que isso quer dizer? normalmente uma dupla/pessoa estuda um conceito/tecnologia/prática e confecciona o material para capacitar o restante do time.

O material dos treinamentos podem ser links para tutoriais com boa qualidade, apresentação utilizada no treinamento. Deve-se garantir que ao final do treinamento, todos os membros da equipe tenham conhecimento necessário para que consiga aplicar no contexto do projeto.

Todos os treinamentos devem ser planejados e registrados nas issues.

Treinamentos a serem realizados:

  • Métodos ágeis - o que são métodos ágeis, o que é Scrum e as práticas do Scrum
  • Configuração de ambiente - instalar bibliotecas/ferramentas necessárias para o projeto. Instalando linux, git, pip, etc.
  • Git - o que é, quais são os principais comandos (clone, push, pull, commit, add, remove)
  • Github - práticas das issue (Criar issue, comentar issues etc), documentação (markdown, estrutura pastas etc), pull request, branches
  • Gitpage - reaproveitar tema/estrutura de outro time, etc.

Registro de Horas Trabalhadas

Vocês devem controlar em um primeiro momento o tempo de dedicação em horas de cada membro do time. Para isso, toda vez que um participante trabalha para o projeto, monitora o tempo dedicado e registra em um local que o time definiu (planilha de horas compartilhada, algum software etc)

Exemplo de Planilha - https://www.coalize.com.br/planilha-horas-trabalhadas

Documentação

Todo o trabalho realizado deve ser registrado no repositório github do projeto.

A documentação das tarefas deve ser feito por meio de issues no github. Cada participante deve ter, pelo menos, 1 issue alocada (assign).

Deve ter também documentação do planejamento e revisão da sprint.

Ponteiros

Ler os post mortem dos outros grupos dos semestres anteriores. O documento post mortem é um documento com o objetivo de deixar as lições aprendidas, o que fizeram errado, o que foi importante pra eles, o que eles dariam de conselhos para vocês. Aproveitem esse material para entender mais a disciplina, o que é esperado de você, como gerir bem seu tempo e se organizar pra disciplina.

Semestre anterior

Outros semestres

Tutoriais

Web Developer Roadmap Spellbook of Modern WebDev System Design Primer

Ferramentas

Referências

Engenharia de Software

Engenharia de Software Moderna

Code Complete [Steve McConnell]

Clean Code: A Handbook of Agile Software Craftsmanship [Uncle Bob]

The Pragmatic Programmer: From Journeyman to Master [Andy Hunt, Dave Thomas]

Arquitetura de Software

Clean Architecture [Uncle Bob]

Building Evolutionary Architectures: Support Constant Change [Neal Ford, Rebecca Parsons, Patrick Kua]

Microsserviços

Building Microservices: Designing Fine-Grained Systems [Sam Newman]

Design

The Modern Web Design Process [Jeff Cardello, John M. Williams]

Métodos Ágeis

Scaling Agile @ Spotify with Tribes, Squads, Chapters & Guilds [Henrik Kniberg, Anders Ivarsson]

Software Engineering: A Practitioner's Approach

Kanban em 10 passos [Jesper Boeg]

Extreme Programming Explained: Embrace Change [ Kent Beck, Cynthia Andres]

DevOps

The DevOps Handbook [Gene Kim, Jez Humble, Patrick Debois, John Willis]

Site Reliability Engineering: How Google Runs Production Systems [Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Murphy]

Accelerate: The Science of Lean Software and DevOps [Nicole Forsgren, Jez Humble, Gene Kim]