Recentemente, iniciei um projeto que não parecia muito difícil de fazer, o conceito era um aplicativo bastante simples que precisava aceitar informações de vez em quando (talvez 10x por dia) e tentar executar algumas operações nelas e coletar todos os resultados no fim. Esse aplicativo obteria um portal da web front-end que os clientes poderiam usar para visualizar os resultados, não exatamente a ciência dos foguetes.
Para isso, inicialmente fiz um uso inteligente das bibliotecas de simultaneidade internas do Python ( ThreadPoolExecutor
) e usei uma biblioteca fácil de usar para o front-end (escolhi o Flask, pois é fácil para iniciantes e é relativamente fácil de manter e testar).
Quando estávamos na metade do projeto, o PM declarou que tínhamos que usar recursos de filas de mensagens de terceiros em vez de threads e tivemos que implementar o balanceamento de carga. O que acabou acontecendo foi que começamos a trabalhar com Celery, Redis, RabbitMQ, Nginx, uWSGI e vários outros grandes serviços de terceiros com os quais ninguém tinha experiência real.
No final, isso levou a um monte de código espaguete, tarefas não testáveis (devido à complexidade de bibliotecas de terceiros, o patch do código nem funcionou) e um monte de dores de cabeça porque ninguém sabia o valor agregado desses serviços. .
Antes de dizer "Sim, você deve usar esses serviços", lembre-se de que ninguém sabe como usá-los ou mesmo sabe o que eles fazem, além de introduzir um código afetado pelas condições de corrida.
O que devo fazer sobre isso? Nesse ponto, seria simplesmente muito caro reverter para o que tínhamos e o PM está impaciente ao usar esses serviços, mesmo que o produto final esteja agora em pior situação do que no início. Existe alguma utilidade em discutir isso com ele? Peço mais tempo? Ou a resposta dura, sou burra demais para o meu trabalho?
fonte
Respostas:
Isso não é apropriado para um PM "declarar" unilateralmente. Duas razões:
As decisões de projeto devem ser tomadas por um recurso técnico e somente em resposta aos NFRs . Portanto, pergunte educadamente ao seu PM se existe uma nova NFR e se você pode obter detalhes.
Se um NFR estiver sendo introduzido no meio do projeto, provavelmente isso deve ser feito através de um controle de alterações . O controle de mudanças é muito importante da perspectiva da governança; não seria apenas uma entrada para os seus requisitos, mas também é uma entrada importante para os casos de teste do controle de qualidade, o manual de implantação e suporte das operações e (aqui é a parte realmente importante) o cronograma do gerente de vendas . Se o novo requisito introduzir mais trabalho, a equipe de desenvolvimento deve ter a oportunidade de comunicar novas estimativas de desenvolvimento, e o PM terá que decidir se pode viver com a nova data, adicionar mais recursos ou pressionar a parte interessada que introduziu o NFR.
Agora, se realmente existe uma NFR de boa-fé e não há como contorná-la, também pode ser apropriado solicitar recursos novos ou diferentes que tenham familiaridade com as tecnologias que estão sendo introduzidas ou solicitar um orçamento de treinamento para alguns de seus programas existentes. Recursos. Portanto, há um aspecto de custo também.
Se você fala o idioma do PM - cronograma e custo - acho que você terá mais tração do que falar sobre como os desenvolvedores se sentem sobre o design resultante. Essas coisas têm um impacto real.
Um PM deve saber melhor do que introduzir coisas como essa em tempo real, sem governança, sem controles e sem consenso. Se eles simplesmente não entenderem, pode ser necessário passar para o gerenciamento de produtos ou gerenciamento de programas, pois ele está colocando em risco a qualidade e o cronograma desnecessariamente.
fonte
O que seria estúpido é se deixar levar pela morte .
O que você está descrevendo é que perdeu o senso crítico. Não há senso de controle e não há um caminho claro de volta.
A última coisa que você deve fazer é trabalhar duro, manter a cabeça baixa e sofrer silenciosamente até que eles finalmente admitam que o projeto está condenado.
O que você deve fazer é pensar muito sobre o que você tem todo o direito de esperar.
Se eles querem que você use tecnologias que você não entende, espere tempo para aprendê-las. Não tenha vergonha do que você não sabe. Use sua ignorância como um bastão. Quando eles exigem que você use alguma coisa, pergunte o porquê. Não aceite 'porque'. Não aceite as "melhores práticas modernas". Não aceite 'capacidade de escala' sem obter expectativas reais e testáveis.
Por testável, quero dizer que eles precisam dizer quantos pedidos por dia / hora / minuto eles querem que ele possa fazer. Deixe claro que você pretende criar algo para exercitar esse sistema de acordo com essas especificações.
Dessa forma, você pode usar uma avaliação gratuita de 30 dias para provar que a última coisa que eles querem vale a pena ou se é melhor seguir o que você já conhece.
Agora tenha em mente. Não foram as ferramentas que introduziram o código atormentado pelas condições de corrida. Vocês fizeram isso. Você precisa aprender COMO você fez isso para poder desfazer isso.
E não. Não é muito caro voltar ao que você tinha. O PM não pode ter o que quer apenas exigindo. Você precisa recuar até poder usar efetivamente o que o PM deseja ou provar que não é o que o projeto precisa.
Sério, ceder a isso não é profissional e mortal para o projeto.
Eu estive aqui cara. Mais de uma vez. Isso faz você se sentir estúpido. Realmente não é isso. Você está apenas perdido.
Fale com o PM. Honestamente. Esqueça tudo. Mostre que você está disposto a aprender, mas não quer ser levado para um passeio. Nunca, jamais, crie ou codifique com base na fé. Faça o PM mostrar como fazer o que eles querem. Não finja que entende quando não entende. Não diga que isso será feito quando não acontecer. Se você vai acreditar em algo, acredite em si mesmo. Você tem que estar disposto a dizer NÃO.
Se isso não funcionar, limpe o currículo porque você precisará dele em breve. De uma forma ou de outra.
fonte
Now keep in mind. It isn't the tools that introduced race-condition plagued code. You guys did that. You need to learn HOW you did that so you can undo that.
Sim, essa parte se destaca especialmente em mim. Seja aipo ou fios, qualquer tipo de simultaneidade pode introduzir condições de corrida. Os mesmos problemas podem ter existido no código baseado em encadeamento.Isso realmente deve estar no site workplace.stackexchange.com, porque o problema não é realmente uma questão de desenvolvimento de software, mas sobre relacionamentos no local de trabalho.
Se você tem certeza de que sua abordagem simples funcionaria e produziria um resultado rapidamente, seu PM é uma força destrutiva da sua empresa que deve ser removida. Descubra como elevar as notícias ao nível acima dele: que sua equipe tinha uma solução simples e funcional que fez um bom progresso e, por razões que ninguém pode explicar, seu gerente geral o forçou a tentar uma solução muito mais complexa, usando várias de ferramentas que ninguém sabe, ninguém entende, ninguém sabe se elas são úteis, e essa decisão insondável do seu gerente de contas causou todos os problemas e fez com que o projeto se atrasasse e não funcionasse.
fonte
Não conhecendo o contexto e a estratégia do produto adotada pelo seu gerenciamento, é difícil responder objetivamente à sua pergunta.
Aqui estão alguns argumentos objetivos. No entanto, é possível que não seja o que você esperava:
Por fim, a escolha econômica é de responsabilidade do seu gerente de produto. Discuta com ele os prós e contras, para garantir que ele tome uma decisão bem informada e não subestime a complexidade adicional. E se ele permanecer no caminho, tente alcançar o seu melhor: você não tem nada a perder e, na pior das hipóteses, terá uma nova tecnologia em seu currículo.
fonte
Existem duas abordagens para bibliotecas de terceiros (e outros componentes):
Minha abordagem é (2). Parece que sua abordagem também é (2), mas o gerente de projeto gosta da abordagem (1).
Existem três maneiras de lidar com essa situação. Você deixa o MP fazer o que quer, tenta convencê-lo a mudar a abordagem para bibliotecas de terceiros ou vota com os pés e seleciona outro trabalho.
Se você quiser convencer o PM a mudar a abordagem, considere estes argumentos:
Cuidado, especialmente se uma biblioteca se chamar de estrutura . Isso significa que a biblioteca exige que você construa todo o aplicativo em torno de si. Você geralmente não pode ter duas estruturas no mesmo aplicativo; eles lutarão entre si sem coexistir pacificamente. Biblioteca de utilitários de desenvolvimento da Web? Sim, por favor, existem muito poucos deles. Se alguma vez eu encontrar uma biblioteca melhor do que a que uso agora, posso usar a biblioteca recém-encontrada no novo código, continuando a usar a biblioteca antiga no código antigo. Estrutura de desenvolvimento da Web? Um grande NÃO buzinar !
fonte
Acho que o seu gerente de projetos está buscando um sistema difícil de gerenciar que produza muito trabalho de manutenção enquanto estiver em operação, para garantir sua renda.
Pessoalmente, você parece estar preso ao python, apenas esqueça o python por um tempo, não codifique no python por um ano, aprenda coisas novas; você verá que existem outras linguagens que podem fazer o mesmo e, provavelmente, melhor.
Como outros já disseram, aprenda as ferramentas antes de começar a codificá-las. Talvez sugira que seria bom avaliar a pilha necessária juntos, com base na pesquisa de diferentes ferramentas que parecem adequadas para a tarefa. Ou talvez pergunte como ele criou essa lista, ele poderia ter recebido ajuda de alguém que está atualizado.
fonte
Os desenvolvedores não devem ter medo de aprender a usar novas bibliotecas, estruturas, tecnologias, etc. Essa é uma parte essencial da descrição do trabalho de um desenvolvedor e é perfeitamente razoável alguém sugerir que a equipe trabalhe com coisas de terceiros que ninguém possui. experiência ou até exigir que a equipe o faça se estiver em posição de tomar decisões técnicas autorizadas para a equipe.
No entanto, não é razoável esperar que você possa usar uma nova tecnologia (muito menos várias novas tecnologias ao mesmo tempo)) na sua pilha e continue progredindo. Deveria ter sido planejado um tempo significativo para aprender os meandros da nova abordagem e descobrir um bom design para incorporar as novas peças, durante as quais não seria esperado nenhum progresso real no produto real (das pessoas que fazem esse trabalho de aprendizado / design) , que pode ou não ser a equipe inteira, embora, se não estiver, provavelmente precise haver mais tempo programado para as pessoas que aprenderam a transferir conhecimento para o restante da equipe). Esse é o custo de fazer esse tipo de mudança importante. Aprender novas tecnologias faz parte do trabalho do desenvolvedor, mas não é algo que acontece apenas com custo zero de tempo.
Parece que isso não aconteceu com a pergunta. As pessoas tentaram de alguma maneira criar boas implementações sobre tecnologias que elas mesmas não entendiam. Claro que o código resultante é terrível.
Tente convencer o seu PM que a empresa vai precisar de gastar mais tempo com isso. Ele virá na forma de parar agora, aprender e avaliar as novas tecnologias, descobrir um bom design e limpar a bagunça da implementação atual. Ou virá na forma de mais tempo desperdiçado em bugs, manutenção, desenvolvimento mais caro etc.
É impossível dizer se as opções técnicas descritas na pergunta (balanceamento de carga, filas de mensagens etc.) são realmente apropriadas. Eu não acho que "ninguém na equipe tem experiência em trabalhar com isso antes" é uma boa razão para absolutamente descartar uma decisão, mas faz aumentar o custo de curto prazo de tomar essa decisão (que pode alterar o " melhor "decisão para o contexto), e se o seu gerente de projetos não está considerando isso e espera que a equipe se torne imediatamente tão produtiva quanto as pessoas experientes, você deve recuar por esse motivo; eles definirão cronogramas de projetos altamente irrealistas, o que não é do interesse de ninguém.
fonte