Quando é bom sacrificar a “limpeza” do design para concluir um projeto?

15

Ao trabalhar em um produto que precisa ser feito em breve e que funcione bem, quando é bom sacrificar a manutenção e a "arrumação" do design, a fim de fazer a coisa sair rapidamente e rapidamente? E até que ponto tudo bem, especialmente quando as técnicas usadas para torná-lo "puro" são novas para mim?

Mr. Jefferson
fonte
3
Somente quando for absolutamente necessário.
FrustratedWithFormsDesigner
1
É praticamente a norma em que trabalho. "Você pode pagar pode agora ou pode me pagar mais tarde" nunca foi tão verdadeiro.
MetalMikester
Parece que um prazo iminente ... #
1
Vou adotar a visão contrária e dizer sempre . Se um projeto não for concluído, ninguém se importa se é arrumado.
drxzcl
1
@ MrJ, eu estava realmente pensando nos usuários.
drxzcl

Respostas:

18

Lembre-se de que você está empregado para apoiar um negócio. De alguma forma, seu software está afetando os resultados da empresa. Você precisa encontrar um equilíbrio entre uma solução tecnicamente perfeita e o tempo de comercialização do seu produto e quanto benefício a empresa obterá dele.

Na minha experiência, os desenvolvedores costumam ficar preocupados com a perfeição técnica. Porém, existem razões muito válidas para sacrificar atributos de qualidade, como manutenção ou desempenho, a fim de obter um produto mais rapidamente. Depende do negócio e do produto. Mas "sempre busque um design perfeito" é uma abordagem simplista demais.

No final do dia, a única coisa que importa é o valor para os negócios. Descubra como maximizá-lo a curto e longo prazo e almeje esse objetivo.

RationalGeek
fonte
3
Concordo com o espírito da sua resposta, mas você está perdendo alguns detalhes. You need to strike a balance between a technically perfect solution, and the time to market of your productEu discordo, isso está além da responsabilidade de um desenvolvedor. Eles absolutamente devem permanecer cientes disso, mas devem fornecer as informações a alguém responsável por tomar uma decisão comercial.
StuperUser
2
Veja a Blizzard, por exemplo. Eles têm um enorme sucesso com seus jogos e realmente não se importam com o tempo de lançamento no mercado, pois pensam que uma qualidade superior acabará por dar frutos. E sim, embora provavelmente não seja para todos os tipos de software.
Falcon
1
Concordo absolutamente com @StuperUser e @ Peter Rowell. Muitas vezes, é responsabilidade do desenvolvedor comunicar os riscos técnicos, os problemas com os cortes de cantos etc. para as pessoas mais altas da cadeia alimentar que tomam a decisão. Se esse é o seu papel, você deve se concentrar em comunicá-lo com a maior precisão possível. No entanto, quanto mais você entender o que impulsiona a cadeia de valor do negócio, melhor será a comunicação.
RationalGeek
1
@ Falcon Blizzard pode realmente sacrificar ganhos de curto prazo no lançamento inicial para jogos de longo prazo em um jogo sólido, estável e agradável. Talvez esse seja o equilíbrio apropriado para eles. Mas não é o equilíbrio apropriado em todos os casos.
RationalGeek
4
A realidade é que a maioria dos novos produtos de software falhará no mercado, não devido a problemas de qualidade, mas porque os clientes simplesmente não os querem. Portanto, dedicar muito tempo / esforço à criação de uma arquitetura sólida e manejável na versão 1 do produto pode não ser o melhor uso de recursos. Os empresários que se esforçam para conseguir alguma coisa pela porta não são os idiotas que muitos de vocês pensam que são; Colocar um produto nas mãos dos clientes para determinar a viabilidade é uma coisa muito inteligente a se fazer.
precisa
12

O termo "dívida técnica" é muito útil para ajudar a informar decisões de negócios como esta. Qualquer trabalho que você não faça agora causará uma quantidade de trabalho mais tarde. Assim como nas finanças, assumir uma dívida é arriscado, mas pode valer a pena alavancar se você puder pagar a dívida mais tarde.

Dito isto, a dívida técnica não é uma proporção de 1: 1 no momento da recuperação. Os erros são mais caros de corrigir após o lançamento, e o impacto na produtividade futura ao desenvolver a partir de um sistema legado confuso pode ser escandaloso. Você pode estar gastando o dobro do tempo corrigindo seus erros, ou talvez 1.000 vezes mais horas de trabalho e recursos.

Seu trabalho nesta decisão é entender as ramificações das peças específicas que você está considerando e depois comunicar essas ramificações às pessoas que tomam a decisão de negócios. Essa habilidade de estimativa específica pode exigir muita pesquisa e trabalho de sua parte para se desenvolver bem agora, mas será inestimável durante sua carreira.

Ethel Evans
fonte
1
+1. A dívida técnica é realmente a maneira mais clara de descrever isso.
crazy2be
8

Quando é aceito e as consequências são entendidas pelo proprietário / cliente / usuário.

Um encanador deve remover um depósito de lixo para reparo. Eu quero usar a pia nesse meio tempo, mas ele teria que me cobrar pelo tempo e materiais para colocar em tubos temporários usando fita adesiva que poderia quebrar. Isso também atrasará a remoção do descarte para a oficina. Se eu aceitar o faturamento adicional com o entendimento de que arrisco um entupimento. Levará um dia mais para consertar o descarte e um atraso ainda maior antes que ele possa devolvê-lo, isso é aceitável.

