Por que não podemos fazer nada?

9

Trabalho em uma equipe pequena, em uma empresa de médio porte, a maioria das quais não está envolvida no desenvolvimento de software. Eu sou o desenvolvedor mais novo e menos experiente e não tinha formação profissional ou acadêmica em software antes de iniciar, mas estou bastante satisfeito com o quão respeitada é minha opinião e sou grato por ter sido levado a sério em um estágio tão inicial da minha carreira.

Ainda assim, sinto que deveria estar fazendo mais com essa quantidade generosa de tempo de antena. Como equipe, parece que temos problemas para fazer as coisas. Gostaria de sugerir algo para melhorar a situação, e acho que seria ouvido se fosse uma boa ideia, mas estou sem saber o que sugerir.

Entre as coisas que posso identificar como problemas estão:

  • A especificação das tarefas em questão é escassa. Isso ocorre em parte porque o gerenciamento é um gargalo e não temos dinheiro ou pessoas para nos comprometermos a elaborar requisitos detalhados, tanto quanto gostaríamos. Também é em parte porque o software que estamos desenvolvendo é investigativo e o método preciso não é claro até que seja demonstrado e usado para determinar sua eficácia.
  • O Lead Dev gosta muito do que ele chama de 'prototipagem' a ponto de ultimamente começar a insistir que tudo é 'prototipado', o que para o resto de nós parece escrever código ruim e entregá-lo aos modeladores para brincar. Não está claro o que ele espera sair deste exercício em muitos casos. A implementação "real" sofre então por causa de sua insistência em que as boas práticas levam muito tempo com a criação de protótipos. Eu nem comecei a ser capaz de desvendar essa lógica distorcida e não tenho certeza se quero tentar.
  • Espera-se que os modeladores nos digam tudo sobre a metodologia desejada em detalhes precisos, e é assumida a confiança absoluta de que o que eles lançam é teoricamente perfeito. Isso quase nunca é verdade, mas nenhuma ação é tomada para corrigir essa situação. Ninguém do lado da modelagem levanta preocupações de uma maneira estruturada com probabilidade de agir, nem busca orientação na aplicação das melhores práticas. Nada é feito sobre a passividade deles também.
  • Eu tentei empurrar o TDD para a equipe antes, mas achei difícil, pois é novo para mim e, embora aqueles com supervisão do meu trabalho estivessem dispostos a tolerá-lo, nenhum entusiasmo foi demonstrado por mais ninguém. Como não posso justificar a quantidade de tempo que gasto em chafurdar e não terminar os recursos, a ideia foi abandonada no momento. Estou preocupado que não seja atendido novamente, porque ninguém gosta de saber como fazer seu trabalho.
  • Agora, temos um servidor de integração contínua, mas é usado principalmente para executar testes de regressão de várias horas. Foi deixado em aberto que ele deveria estar executando testes de unidade e cobertura de cobertura total também, mas no momento ninguém os escreve.
  • Toda vez que levanto a questão da qualidade com o desenvolvedor líder, recebo uma resposta para o efeito de 'O recurso de teste A é direto, o recurso B é muito mais importante para o usuário, mas é muito difícil de testar, portanto, não devemos testar o recurso UMA'. Mais uma vez, não fiz progressos na tentativa de desvendar essa lógica.

.... ufa. Quando eu digo assim, parece muito pior do que eu pensava. Suponho que, ao que parece, este é um pedido de ajuda.

