Prototipagem e refatoração rápidas


9

Às vezes, quando inicio um projeto pequeno (como um aplicativo Android), não sei qual abordagem funcionará no final, e apenas faço uma abordagem e experimento. Mas se eu nunca usei essa abordagem antes (para um tipo de aplicativo que nunca havia programado antes), é como entrar em um terreno desconhecido. Não sei quais bibliotecas usar (talvez eu precise experimentar várias bibliotecas) e existem muitos desconhecidos (como: como obter dados de áudio brutos no android)

Então, meu processo de desenvolvimento é assim:

  • Escreva um pedaço de código para ver se a abordagem tem uma chance. (Quanto mais incerta a abordagem, mais feio o código fica)
  • Se funcionar, refatorar muito até ficar bonito

Eu acho que poderia ser uma perda de tempo se eu planejasse meu design de software em detalhes neste momento, seria como planejar uma viagem sem um mapa.

Isso faz parte do desenvolvimento da aglie? Como você lida com terrenos desconhecidos no desenvolvimento de software?


Isso é mencionado no Código Limpo 2 como meio de desenvolvimento iterativo ... se você acredita nesse livro ou não, é com você.
Rig

Respostas:


11

Isso não tem nada a ver com ágil, mas as pessoas assumem que sim, porque é isso que elas acham que é ágil; desenvolvimento de frango sem cabeça em uma comunidade hippie.

O que você está fazendo é avaliar tecnologias, porque atualmente você não tem experiência suficiente delas para fazer um julgamento. Isso é bom e nunca termina porque novas bibliotecas, estruturas, idiomas e plataformas aparecem quase diariamente.

Como você lida com o desconhecido é realmente uma boa pergunta e se resume a pesquisar as alternativas, avaliá-las e depois selecionar uma.

As habilidades que tendem a se associar ao Agile que ajudam aqui envolvem a criação de código que é tão fácil e seguro para refatorar. TDD é um bom exemplo. Ele o incentiva a considerar seu desenvolvimento em termos de resultados. "Este código deve produzir esse resultado", que foca a mente e reduz a quantidade de código que não contribui para a solução do objetivo.

Se você escrever um código seguindo os princípios do SOLID (Acrônimo), estará em uma boa posição posteriormente para substituir uma biblioteca se tiver feito a escolha errada ou, como costuma acontecer, supera sua escolha.

É bom que você faça esse tipo de pergunta. Existem muitos desenvolvedores que, por várias razões, não correm o risco de parecer "ignorantes" ao reservar um tempo para selecionar a tecnologia correta. Cometer erros no início do projeto, não tarde. Experimentar é a chave e não um desperdício, então acho que você está fazendo o caminho certo.


2

Isso faz parte do desenvolvimento da aglie? Como você lida com terrenos desconhecidos no desenvolvimento de software?

O que você descreveu não é Agile. O desenvolvimento Agile tem mais a ver com promover planejamento adaptativo, desenvolvimento evolutivo e entrega com uma abordagem iterativa com prazo determinado. O Agile incentiva respostas rápidas e flexíveis à mudança. Portanto, refatorar seu código à medida que o desenvolvimento avança, contém partes da metodologia Agile.

Lidar com partes desconhecidas do projeto começa com a coleta dos requisitos conhecidos, com design de alto nível. Depois de ter a maioria dos componentes à mão, você pode procurar a solução certa. Dito isso, criar pequenas provas de conceito antes do desenvolvimento completo é a abordagem que nossa equipe segue.

Existem princípios de desenvolvimento de software chamados SOLID . Na minha experiência, aplicá-los em questões / problemas é sempre um passo à frente na melhoria da base de código do seu projeto.


2

