Acabei de começar um trabalho no Scrum e algo parece estar faltando. Eu sou novo no Scrum

23

O código é uma bagunça completa de uma combinação do clássico ASP / ASP.NET. O scrum consiste em consertar a grande bagunça ou fazer acréscimos a ela. Estamos muito ocupados fazendo isso para iniciar uma reescrita, então estou me perguntando ..

Onde está a parte do Scrum em que os desenvolvedores podem dizer que basta e exigir que eles tenham tempo para iniciar a grande reescrita? Parecemos um loop infinito de apenas remendar códigos antigos com 'Stories'.

Então, as coisas estão sendo executadas por pessoas não técnicas que parecem não ter vontade de reescrever porque não entendem o quão ruim a base de código ficou ..

Então, quem está encarregado de fazer essa grande mudança de reescrita acontecer? Os desenvolvedores? O Scrum Master?

A estratégia atual é apenas encontrar tempo e fazê-lo sem os superiores envolvidos, uma vez que eles são os principais responsáveis ​​pela bagunça atual em que estamos <-inseridos ->.

punkouter
fonte
20
Sham agile levanta sua cabeça feia novamente ... Muitas empresas dizem que são "ágeis" e usam "scrum", quando na verdade não o fazem.
Oded
4
Você não está fazendo Scrum
20
considere imprimir um grande pôster disso e colocá-lo na parede exatamente onde seu pessoal não técnico pode vê-lo claramente: Manifesto para desenvolvimento ágil de software meio árduo ... enquanto os itens à esquerda parecem legais em teoria, estamos uma empresa a empresa, e não há nenhuma maneira que nós estamos deixando de lado os itens à direita
mosquito
12
ligação obrigatória com o blog de Joel: joelonsoftware.com/articles/fog0000000069.html
marco-Fiset
8
"<insira as pessoas não-tecnológicas dizendo aos técnicos o que fazer aqui->" , a gerência deve 100% por cento dizer aos técnicos o que fazer, é por isso que eles são gerentes e responsáveis ​​pelos negócios , é isso que eles faça melhor. O que eles 100% deve não estar a fazer é dizer-lhes como fazê-lo, tecnologia pessoas devem decidir sobre como a técnica atingir o que eles foram convidados a fazer. Qualquer outra coisa é completamente ingênua !

Respostas:

7

Não sei por que isso é tão difícil para as pessoas. Seu caso de negócios está bem aqui:

We seem in an endless loop of just patching old code with 'Stories'.

Tempo do desenvolvedor é dinheiro. Muito dinheiro. Saí de uma empresa que planejava renovar a interface do usuário há mais de um ano e esperava que a adoção do scrum os ajudasse a parar de girar. O que aconteceu? Mesmo ol 'mesmo ol'. Eles continuaram aplicando novos recursos e a "dívida técnica" não tinha nenhum caso comercial, embora metade do código que escrevemos se tornasse sem sentido a cada iteração, devido à base de código subjacente ser uma bagunça completamente desatualizada. Nada mudou no front-end desde que saí, e fui criado com o objetivo de reformulá-lo completamente. Nos dois meses em que estive lá, não toquei em CSS ou JavaScript. Eu estava apenas mexendo com HTML e algum sistema antigo de templates Java do final dos anos 90.

Minha resposta? Faça o que puder, mas se os outros desenvolvedores já desistiram e estão trabalhando até tarde para cumprir as metas do sprint em vez de cumprir prazos mais práticos e insistir que a dívida de tecnologia é de fato um problema de bloqueio, assuma o pior e comece a procurar um novo emprego agora. Seus desenvolvedores são incapazes ou não têm permissão para comunicar suas preocupações ou os negócios também são míopes para entender quanto dinheiro estão gastando.

Ignorar esses problemas SEMPRE custa mais a longo prazo. E não um pouco mais, mas muito mais. Não é apenas uma ferida no peito no que diz respeito ao tempo de desenvolvimento, mas também inevitavelmente reduzirá seus níveis de talento, pois os desenvolvedores que conhecem melhor e têm outras opções evitarão sua empresa como a praga. Meu chefe atual é desenvolvedor e proprietário da empresa. Há coisas que não vamos reescrever em favor de focar em outras prioridades, mas quando algo realmente precisa de um refator devido a ser um timeink consistente, ele recebe um refator adequado. E os resultados são óbvios. Modificar e adicionar novos itens se torna mais fácil e rápido por vários fatores. O que antes levou horas pode levar minutos com a arquitetura adequada. Os negócios não gostam de ouvir, mas vale a pena adiar as coisas para isso.

O Scrum é uma falha em ambientes em que os desenvolvedores não têm muita influência, IMO, porque é muito fácil para os tipos de negócios querer ignorar a manutenção e as atualizações em favor de pontos de referência que podem colocar em suas listas de "iniciativas bem-sucedidas" quando chega o tempo da avaliação. Eles sempre irão favorecer suas peles e potencial de promoção em favor de longo prazo, mesmo quando isso sempre os morde na bunda, para ignorar esses problemas também.