Tom W
fonte
5
Quão boa é a empresa em fornecer software que o cliente usa e gosta? Em outras palavras, a equipe está obtendo bons resultados, apesar de você não acreditar que o processo seja estelar?
Robert Harvey
@ Robert Harvey - É difícil para mim julgar. Os produtos são extremamente de nicho e nós (desenvolvedores) recebemos mensagens contraditórias. Por um lado, novos clientes em mercados inovadores estão debulhando o produto mais do que imaginávamos e, consequentemente, encontrando falhas, as quais eles não parecem se importar, já que explicamos o porquê e os corrigimos rapidamente. Por outro lado, alguns grandes clientes institucionais desconfiam e estamos começando a ser criticados por alterar repetidamente o modelo. A equipe de software é uma das poucas que estão no ponto de equilíbrio da empresa atualmente, por isso estamos bem no momento .
Tom W
11
Eu solicitaria o máximo de feedback possível dos clientes sobre formas de chegar a acordo sobre um "modelo" básico de trabalho e tentaria solidificá-lo um pouco. De fato, pode ser frustrante para os clientes a mudança de um modelo, mas se for um software novo e de vanguarda, ele vai para o território.
Robert Harvey
Boa pergunta. Percebi que, mesmo com um público receptivo, a mudança real é difícil, a menos que você possa vê-la funcionando na prática. Meu conselho é tentar abordagens para aumentar sua produtividade primeiro e depois demonstrá-las para a equipe. Com a prática, você pode ficar mais rápido no desenvolvimento do TDD do que escrever / depurar / repetir.
Mike B

Respostas:

19

Deixe-me bancar o advogado do diabo por um momento:

A especificação das tarefas em questão é escassa ... O Lead Lead gosta muito do que ele chama de 'prototipagem'

O desenvolvedor líder gosta de prototipar porque as especificações são escassas. Provavelmente isso é uma coisa boa; é assim que as lojas iterativas funcionam.

Espera-se que os modeladores nos digam tudo sobre a metodologia desejada em detalhes precisos

Isso não funcionará em uma loja iterativa. A própria natureza do desenvolvimento iterativo é que os requisitos geralmente são incompletos. As iterações são o que é necessário para detalhar os requisitos.

Eu tentei colocar o TDD na equipe antes, mas achei difícil, pois é novo para mim

Isso também não vai funcionar; você precisa entender a tecnologia antes de poder evangelizá-la. Além disso, em uma loja iterativa com requisitos escassos, o TDD pode estar sobrecarregado demais. É melhor incentivar a cobertura adequada dos testes de unidade.

Agora, temos um servidor de integração contínua, mas é usado principalmente para executar testes de regressão de várias horas.

Isso pode ser apropriado em uma pequena loja iterativa.

Toda vez que levanto a questão da qualidade com o desenvolvedor líder, recebo uma resposta para o efeito de 'O recurso de teste A é direto, o recurso B é muito mais importante para o usuário, mas é muito difícil de testar, portanto, não devemos testar o recurso UMA'

Parece que sua loja tem algumas restrições de tempo bastante apertadas; goste ou não, você está vinculado por essas restrições.

Também parece que você veio de uma parte da indústria de software que valoriza fazer as coisas "da maneira certa" em vez de colocar as coisas no mercado primeiro. Não há nada de errado nisso (é admirável, de fato), exceto que o primeiro a comercializar com um software de buggy geralmente é o vencedor. Não é justo, mas é assim que é.

Robert Harvey
fonte
Eu acho que você precisará abordá-lo de uma perspectiva de "dívida técnica". Toda empresa faz estimativas de tempo; supondo que você já seja muito bom, comece a criar um excedente de 10% a 20% em suas estimativas de tempo para refatoração e treinamento e mantenha-o firme.
Robert Harvey
Continuar; Desenvolvimento iterativo é o nome do jogo, você acertou. O problema é que a iteração desaparece antes de realmente terminar, porque recebemos banalidades dos modeladores sobre se o que codificamos ou não está realmente correto. Ninguém pode identificar nenhum erro, então o que fizemos foi enviado. Seis meses depois, parece estar errado. Eu gostaria de ser capaz de apontar que os modeladores precisa ser dada critérios mais firmes para contra teste, mas, novamente, não é o seu trabalho para dizer isso?
217156 Tom
2
@ Tom: Desde que você não insista nas especificações testáveis ​​dos modeladores, eles sempre poderão dizer à sua equipe que eles entenderam errado. Se eles vão responsabilizá-lo pela produção de resultados a partir do modelo deles, você deve responsabilizá-lo por fornecer especificações testáveis para que você possa declarar sucesso. Toda especificação deve ter construído algum tipo de teste "vá, não vá", para que você e o cliente (ou os modeladores) possam concordar mutuamente que o teste foi aprovado, sem estar sujeito a interpretação.
Robert Harvey
Muito bem. Infelizmente, você pode estar me obrigando a admitir algo que eu não queria - que temos falta de competência. É evidente em geral, mas principalmente com os modeladores. Para alguns aspectos, insistimos em especificações firmes, mas isso ainda acaba errado. Eles são cientistas e, por experiência própria, os cientistas tendem a tratar o código como um experimento - corrige os erros à medida que avança. Para os negócios, isso simplesmente não é bom o suficiente e é uma questão de profissionalismo que deve reconhecer isso.
Tom W
Não há nada errado em tratar o código como um experimento; isso faz parte do processo iterativo. Mas, eventualmente, você precisa contornar "esse código aceita essas entradas e espera-se que produza essa saída". É para isso que servem os testes de unidade; eles fazem parte da especificação. Eu posso ver por que você quer fazer TDD; força as especificações ao código ... Mas você precisa de suporte da cultura corporativa para fazer esse trabalho, e o TDD tem um ar de "religião". Nem tudo é testável dessa maneira; portanto, no final, você pode ter que conviver com um certo grau de desconforto.
Robert Harvey
2