Você pode estar dentro do prazo e do orçamento agora, mas sacrifique / arrisque uma cobrança ainda maior a longo prazo. Pode ser difícil fazer com que pessoas não técnicas entendam, mas é para isso que serve a equipe de vendas.

JeffO
fonte
5

Muitas pessoas desistem rapidamente ao aprender algo novo e apenas fazem isso da maneira que sempre fizeram. Se esse for um padrão, seu código não apenas sofrerá, mas suas próprias habilidades como programador permanecerão limitadas.

Ainda assim, no final do dia, o único software de sucesso é aquele que é enviado.

Jeremy
fonte
"Ainda assim, no final do dia, o único software de sucesso é aquele que é enviado". Até cair e queimar alguns anos depois, porque não foi arquitetado corretamente. Miopia em ação.
Wayne Molina
1
Se você nunca enviar, nunca conseguirá fazer isso por vários anos ...
Jeremy
Se você não pode enviar algo que não vai ferrar você a longo prazo devido ao gerenciamento míope, você não merece estar no negócio em primeiro lugar!
Wayne Molina
3

Após o prazo final passar. E mesmo assim, é um grau muito baixo de "OK". Após o prazo final, é claro que é discutível. Porque essa é a natureza de prazos rígidos.

Além disso, isso incorre em dívida técnica. A cada hora / dia que você gasta cortando cantos na mentalidade de fazer coisas mais caras, custará aproximadamente o dobro do tempo na próxima vez que você precisar tocar nesse projeto. Se você precisar, é melhor se apressar, enviar e imediatamente começar a consertar toda a sua fita adesiva. Voltar a um projeto hack-eyed anos depois é um pesadelo. Se você nunca mais tocá-lo novamente, que assim seja, ninguém se importará. Mas a única vez que deixei um projeto para sempre é quando troquei de emprego.

Lembre-se, porém, que o cronograma dessas coisas é o trabalho do gerente de projetos. Se você é apressado para cumprir um prazo, a culpa é do MP. Faça certo, faça-o uma vez e faça-o com calma e corretamente. A vida é muito curta para qualquer outra coisa.

Philip
fonte
2

Todas as outras respostas postadas aqui são boas. Gostaria de acrescentar que, como desenvolvedor do projeto, você é o administrador (protetor) do design.

Se você não defender a solução técnica adequada, ninguém mais prometerei. Você deve sempre argumentar por fazer as coisas da maneira certa com seu chefe, e o primeiro-ministro sempre deve argumentar a favor do prazo.

Felizmente, se você estiver em uma organização razoável, será alcançado um compromisso que ajude a cumprir os prazos e também não se afaste muito do design ao mesmo tempo.

Com isso dito, não assuma que, se o prazo do PM não for atingido, o mundo terminará e o projeto falhará. Geralmente não é tão preto e branco e, na maioria das vezes, o prazo do PM é suave e tem espaço para ajustes.

Quase todos os prazos em que estive dentro do cronograma da MP eram principalmente artificiais. Eles vão defendê-lo com unhas e unhas e fingem o contrário, porque se o PM adiar o prazo, o PM parecerá ruim!

Só porque o PM parece ruim não significa que o projeto falhou. Se você entender isso, ficará surpreso com o quanto você consegue dobrar um PM.

maple_shaft
fonte
1

Cite o cliente para o design elegante. Se essa cotação for inaceitável para eles, descreva quanto custará cada componente (geralmente custa == tempo de desenvolvimento). Deixe-os retirar itens "à la carte", se assim o desejarem. Muitos apostam no tempo de poupar para coisas "inúteis", como testes e design. Explique os riscos dessa abordagem, mas se eles aceitarem o risco, proceda como indicado. Se eu só tiver dinheiro suficiente para comprar um carro velho, comprarei um carro velho, mesmo que eu saiba que provavelmente quebrará em 8 meses. Seu cliente tem a responsabilidade de ponderar esses riscos e aceitar as consequências.

A única coisa que você não deseja fazer é informar ao cliente que ele possui um software muito bem projetado, quando paga apenas por (e recebe) um lixo não testado. Se algo der errado (o que provavelmente ocorrerá), no primeiro cenário, eles parecerão ruins, mas no segundo cenário, você parecerá ruim.

Morgan Herlocker
fonte
1

Nunca é bom, mas às vezes você precisa se comprometer para finalizar um projeto. A triste realidade é que a maioria dos empresários é completamente ignorante e está mais do que disposta a sacrificar a manutenção mais tarde por algo agora. O truque é saber como encontrar um equilíbrio; talvez o projeto não seja tão elegante quanto poderia ser, mas contanto que não seja um porco, é um compromisso digno.

Wayne Molina
fonte
0

Isso depende inteiramente da pergunta "Você ou alguém mais deseja modificá-lo mais tarde?" Se sim, você deve tentar ter um design "elegante", caso contrário corre o risco de jogar tudo fora e começar de novo 6 meses depois.

Obviamente, você pode levar muito longe a limpeza, mas geralmente um pouco de limpeza o poupará mais tarde.

Jo-Herman Haugholt
fonte
4
Não existe um produto que não exija manutenção, não importa o que o cliente diga.
Edward Strange
@ Eddie louco Praticamente não. Era para ser uma pergunta carregada; Não consigo pensar em muitos casos em que você responderia "não" a essa pergunta. Mesmo um script rápido, com apenas uma coisa e nunca mais ser usado novamente, poderia ser editado e reformado mais tarde.
Jo-Herman Haugholt