Scrum também é uma indústria motivada pelo lucro e mais ainda. As empresas pagam muito dinheiro pelo treinamento em scrum. As pessoas que desejam adotar devem olhar atentamente para quem está sendo comercializado e o quão realista será na sua cultura.

Independentemente disso, se você realmente se importa com o desenvolvimento, uma base de código ruim, gerenciamento com cera nos ouvidos e desenvolvedores sem espinhos é uma receita para a miséria e um ambiente que fará muito pouco para aprimorar suas habilidades em qualquer aspecto útil. Não hesite em começar a tomar medidas no GTFO antes de descobrir se seus esforços para solucionar o problema estão realmente valendo a pena.

Erik Reppen
fonte
No que diz respeito à refatoração, acho estranho que as pessoas não consigam "internalizar" que a refatoração é uma parte constante de todo o desenvolvimento, não algo que você se preocupa quando o problema é tão ruim que não há muito o que fazer.
precisa saber é o seguinte
1
Ou você não tem testes de unidade. :) Um dos principais benefícios do teste de unidade é que ele permite refatorar com confiança. O maior problema das boas práticas é o mesmo de tudo - exige disciplina e geralmente as pessoas preferem ser preguiçosas.
precisa saber é o seguinte
2
Isso ou eles são mais um presente da multidão de codificação extrema que pode facilmente ser transformada em uma ferramenta que permite o mau comportamento nas mãos erradas. Testes automatizados são úteis em pontos-chave, mas eu prefiro arquitetura de som e gravação a uma interface do que a um teste.
precisa saber é o seguinte
1
Eu diria que é o mesmo para qualquer coisa, pessoalmente eu escrevo os testes para ajudar a definir a interface.
precisa saber é o seguinte
1
Então vem a dor de todos os argumentos a serem recolocados, pois existem essas pequenas exceções que podem não ser facilmente capturadas pela análise inicial.
JB rei
33

Se você realmente executasse o Scrum, o que duvido, o Dono do Produto seria responsável por decidir sobre uma reescrita. Na maioria das vezes, uma reescrita não é uma boa idéia, porque ela não produz novas funcionalidades, apenas introduz novos bugs.

http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky
http://www.joelonsoftware.com/articles/fog0000000069.html

Expandir "reescrever não é uma boa ideia":

É quase sempre melhor tentar uma melhoria gradual. Como Jarrod Robertson escreveu em um comentário, encontre um módulo que precisa ser aprimorado e torne-se o especialista para esse módulo e escreva uma história para o próximo sprint para melhorar esse módulo em particular. Explique ao proprietário do produto por que esse módulo precisa funcionar.

EricSchaefer
fonte
8
Se você tem tanta experiência e sabedoria quanto alega, dê um passo à frente e seja o cara que descobre esse módulo com falha, torne-se o especialista nele e conserte-o e, em seguida, monte um caso de negócios para reescrevê-lo, porque então você será o especialista nesse módulo.
3
Algumas bagunças precisam ser limpas. Citar artigos de Joel e afirmar que reescreve raramente dão certo sem nenhuma estatística que seria duvidosa (porque quem se gaba de reescrever com sucesso?) Não muda isso.
precisa saber é o seguinte
3
@ErikReppen Então, quando sua sala está bagunçada, você destrói a casa e constrói uma nova?
EricSchaefer
4
Se você ler os comentários dele, ele não está falando da sala de estar. Provavelmente é difícil dizer onde um quarto começa e outro termina. E a casa inteira está pegando fogo.
amigos estão dizendo
5
Uau, cowboy. Antes de fazermos uma declaração geral sobre "reescrever não é uma boa idéia", acho que precisamos qualificar que, com a verdade, que migrar para novas tecnologias e adaptar-se aos tempos é essencial para a sobrevivência de TI do seu negócio. Se você não adotar tecnologias mais novas (espero que melhores) e as vantagens que elas oferecem, seus concorrentes o farão. Isso é verdade para a tecnologia em geral. O Modelo-T era um veículo perfeitamente bom, mas graças à competição e à adoção de novas tecnologias, os carros foram "reescritos" muitas vezes nos veículos muito melhores que dirigimos hoje.
Blesh
18

Eu vou ser muito franco ...

  • Você está encarregado dos desenvolvedores neste trabalho?
  • Você é o líder do projeto?
  • Quanta "aposta" os desenvolvedores mantêm no projeto?
  • Qual é a justificativa da sua empresa para uma reescrita?
  • O que há na base de código que a torna totalmente inútil e irrecuperável?

Você declarou que acabou de começar um trabalho e, no entanto, já parece ser o mestre da situação lá. Talvez eu tenha entendido mal a intenção da sua pergunta, mas tenho a impressão de que você entrou em um trabalho em que vê vários problemas e chegou à conclusão mais fácil em que o código é quebrado e o único caminho a seguir é. reescrever, mas você realmente considerou o custo para o seu empregador?