Vou focar na prototipagem aqui

O principal problema dos protótipos é que eles são feitos como prova de conceito

no entanto, se você não puder desenvolver mais o protótipo e precisar reconstruir o produto final a partir do zero, poderá não ter construído o protótipo e gastou seu tempo construindo-o

meu conselho para sua equipe é obter alguma qualidade e flexibilidade nesses protótipos. Sei que não é possível criar coisas perfeitas pela primeira vez, mas tente permanecer extensível para requisitos futuros

catraca arrepiante
fonte
É isso que venho tentando comunicar há algum tempo. Por acaso, os protótipos geralmente são valiosos e nos ensinam lições essenciais sobre a natureza do problema. No entanto, se essas lições são aprendidas ou não, é deixado ao acaso, e a qualidade da implementação depende do desenvolvedor reconstituir o conhecimento adquirido do cérebro, em vez de usar o protótipo para escrever as especificações. O desenvolvedor líder diz que o último deve acontecer e não garante que isso aconteça.
Tom W
quando ele diz que quer um protótipo, o que ele quer dizer é que ele quer uma versão de trabalho mínima e o mais rápido possível. Essa será a base da versão final. O problema com a abordagem é que os desenvolvedores juniores (geralmente) podem escrever código bom ou rápido, mas raramente podem fazer as duas coisas ao mesmo tempo.
Kevin
2
Fred Brooks disse: "Escreva alguém para jogar fora, você irá de qualquer maneira", isso é tão verdadeiro hoje quanto há 40 anos.
mattnz
1

Essas são boas respostas. Só posso acrescentar que "tentar se comunicar" é, na melhor das hipóteses, uma proposição duvidosa. As mudanças na maneira como uma organização trabalha não ocorrem rapidamente. Quando isso acontece, geralmente é como uma maré, onde o momento se desenvolve a partir de baixo e de cima. Portanto, você ficará mais feliz se manter as expectativas baixas e aguardar a chance de dizer como as coisas serão feitas ou esperar trabalhar com outra organização.

Mike Dunlavey
fonte
1

Você identificou alguém na empresa que "entende"? Se assim for, prenda-se a esse cara e aprenda o máximo possível com ele. Caso contrário, espere um pouco, comece a aprender e a crescer por conta própria (participe de um projeto de código aberto ou inicie seu próprio projeto) e procure um lugar que possa promover seu crescimento.

A pior coisa que pode acontecer é que você fique lá e aprenda a fazer as coisas da maneira errada. Sim, deve haver algum pragmatismo, mas uma equipe verdadeiramente qualificada pode fazer as coisas da maneira certa e ainda estar no prazo com um produto de qualidade. Parece que sua equipe atual não tem o que é preciso e você deve começar a procurar uma nova.

Michael Brown
fonte
"Você identificou alguém na empresa que" entende "" LOL
Kenzo