Depende do projeto, se você estiver trabalhando sozinho em um projeto pequeno, pode fazer todo o sentido executar sua pesquisa e investigação de tecnologia como parte do desenvolvimento. E, embora não faça parte do Agile, é claro que uma metodologia Agile poderia ser usada para adicionar algum controle a isso. No entanto, isso torna o processo muito difícil de prever / ou caixa de tempo. Pode ser bom, ainda mais rápido, se trabalhar sozinho em um projeto pequeno que é totalmente seu, deixe que seus requisitos se desenvolvam à medida que você os aprende. Use bons princípios ao longo do caminho e seja consistente e você não precisará se refazer tanto.

No trabalho, usamos Kanban, Scrum e outras abordagens tradicionais em cascata. Depende do projeto, acho que desenvolvimentos complexos com requisitos iniciais bem definidos não são mais adequados para o ágil, mas muitos vão discordar.

Antes de começarmos a trabalhar, mesmo em um projeto ágil (exceto o mais simples), criamos alguma documentação. Temos uma simulação (se focada na interface do usuário), um conjunto de requisitos e uma especificação funcional.

Será solicitado ao desenvolvimento que crie as especificações técnicas a partir das especificações funcionais e, durante esse processo, especificaremos a tecnologia e realizaremos todas as pesquisas iniciais necessárias. Esse processo parece tão importante para mim, pois oferece a oportunidade de observar lacunas nos requisitos / especificações funcionais - e fornece grandes decisões de tecnologia antes das pessoas com experiência e conhecimento do sistema para tomar essas decisões.

O importante, no entanto, é que as especificações funcionais podem ser uma lista de tópicos, e as especificações técnicas geralmente serão um modelo, com alguns tópicos e orientações tecnológicas, talvez apenas 3 ou 4 páginas em alguns casos.

Mesmo ao executar um projeto ágil, criamos documentação:

  • Toda a documentação tem um custo.
  • Desenvolver contra a mudança e definir mal os requisitos de alto nível tem um custo.
  • O equilíbrio correto para o exposto acima depende do seu projeto, da cultura e das pessoas.
  • Documentamos Bem a tempo, os documentos ficam desatualizados.
  • Nós documentamos apenas o suficiente / apenas o suficiente.
  • Não mantemos ou atualizamos esses documentos, não colocamos muito esforço neles. Eles são pequenos. Esperamos jogá-los fora.
  • Resolvemos grandes incógnitas, como decisões de tecnologia, requisitos nebulosos e arquitetura antecipadamente.
  • Sabemos o que estamos desenvolvendo antes de começar.
  • Confiamos nos desenvolvedores para tomar decisões informadas sobre a documentação e discutir quaisquer problemas.
  • Valorizamos a comunicação em detrimento da documentação, pois esperamos que todos os envolvidos se comuniquem com frequência.
  • Documentamos os sistemas (visão geral) após o desenvolvimento, não durante, nem antes.

Você vê que há uma pequena cachoeira em nosso processo ágil.

Se você trabalha sozinho, crie um modelo inicial (diagrama!), Brinque e escolha a tecnologia e, quando tiver esse conceito de requisitos de alto nível, siga em frente e desenvolva-o de maneira iterativa e ágil, mas considere bons princípios e consistência à medida que avança e você precisará refazer menos, mais refatorar à medida que avança.

Mas, em geral, se houver um custo real envolvido (não um hobby), saiba o que você está desenvolvendo antes de escrever o código, mas não perca muito tempo escrevendo documentação que se tornará redundante rapidamente à medida que você mudará de idéia e deve mude de idéia durante o desenvolvimento à medida que você se torna mais informado. E seu projeto pode mudar muito de rumo, mas comece com uma base boa e bem definida.


1

É assim que começo novos projetos e funcionou muito bem, supondo que estamos falando de projetos pequenos. Por exemplo, eu não seguiria esse caminho se estivesse escrevendo um ORM ou algo dessa magnitude. Ocasionalmente, recorrerei a pesquisas mais formais quando estou realmente louco. Mas na maioria das vezes eu apenas começo a escrever código e vejo o que acontece. Você precisa estar preparado para jogar fora muito código ao fazer isso, no entanto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.