Com qualquer base de código existente - não importa o quão ruim é o estado -, o proprietário geralmente terá um investimento considerável nos produtos que o código representa. Existem custos diretos e indiretos associados à base de código, e uma reescrita geralmente é a última coisa que você deseja fazer como desenvolvedor de software, pois corre o risco de desvalorizar seus ativos de código e, assim, obter um retorno menor em todos os seus esforços.

Tome o sistema operacional do Windows como exemplo. Com cada nova versão criada, houve um grande pedaço de código transmitido da versão anterior. Às vezes, bibliotecas e APIs inteiras são arrastadas para a frente por várias gerações de SO. Por quê? Porque os desenvolvedores sabem que esses elementos funcionam, foram testados, foram corrigidos e corrigidos para evitar problemas de segurança e memória, e porque eles custaram muito dinheiro para entrar nesse estado. Ninguém quer jogar fora o código em funcionamento quando está ganhando dinheiro, mesmo que os custos de manutenção sejam relativamente altos, o custo para começar do zero sempre será mais alto ainda e, em uma empresa como o caso da Microsoft, eles têm bilhões no banco, permitir que eles comecem desde o início, se quiserem, mas não porque eles querem maximizar o retorno do investimento. Seu empregador não é diferente da Microsoft, exceto por ter bilhões em dinheiro para lançar em um projeto.

Portanto, o código está uma bagunça e parece que há problemas de comunicação e limites entre as várias áreas da empresa. O que você ou seus colegas podem fazer sobre isso?

Uma opção é simplesmente continuar como a equipe tem sido, e esperar um milagre no futuro. Provavelmente não é uma boa ideia e provavelmente só aumentará sua frustração e estresse.

Uma opção melhor é simplesmente simplificar e executar suas tarefas, mas como parte disso, procure oportunidades para adicionar testes para dar suporte às áreas de código que parecem ser as mais frágeis e depois refatorá-las até que se tornem mais estáveis. Você terá mais facilidade em argumentar convincentemente para melhorar o investimento da empresa em vez de argumentar para simplesmente jogar tudo fora.

Uma opção ainda melhor é organizar-se como uma equipe e garantir que alguém esteja do lado com antiguidade suficiente para que eles possam ser um bom argumento para permitir à equipe mais flexibilidade para agendar um horário para melhorar a base de código. Não me importo com o quão ocupada é uma empresa, ou com a rigidez do cronograma, sempre há algumas "interrupções" ocasionais nas atividades que podem ser usadas para pressionar uma melhoria ou duas. É ainda melhor, no entanto, se as melhorias puderem ser feitas durante a conclusão de outras tarefas. Se fosse eu, estaria informando um gerente e apresentando-os a conceitos em alguns dos livros canônicos que os desenvolvedores de software lêem. Código Limpoé provavelmente o que sua equipe mais precisa. Plante algumas sementes sobre como melhorar o código e forneça alguns exemplos do que você quer dizer. Um bom gerente verá o valor de adicionar melhorias incrementais ao código, especialmente se você conseguir descrever o conceito de Dívida técnica . Ajude seu líder ou gerente de equipe a fazer um bom argumento comercial para melhorar o código, e eles terão uma motivação melhor para agir de acordo com ele.

Também não basta dizer "o código está desarrumado". Você precisa incentivar seus colegas a praticar a codificação limpa o tempo todo e a usar a técnica de codificação limpa para incentivar um pouco de organização. Tenho um pequeno pôster que imprimo e penduro da parede do escritório toda vez que assumo um novo emprego. Ele diz "Sempre se esforce para deixar o código um pouco mais bonito do que você o encontrou". Bem ao lado, adiciono outro que diz "Os lírios não precisam ser dourados". Ambos servem para me lembrar que eu deveria sempre tentar melhorar o que encontro, mas evitar simplesmente colocar um problema em outro. Reescrições maciças são geralmente o pior tipo de "revestimento de ouro", porque geralmente são feitas pelas razões erradas. Certamente, uma versão totalmente nova do produto pode ser justificável em algum momento,

S.Robins
fonte
Não. Eu não estou no comando. Eu sou um desenvolvedor que codificou 12 anos profissionalmente e 7 anos .NET. Eu estive em muitos contratos e, depois de um tempo, você rapidamente pode ter uma ideia da qualidade do código. Quanto 'aposta'? Não tenho certeza do que você quer dizer com isso. Podemos manter a correção do antigo ASP CLASSIC que agora é extremamente frágil e demorar 10 vezes mais do que se essas alterações fizessem parte de uma boa arquitetura moderna. A justificativa de negócios é que o site agora está falhando na produção devido a um módulo que ninguém parece entender por causa do alto volume de negócios
pUnkOuter
Eu não acho que você entenda o quão ruim é essa base de código. Além disso, isso não é ciência do foguete. Isso é CRUD 101. Isso está exibindo um formulário, permitindo que um usuário o preencha, valide e crie alguns relatórios e PDFs a partir dos dados. É basicamente isso. Mas, em 10 anos, o código foi fragmentado em tantas partes, é horrível. Ive sido parte de cerca de 20 projetos nos últimos 12 anos e isso tem que ser o pior coleção de código que eu vi que realmente é usado na produção ... Eu desejo que eu posso mostrar-lhe tudo
pUnkOuter
O que estou fazendo para começar é encontrar as pessoas que fazem parte da equipe que têm alguma paixão pela codificação e estão interessadas em fazer parte de finalmente fazer isso direito. Não é fácil encontrar essas pessoas por causa de ... brucefwebster.com/2008/04/11/...
pUnkOuter
16
@punkouter: Acho que você não entende o que está sendo dito aqui; A base de código ser "ruim" não é um caso comercial para uma reescrita. Ter paixão pela codificação e querer acertar as coisas não é um argumento comercial para uma reescrita. Bugs e interrupções de produção dispendiosos e demorando meses para implementar novos recursos triviais, mas importantes - Esses fornecem um argumento comercial para uma reescrita.
22612 Michael Borgwardt
1
@punkouter Seu link para uma descrição do fenômeno "Mar Morto" também é particularmente adequado. Não é de valor para a empresa perder conhecimento por atrito e de grande valor recuperar o que pode. Um investimento do seu tempo para evitar uma reescrita potencialmente cara e desnecessária tem maior valor comercial do que a perda de conhecimento e experiência. Incentivar melhores práticas de contratação e enfrentar o desafio de resolver o problema e melhorar o sistema é uma oportunidade para você ganhar alguns elogios e se tornar um ativo valioso para o seu empregador.
S.Robins
13

Aqui está a definição oficial da equipe de desenvolvimento do Scrum no Guia oficial do Scrum . Coloco ênfase nas partes que lhe dizem respeito diretamente:

A equipe de desenvolvimento é composta por profissionais que realizam o trabalho de fornecer um incremento potencialmente liberável do produto "Concluído" no final de cada Sprint. Somente membros da equipe de desenvolvimento criam o incremento. As equipes de desenvolvimento são estruturadas e capacitadas pela organização para organizar e gerenciar seu próprio trabalho . A sinergia resultante otimiza a eficiência e a eficácia gerais da equipe de desenvolvimento. As equipes de desenvolvimento têm as seguintes características:

  • Eles são auto-organizados. Ninguém (nem mesmo o Scrum Master) diz à equipe de desenvolvimento como transformar o Backlog do produto em incrementos de funcionalidade potencialmente liberável;

  • As equipes de desenvolvimento são multifuncionais, com todas as habilidades necessárias como equipe para criar um incremento de produto;

  • O Scrum não reconhece títulos para os membros da equipe de desenvolvimento além do desenvolvedor, independentemente do trabalho que está sendo realizado pela pessoa; não há exceções a esta regra;

  • Os membros da equipe de desenvolvimento individual podem ter habilidades e áreas de foco especializadas, mas a responsabilidade pertence à equipe de desenvolvimento como um todo; e,

  • As equipes de desenvolvimento não contêm sub-equipes dedicadas a domínios específicos, como teste ou análise de negócios.

A equipe de desenvolvimento é, portanto, responsável por sua própria bagunça e deve resolver a questão sozinha, sem precisar perguntar a ninguém de fora da equipe.

Inclua um tempo de fixação da dívida técnica em cada estimativa futura e garanta que a qualidade do software que você entrega seja de primeira qualidade.

Se você realmente precisar fazer uma reescrita completa, deverá resolver o problema na Restritiva de Scrum. O Dono do produto pode eventualmente cancelar o projeto e iniciar um novo. O Dono do Produto também é o único capaz de cancelar um sprint.


fonte
8
A equipe é responsável por sua própria bagunça, mas não escolhe a prioridade da dívida técnica versus os novos recursos. É o proprietário do produto quem decide isso. Só que, uma vez que o OP tenha decidido sobre a prioridade do backlog, a equipe poderá decidir como entregá-lo. Eles podem dizer "não podemos entregar o recurso X sem primeiro refatorar Y", mas não podem dizer "não, desculpe, não adicionaremos novos recursos até que seja reescrito do zero".
Bryan Oakley
6
@BryanOakley: Reescrever do zero não é o que eu sugiro. Sugiro reduzir progressivamente a dívida técnica à medida que a equipe de desenvolvimento trabalha nas áreas em questão. E também sugiro que eles calculem adequadamente.
1
Isso é bom, mas e se precisarmos de novos servidores, novos bancos de dados, novo software para que nós desenvolvedores tenhamos todas as ferramentas necessárias para reescrever? E como a reescrita começa quando as únicas 'Histórias' são sobre a correção de problemas atuais e nunca sobre o conceito de permitir uma reescrita?
06
1
@ punkouter: se você precisar reescrever, resolva o problema na retrospectiva do scrum. Em seguida, o Dono do produto assumirá a responsabilidade de cancelar o projeto atual e iniciar um novo.
5
Não assuma que a decisão de reescrever é a 'certa' apenas porque é a que mais agrada aos desenvolvedores. Às vezes, há uma boa razão comercial para fornecer recursos agora, mesmo que isso aumente a dívida técnica.
DJClayworth
8

Enquanto você descreve isso, devo dizer que não vejo nada que tenha a ver com o SCRUM, ou que sua equipe de desenvolvimento de produtos está sendo um problema atualmente .

Isto é normal

O que você descreve é ​​a entropia normal de uma base de código. No seu caso, a equipe provavelmente começou mais longe do ideal, mas ainda assim toda base de código acaba se tornando um Big Ball of Mud .

Em um cenário greenfield completamente perfeito , tudo o que você pode fazer é começar mais longe da entropia absoluta e avançar mais lentamente.

Concordo com os outros, a bagunça da base de código é por causa dos desenvolvedores. Estou certo de que antecede a adoção do SCRUM por muitos anos.

Esta não é uma decisão técnica ou de desenvolvedor para reescrever, é uma decisão comercial.

Você não conhece o motivo pelo qual os proprietários do produto não desejam reescrever. Você, como desenvolvedor, pensa que é necessário, mas há realmente algum caso comercial para isso?

Se houver um caso de negócios real , não apenas uma mão acenando; "o código é uma bagunça legada, eu quero começar o greenfield porque é isso que eu quero" , então a gerência entraria na despesa de uma reescrita, considerando o retorno do investimento.

Você não apresentou um argumento comercial sólido para uma reescrita, apenas um discurso retórico sobre sua opinião sobre como todos os outros causaram essa bagunça e você não quer lidar com isso.

Prova - o lucro leva as decisões de negócios a jogar fora o software em funcionamento, e não o TOC precisa de uma base de código limpa

Se você realmente pode mostrar provas , não apenas a teoria, mas a prova concreta de que gastar Xdólares em uma reescrita greenfield garantirá X * N dólares para os negócios no Yperíodo de tempo (onde Né alto e Ycurto), você pode obter alguma tração da gerência . Este é um caso altamente improvável que você pode apresentar e provar.

Caso contrário, você só precisa lidar com isso, isso é realidade. Ao contrário de suas afirmações inflexíveis de que não há absolutamente nenhum caminho a seguir sem essa imensa reescrita imaculada, eu apostaria que em cinco anos ou mais a partir de agora a base de código da qual você está reclamando ainda estará funcionando e funcionando em algum lugar, fornecendo funcionalidade e valor a alguém por muito tempo depois você deixou a empresa.

Peter Mortensen
fonte
1
isso não significa que não é responsabilidade dos desenvolvedores usarem algum sistema de controle de versão internamente , independentemente, eu diria que ainda é responsabilidade dos desenvolvedores cuidar de si mesmos e de seus melhores interesses, independentemente. No seu caso, esses 200 desenvolvedores não fizeram o que precisavam, a gerência não colocou uma arma na cabeça e os proibiu de configurar eles mesmos o sistema de controle de versão.
3
As bases do Messy Code nunca são um resultado direto do gerenciamento, pois o gerenciamento nunca é diretamente responsável pela escrita do código. É simples assim. O gerenciamento é responsável por ter e promover um ambiente de trabalho abaixo do ideal para os desenvolvedores, mas a responsabilidade de solucionar problemas como a falta de controle de versão sempre recai sobre os que estão realizando o trabalho real.
31812 Peter Lange
1
Devs terceirizados é um problema de gerenciamento. As pessoas de dentro sabiam melhor. A gerência gostava de fingir que estava economizando muito dinheiro contratando 200 desenvolvedores, quando na verdade provavelmente poderiam ter se saído bem com 20 competentes. Assim como muitas implementações do Scrum que eu já vi, a estratégia adotada era o produto da incompetência e nada que os desenvolvedores que eram realmente funcionários da empresa tinham controle.
amigos estão dizendo
2
@Erik, não dizendo que os gerentes não precisam se responsabilizar por uma base de código incorreta (ou quaisquer outras decisões erradas tomadas em seu departamento) e que os gerentes não são diretamente responsáveis ​​por fornecer o ambiente em que o desenvolvedor trabalha, como o cenário que você descreveu. Mas a única pessoa que pode ser diretamente responsável pela base de código é a pessoa que está escrevendo o código em si.
22812 Peter Lange
3
Eu também gostaria de acrescentar que é estúpido não tornar seus desenvolvedores a par dos objetivos de negócios. Eu nunca entendi por que as pessoas estão tão empenhadas em esconder essas coisas das pessoas que realmente determinam o comportamento de seus produtos. Conhecer as metas de longo prazo de uma empresa pode de fato informar como você arquiteta um aplicativo. Além disso, os desenvolvedores, pelo menos bons, resolvem problemas. Constantemente, eles resolvem problemas. Alguns de nós antecipamos e resolvemos com antecedência nossas cabeças ou pelo menos deixamos as portas certas abertas em nosso código.
amigos estão dizendo sobre erik
7

Eu geralmente sou cético quando as pessoas pressionam por "grandes reescritas". Há alguns casos em que definitivamente faz sentido, mas na maioria das vezes, esse código legado tem valor (já está em produção e sendo usado para os fins que inspiraram sua criação). Realizar uma grande reescrita é, em muitos casos, o oposto de ágil. Quanto tempo levaria para levar a nova versão do aplicativo a um ponto em que ele pudesse substituir o aplicativo existente.

A abordagem que eu prefiro é o que Martin Fowler chama de videira estranguladora . Implemente uma nova funcionalidade (incluindo alterações na funcionalidade existente) usando a nova abordagem, mas use o aplicativo existente como uma grade em que a nova funcionalidade possa crescer. Isso oferece o melhor dos dois mundos, você não precisa parar tudo enquanto a grande reescrita está sendo preparada para o snuff, mas você obtém o benefício de escrever um novo código que tira proveito das estruturas atualizadas. É definitivamente uma abordagem mais difícil do que começar limpo e pode não ser tão sexy, mas oferece mais valor aos negócios do que despejar tudo o que está lá porque está desatualizado.

Michael Brown
fonte
Isso pode ser difícil se a base existente for uma bagunça suficiente. Ele está falando sobre vários sistemas asp.net legados de autores completamente diferentes, fortemente acoplados no mesmo site. Formulários da Web por si só são um monstro e tenho certeza de que está na mistura.
precisa saber é o seguinte
Ah, eu nunca disse que seria a rota mais fácil ... mas é mais agradável às partes interessadas. Além disso, analisando uma vez, espero ter certeza de que, quando os melhores e mais recentes de hoje ficarem desatualizados no dia seguinte, é mais fácil eliminá-los.
Michael Brown
Concordo. Mas, como eu disse (e não tenho certeza de que todos o conhecem). O que existe agora é uma coleção de cerca de 9 aplicativos Web separados, metade do ASP clássico e a outra metade das formas diferentes do ASP.NEt. Todos usando maneiras totalmente diferentes de lidar com o acesso a dados, etc. Então, a única maneira de fazer o que se fala é falsificar a interface do usuário para parecer que o novo código faz parte do código antigo. Então sim, talvez. o banco de dados .. Uma tabela possui 400 campos!
precisa saber é o seguinte
Estou curioso. O que essa tabela representa? Essa é a pior coisa que ouvi desde que vi o i ++; doAlgo (i); repetido mais de uma dúzia de vezes em algum código que saiu de uma tag JSP interrompida.
amigos estão dizendo sobre erik
5

Onde estou e como trabalhamos é o que faríamos: escreva uma nova história e entregue-a ao proprietário do produto, que decidirá como priorizá-la. Um exemplo seria: "Como desenvolvedor do produto X, gostaria de reescrever o código nessa área para que o desenvolvimento futuro seja mais eficiente" Os critérios de aceitação precisariam seguir as seguintes linhas: Reescrever / refatorar x para que seja melhor assim.

Eu não sei sobre a situação em que você está, mas aqui, se quiséssemos recomeçar do zero, seria um caso de sentar com o proprietário do produto e convencê-lo do porquê e depois escrever uma pilha de histórias para recriar os existentes. funcionalidade.

As outras coisas que fizemos para tentar lidar com códigos ruins e / ou legados foram incluir tarefas para retrabalho ao descobrir as histórias dos usuários.

BennyB
fonte
Para que os desenvolvedores possam escrever 'histórias' e enviá-las? O problema é explicar as razões para a escrita re é demasiado técnico para eles para lidar com ... Tudo o que posso dizer é .. 'O código atual é difícil de gerir e breaks' ..
pUnkOuter
6
@punkouter: se as razões para querer reescrever forem puramente técnicas (ou seja, não custam o dinheiro da empresa), você NÃO TEM motivos suficientes para reescrever.
22612 Michael Borgwardt
@ MichaelBorgwardt: Você está dizendo que quaisquer razões técnicas nunca são suficientes para reescrever alguma coisa? Essa é uma abordagem fundamentalmente quebrada, se eu entendi corretamente. Uma coisa que me dá nos nervos continuamente é a abordagem normal de mestre / escravo de que o "negócio" determina tudo o que "TI", ou qualquer departamento. Isso é verdade até certo ponto. A TI tem seus próprios requisitos internos e não são decididos pela empresa - isso geralmente desaparece e leva a softwares não projetados e não adequados à finalidade.
precisa saber é o seguinte
1
@ user12355 Como já vi, o ponto de Michaels é que, se não está perdendo dinheiro para eles, não ganhará dinheiro, nunca haverá um caso. Se eles não estão perdendo dinheiro, uma reescrita lhes custa dinheiro. Dinheiro que não pode ser recuperado. Um desenvolvedor pode fazer com que o caso seja "um código péssimo", mas, a menos que eles possam provar um benefício financeiro ao empregador, nunca receberão a luz verde para reescrever, a menos que o façam por conta própria.
Rig
1
@ user12355: razões técnicas são definitivamente suficientes para uma história de usuário. Eles não são necessariamente suficientes para promover essa história para o topo da lista e colocá-la em um sprint.
Adam V
4

Decidir grandes reescritas é uma decisão comercial. Você pode tentar influenciar as decisões de negócios vendendo, do seu ponto de vista, às pessoas responsáveis ​​pela parte comercial das coisas.

Contudo; a mudança na qualidade do código de uma iteração para a próxima é uma decisão do desenvolvedor. Se você permitir que a qualidade do código diminua, você está adicionando uma dívida técnica para atender às expectativas do proprietário do produto agora. O que você pode fazer é começar a assumir a responsabilidade pelo código que você escreve e garantir que ele melhore a base de código, e não o contrário. Agora, isso significa que você perderá velocidade, pois está diminuindo continuamente o valor da dívida técnica e o proprietário do produto certamente ficará desapontado. Você pode tentar explicar que, por sua vontade, por favor, deixou a qualidade do código diminuir e agora está tomando medidas para corrigir esse problema.

Agora, percebo que é um passo aterrador, e pode ser tentador adiá-lo apenas mais um sprint para que você possa usar o recurso X antes de um prazo importante. Infelizmente, ficará mais difícil quanto mais você esperar.

A propósito, isso não é estritamente um problema do Scrum, nem estou sugerindo uma solução específica para o Scrum. Trata-se de desenvolvedores que se apropriam do código.

Buhb
fonte
1
Certo e quando você tem uma história de 10 anos de rotatividade constante e pontuais de desenvolvedores que claramente não conseguiam codificar bem ou entender a arquitetura moderna então ... você tem o que tenho agora ... Estou mais alarmado do que qualquer outra pessoa desde que eu sou novo no trabalho e não estou acostumado a ver um nível tão baixo de código de qualidade .. Quero reescrever não apenas pelo meu desejo egoísta de gostar de escrever um novo código bom .. mas pelo bem de todos os outros também ... mesmo se eles não entendem a situação como eu.
Apr12
1
Só posso reiterar o que já foi dito; Formalmente, você não pode decidir que agora é a hora da grande reescrita. Acho que você pode tentar mostrar às partes interessadas quanto esforço é necessário para transformar sua base de código em um estado um pouco menos doloroso e compará-lo com o esforço necessário para fazer uma reescrita completa.
Buhb
3

Os desenvolvedores são responsáveis ​​por alertar o mundo sobre o estado atual da base de código. Isso pode acontecer durante um scrum diário, uma retrospectiva ou apenas informalmente. Pode parecer óbvio, mas se você não expressar claramente que confusão é essa e quanto tempo você perde por causa disso, ninguém nunca notará. O Scrum Master normalmente será responsável por passar as informações para a OP e as pessoas encarregadas do projeto e convencê-las de que algo precisa ser feito, além de facilitar a implementação de uma solução pela equipe.

Como uma observação lateral, uma reescrita do big bang não é necessariamente a resposta certa para esse tipo de problema. Por mais fartos que os desenvolvedores estejam com a base de código atual, executar pequenas etapas mensuráveis ​​em direção a uma arquitetura mais limpa geralmente é uma idéia melhor, pois você pode ver o progresso, justificar seu trabalho mostrando regularmente ao PO as realizações e continuar o fluxo de implementação de novos usuários. histórias em paralelo, em vez de se perder em uma reforma interminável e monopolizadora de recursos.

guillaume31
fonte
Como mencionei .. Não há como avançar com uma coleção de 6 sites ASP clássicos + 4 sites .net 1.1 que são todos combinados em um site. Tudo codificado por pessoas diferentes de maneiras diferentes.
pUnkOuter
Tenho certeza de que a base de código avançará, nos próximos anos, parafraseando o Dr. Ian Malcom, do Jurrasic Park "Estou dizendo que a gerência, uh ... encontra uma maneira" .
Pode demorar alguns anos, mas é provável que vários tipos de sites .net herdados, fortemente acoplados, não sejam muito distantes nesses anos.
Erik Reppen
Claro, mas se todos esses sites .net continuam funcionando, e seu funcionamento continua a gerar receita direta ou indiretamente para a empresa, por que o impulso futuro é tão importante? Quando a receita é diretamente impactada pela qualidade da base de código, você pode acreditar que os gerentes não perderão tempo em reformulá-la, pois todos têm hipotecas a pagar, assim como os desenvolvedores.
31812 Peter Lange
O impulso contínuo incessante é geralmente a raiz do problema em primeiro lugar na minha experiência. A dor começa quando as expectativas de recuperação não diminuem enquanto eles ainda ouvem os problemas da arquitetura e pensam que o Scrum vai desenvolver magicamente novos conjuntos de recursos completos a cada duas semanas, sem exacerbar ainda mais o problema. Não estou dizendo que não devemos ter receio de arrancar as coisas se não conseguirmos alternativas que resolvam o tempo que estamos enfrentando, mas já vi pelo menos dois casos muito bons para grandes casos. revisões na minha carreira.
amigos estão dizendo
2

Você perguntou:

Onde está a parte do Scrum em que os desenvolvedores podem dizer que basta e exigir que eles tenham tempo para iniciar a grande reescrita? Parecemos um loop infinito de apenas remendar códigos antigos com 'Stories'. Então, as coisas estão sendo executadas por pessoas não técnicas que parecem não querer pressionar por uma reescrita, porque não entendem o quão ruim a base de código ficou ..

Como alguém que é gerente e desenvolvedor, a resposta mais simples para sua pergunta é que não há parte no Scrum, ou qualquer outra metodologia ou cenário de negócios, em que o desenvolvedor tenha o poder de dizer o suficiente e exigir um reescrever. Muitas pessoas aqui apresentaram argumentos bons e válidos para explicar por que as reescritas são freqüentemente más idéias e para explicar como as mudanças podem e devem ser realizadas de maneira ágil e incremental. E eu concordo com todos eles.

Mas a linha inferior é ainda mais simples. Você não toma essa decisão, NUNCA. Você é o funcionário, e a única decisão que você realmente toma é "continuarei trabalhando para esses asshats ou encontrarei um novo emprego que tema a minha louca habilidade". Seu novo emprego também não permitirá que você tome essa decisão, mas pelo menos você sentirá que está no controle de seu destino, ao passar de emprego em emprego.

Peter Lange
fonte
1
Se estou lendo as entrelinhas aqui corretamente, parece que você está um pouco amargo com a sua incapacidade de se apegar a novos contratados. Se não estou enganado, você já considerou que os recém-contratados cujas habilidades realmente exigem bastante que andem quando não gostam de trabalhar na sua empresa são as únicas não constantes na equação?
amigos estão dizendo
1
Nem mesmo perto. Na verdade, os funcionários do meu departamento estão comigo há alguns anos. Não tenho praticamente nenhuma virada. O que estou tentando enfatizar é que, em qualquer empresa, em qualquer setor, o trabalho que o funcionário realiza depende inteiramente da pessoa que assina o salário e não do funcionário. A única decisão que o funcionário precisa tomar, inclusive eu quando meu chefe faz uma solicitação, é persistir ou não no relacionamento com o funcionário. O pôster original perguntou quando ele, como funcionário, dita o desenvolvimento. A resposta nunca é.
31812 Peter Lange
Então, o que havia com a caracterização "tema meu maluco"? Esse cara é um desenvolvedor experiente. E posso dizer a partir da minha experiência com situações semelhantes que o problema de que ele está falando não é apenas uma questão de querer as coisas do seu jeito, mas de fato um desastre contínuo que está deixando todo mundo infeliz e custando muito mais a seu empregador em desenvolvimento desperdiçado. retenção de tempo e talento do que eles provavelmente percebem.
amigos estão dizendo sobre erik
1
Porque eu estava ilustrando a falácia do argumento básico, enraizado no ego (em um sentido psicológico). Não se trata de quão habilidoso ele é. Não se trata de como o código está confuso. Não se trata do que a metodologia de desenvolvimento pode fazer por ele. É uma pergunta sobre poder. O poder de tomar decisões em um relacionamento de funcionário reside com o empregador. O único poder de decisão que um funcionário tem é cancelar o relacionamento quando ele se torna demais para suportar.
31812 Peter Lange
1
Eu concordo, o scrum é ruim para lidar com dívidas de tecnologia. Mas discordo da base da pergunta original. Ele estava de fato fazendo uma pergunta de relacionamento empregador / empregado, mas acabou de mencionar o scrum na pergunta. É como se eu perguntasse: "Como cristão, qual é a melhor maneira de fazer uma Enchillada?". Não é realmente uma questão teológica; é uma questão de cozinhar, mesmo que eu tenha cometido o erro de pensar que minhas preferências religiosas eram relevantes.
22812 Peter Lange
1

Sinto sua dor, mas não tenho certeza do que isso tem a ver com Scrum. A decisão de reescrever o código não depende do processo de desenvolvimento.

Nemanja Trifunovic
fonte
Um processo de desenvolvimento que promete que as coisas serão concluídas a cada duas semanas pode fazer muito para impedir a refatoração em larga escala necessária, que é ignorada há anos. A primeira coisa que notei no treinamento em scrum é a maneira como eles se esquecem do tema da dívida tecnológica. Não é empolgante declarar que seu aplicativo agora é mais enxuto e mesquinho e você pode fazer as coisas mais rapidamente. Os tipos de negócios desejam um valor agregado visível que possam mostrar a amigos e investidores.
amigos estão dizendo sobre erik
1

Espere o que?

Você está remendando ? Você deveria estar refatorando . Atenha-se a valores ágeis. Use TDD e práticas apropriadas e a situação acabará se tornando melhor.

Falcão
fonte