Os desenvolvedores precisam entender o domínio comercial ou a especificação deve ser suficiente?

52

Eu trabalho para uma empresa para a qual o domínio é realmente difícil de entender porque é de alta tecnologia em eletrônica, mas isso é aplicável a qualquer desenvolvimento de software em um domínio complexo.

O aplicativo em que trabalho exibe muitas informações, gráficos e métricas difíceis de entender sem experiência no domínio. O desenvolvedor usa uma especificação para descrever o que o software deve fazer, como especificar que um gráfico específico deve exibir esse tipo de métrica e essa métrica é a seguinte fórmula aritmética.

Dessa forma, o desenvolvedor realmente não entende o negócio e o que / por que ele está realizando essa tarefa. Isso pode ser bom se a especificação for realmente detalhada, mas quando não for ou quando o autor esquecer um caso de uso, é muito difícil para o desenvolvedor encontrar uma solução.

Por outro lado, o treinamento de todos os desenvolvedores em todos os aspectos do negócio pode ser muito longo e difícil.

Deveríamos dar mais importância à especificação detalhada (mas, como sabemos, não existe uma especificação perfeita) ou devemos treinar todos os desenvolvedores para entender o domínio comercial?

EDIT: lembre-se de sua resposta de que a empresa poderia usar desenvolvedores externos e que uma formação para todo o domínio pode demorar cerca de 2 semanas

Jerome C.
fonte
Bons desenvolvedores se treinam principalmente.
Kevin Cline
20
@kevincline: nem todos os domínios se prestam a um auto-aprendizado fácil.
FrustratedWithFormsDesigner
Quão realista é ter uma especificação detalhada que não possua algum conhecimento de domínio? Há também o compromisso de obter mais detalhes na especificação de que isso pode levar mais tempo e, portanto, não vale a pena em alguns casos.
JB King
22
Penso que quanto mais complexo o domínio, mais crítico é que os desenvolvedores o entendam e mais crítico é não terceirizar o desenvolvimento.
HLGEM
3
Nota: s / desenvolvedores / testadores / nesta pergunta e ainda é relevante.
Joshin4colours

Respostas:

114

A especificação praticamente nunca é suficiente. Os desenvolvedores que não possuem conhecimento de domínio não podem apontar quando a especificação está com erro (uma ocorrência frequente na maioria dos lugares) e fazer más escolhas de design.

HLGEM
fonte
52
+1 Porque eu já vi isso acontecer na vida real. O Sr. Desenvolvedor pediu repetidamente à empresa para verificar um requisito, a empresa garantiu à equipe que o requisito estava correto e o desenvolvimento foi forçado a embaralhar no dia seguinte ao lançamento, porque os negócios violavam a lei estadual em dois estados.
Joshua Drake
9
ou, de outra forma, uma especificação suficientemente detalhada é o código-fonte e, portanto, exige que um desenvolvedor com conhecimento de domínio o escreva
jk.
@ Josué - não é esse um caso em que havia pouco sentido em ter conhecimento de domínio? - os desenvolvedores deveriam implementar as especificações independentemente (pelo menos até o dia do pânico).
Steve314
3
@ Steve314 justo o suficiente. E, no interesse da honestidade intelectual, o desenvolvedor lembrou principalmente a discussão sobre a implementação do recurso original e até teve um comentário de código sobre não remover essas informações, de acordo com jk. Descobri que o conhecimento do domínio geralmente ajuda o desenvolvedor a saber onde estão os buracos, ou pelo menos é provável que estejam, na especificação, permitindo maior qualidade e rapidez no atendimento das necessidades dos negócios.
Joshua Drake
2
O proprietário de uma empresa pode contratar um desenvolvedor, mas, no final, a especificação é mantida por ele. Quando você se coloca diante das legislaturas estaduais, não pode dizer "Mas me disseram para fazer isso" ou "fortaleza intelectual não era conveniente". Isso não será suficiente. Lembre-se disso.
perfil completo de Ben DeMott
63

Na minha experiência, tendo trabalhado em três setores muito diferentes agora, você pode começar a não conhecer muito sobre o domínio, mas precisará aprendê-lo eventualmente e alguém terá que entendê-lo detalhadamente.

O problema essencial é da impedância cliente-desenvolvedor: eles querem algo, mas só sabem quando o veem e você quer resolver o problema deles, mas nem sempre consegue ter uma idéia clara do que é esse problema. Quanto mais conhecimento do domínio da indústria (do cliente) você (o desenvolvedor) puder trazer, mais fácil poderá traduzir "desejos" vagos em "problemas" concretos e resolvê-los.

Como exemplo anedótico, meu trabalho anterior foi na indústria química, envolvendo software de gerenciamento de plantas. Comecei com zero conhecimento do domínio, mas consegui implementar o código necessário para resolver os subproblemas apresentados a mim pelo desenvolvedor sênior e pelos clientes. Com o tempo, fiz um esforço para aprender o setor, para que eu pudesse me comunicar mais rapidamente no nível do cliente. Ao entender a indústria deles, comecei a entender quais eram os problemas reais. Quando eles dizem coisas como "precisamos rastrear todos os valores de dados neste módulo", posso traduzir isso para o que realmente significam, que é "precisamos manter um registro histórico de cada valor que esse sensor gera, armazenado por X dias de retenção, mas sempre avaliada com base nas leituras mais recentes desse sensor ".

Então, sim, alguém precisa de conhecimento de domínio e, de preferência, de um desenvolvedor, porque os problemas de domínio não são problemas de código e a tradução entre os dois não é trivial. Eventualmente, qualquer desenvolvedor que valha a pena manter em sua equipe deve escolher o domínio, para que eles possam fazer escolhas mais informadas sobre as nuances de seu código.

CodexArcanum
fonte
7
Regras ocultas - acho que são a norma e não a exceção.
Preet Sangha
16

ALGUÉM no projeto precisa ter um conhecimento de domínio bastante completo. Essa pessoa pode ou não ser o desenvolvedor.

Nos projetos Agile, o proprietário do projeto cliente é essa pessoa e eles estão trabalhando de forma colaborativa e próxima com a equipe. Em projetos não-ágeis, alguém da equipe precisa adquirir esse conhecimento, mas geralmente não o faz, e esse é um dos motivos pelos quais os projetos não-ágeis são tão propensos a falhas.

Dan Ray
fonte
+1, os desenvolvedores (como não os arquitetos de sistemas) não devem exigir nenhum conhecimento do campo. Em uma organização perfeita, a codificação deve ser feita em pedaços pequenos o suficiente que não exijam nenhum conhecimento do produto final. Agora, quantas "organizações perfeitas" existem no mundo ... Geralmente é algo como: Adicione um recurso explicado com uma linha contendo frases: você sabe, mais ou menos como nesta página da Web, ...
Juha
11
Não acho que o proprietário do produto, por si só, ter conhecimento do domínio seja uma receita para o sucesso.
Casey
11

Existem muitas respostas excelentes. Eu adiciono o meu porque, depois de lê-los e pesquisar, descobri que ninguém menciona uma questão-chave: bugs .

Se a equipe não receber pessoas suficientes com autoridade e domínio suficientes, erros mais cedo ou mais tarde surgirão inevitavelmente. Dado o conhecimento do domínio, existem valores / resultados / relacionamentos impossíveis ou não sensoriais. Pode-se esperar que uma especificação os indique explicitamente, mas, na realidade, o melhor que você pode alcançar é evitar os mais óbvios (alertar-me se as taxas de juros se tornarem negativas ou coisas assim - isso pode ou não ser um erro, mas é estranho o suficiente para ser digno de nota).

Isso está fortemente relacionado à compreensão dos motivos das escolhas e, na melhor das hipóteses, também leva a um software melhor (porque se alguém realmente sabe o motivo por trás de uma solicitação, é capaz de pensar sobre ela, em vez de ter que aceitá-la como um dado )

Lembre-se de que Einstein disse: "Mas pensamento e idéias, não fórmulas, são o começo de toda teoria física." , Ou seja, não se pensa em termos de fórmulas abstratas, mas de idéias ...

Francesco
fonte
11
Sim, e muitos desses são itens (como seu exemplo de interesse negativo) que são tão básicos para o domínio comercial, nunca lhes ocorre especificá-los como "todo mundo" sabe disso.
HLGEM
10

Se você colocar uma pessoa que conhece apenas inglês e uma pessoa que conhece apenas japonês em uma sala, ela não poderá traduzir do japonês para o inglês, apesar de ser especialista em seus respectivos idiomas. Pelo mesmo motivo, mesmo programadores especialistas sem conhecimento de domínio são incapazes de descobrir o que precisam criar, mesmo quando têm acesso 24x7 ao melhor especialista em domínio que também não é especialista em desenvolvimento de software.

Uma especificação é uma tentativa de traduzir "japonês" dos requisitos de domínio para o "inglês" dos requisitos de programação. Quando você obtém uma qualidade de tradução comparável à do Google Translate, é seu dia de sorte; Na maioria das vezes, a qualidade simplesmente não existe, portanto você não tem como adquirir pelo menos algum conhecimento do domínio. Com alguma persistência, faz de você um "tradutor" decente até o final do projeto, de modo que seu valor para a sua empresa cresce significativamente. Na maioria das vezes, você também se diverte muito no processo, por isso é uma situação em que todos saem ganhando.

dasblinkenlight
fonte
"Pelo mesmo motivo, mesmo programadores especialistas sem conhecimento de domínio são incapazes de descobrir o que precisam criar, mesmo quando têm acesso 24x7 ao melhor especialista em domínio que também não é especialista em desenvolvimento de software". - Não. Os programadores obtêm o conhecimento do domínio (em parte) entrevistando o especialista em domínio. O especialista em domínio pode dizer aos programadores o que ele deseja criar. Os programadores devem aprender o suficiente sobre o domínio para poder discutir recursos com o especialista em domínio.
Marnen Laibow-Koser
@ MarnenLaibow-Koser A necessidade dos desenvolvedores de obter conhecimento de domínio é o ponto da segunda parte da minha resposta. O "conhecimento" pode vir de um especialista, de um livro, da internet e assim por diante; ter acesso a um especialista é útil, mas não instrumental.
precisa saber é o seguinte
Esse não é o meu principal ponto de discordância. Meu principal ponto de discordância é a sua afirmação de que o acesso a um especialista em domínio não ajudará os programadores a descobrir o que precisam criar. De fato, é exatamente esse acesso que mais ajudará os programadores - e eu sei porque fiz isso exatamente em vários projetos.
Marnen Laibow-Koser
8

Sem algum aspecto do conhecimento comercial, você acaba com desenvolvedores que não fazem perguntas e codificam sem pensar o que dizem as especificações. Acredito que são necessários "pensadores" para criar um bom software, não apenas pessoas que podem tocar em um teclado. Compreender não apenas "O que" você está fazendo, mas "Por que" e como ele se encaixa no quadro geral ajuda a proporcionar maior satisfação à equipe de desenvolvimento.

Michael Hayes
fonte
6

Eu acho que você deve tentar obter o conhecimento do domínio. Especificações são uma lista de verificação dizendo o que o produto final deve fazer e é necessário para a validação do seu produto. Como desenvolvedor, você deve sempre tentar entender qual é o verdadeiro problema que você está tentando resolver. Obter o conhecimento do domínio ajudará você a entender isso.

Isso o ajudará a projetar e codificar facilmente, pois você entenderá o que está mudando de peças (por exemplo, conjunto de regras) e as colocará separadamente. Você não precisa ser um mestre nisso, mas poderá falar com um usuário final no idioma deles .

Você pode dirigir um carro com conhecimentos básicos sobre ele; mas se você quiser aproveitar o passeio, precisará aprender mais sobre como usá-lo exatamente. Como em outras negociações, não é obrigatório entender o domínio, mas é divertido quando você faz isso .

ManuPK
fonte
5

Eu acho que um desenvolvedor que conhece o negócio vale seu peso em ouro.

Em um cenário "tradicional", onde a empresa possui alguns requisitos e alguns analistas de negócios os traduzem em requisitos técnicos, o desenvolvedor trabalha com aqueles que você inevitavelmente tem duas coisas que podem acontecer:

  1. Você tem vários pontos de falha. O analista de negócios pode não ter conseguido traduzir todos os requisitos de negócios perfeitamente e / ou o desenvolvedor pode não traduzi-los perfeitamente em uma especificação técnica. Uma variante do cenário "segredo ao redor da sala". Apenas as exigências da comunicação.

  2. Um ou todos os proprietários, analistas ou desenvolvedores de negócios são novos o suficiente para que a organização perca os itens-chave que eles não pensariam normalmente. O desenvolvedor experiente que conhece bem os negócios pode ajudar a educar as pessoas nessas outras funções para tornar o produto mais completo.

Jesse C. Slicer
fonte
Acordado. Se nada mais, é muito mais provável que a empresa chame esse desenvolvedor novamente, simplesmente porque o desenvolvedor "conhece as regras" e a empresa não precisa perder tempo treinando um novo programador toda vez que o departamento de TI optar por enviar o programador mais recente, genérico, em qualquer lugar e que faça de tudo para trabalhar no mais recente conjunto de requisitos.
quer
3

Quase sempre há trocas a serem feitas entre o valor de cada recurso da especificação, o quanto a especificação deve ser implementada com valor e o custo de atender a qualquer combinação de recursos de especificação. Frequentemente, boas trocas só podem ser feitas quando o conhecimento para fazer tudo o que precede existe em uma pessoa ou em uma equipe que trabalha de perto, incluindo o arquiteto e / ou codificador de software real.

Sem esse conhecimento extremamente localizado e possivelmente até sentimentos instintivos, o resultado pode facilmente acabar sendo um produto quase inútil, muito caro, que atende muito bem às especificações escritas.

O custo de criar uma especificação que não apresenta os problemas acima pode ser maior do que treinar o arquiteto e / ou codificadores para ter conhecimento de domínio suficiente para trabalhar com uma especificação menos inescrutável e detalhada (assumindo que as legalidades e os contratos de negócios permitam isso).

hotpaw2
fonte
2

Sim, os desenvolvedores precisam conhecer o negócio até certo ponto. Eles não precisam conhecer todos os detalhes, mas devem ter um entendimento básico de para que relatório o X é usado e como é usado no processo de negócios. Quanto mais seus desenvolvedores entenderem sobre os negócios, melhor a solução que eles podem oferecer.

Ryathal
fonte
2

Com base na minha experiência *, um único indivíduo com um bom conhecimento do domínio do problema e um bom conhecimento do desenvolvimento de software tem mais chances de encontrar a solução ideal para um problema do que dois indivíduos, um com excelente conhecimento do domínio do problema e outro com excelente conhecimento de desenvolvimento de software, trabalhando juntos.

Eu acho que tudo se resume ao simples fato de que a comunicação que acontece no cérebro de um único indivíduo é muitas vezes mais rápida e melhor do que a comunicação entre indivíduos.

* A principal experiência que estou utilizando para responder a essa pergunta é de mais de 10 anos gastos no desenvolvimento de um pacote de software de contabilidade (do início ao 'modo de manutenção'). Embora meu conhecimento sobre desenvolvimento de software tenha sido muito bom, em comparação com meus colegas, muitas vezes me senti prejudicada pela falta de compreensão do domínio do problema.

Daniel Pratt
fonte
Normalmente, descobri que quando um único indivíduo resolve um problema por conta própria, sem consultar os outros, isso gera mais rotatividade de código. Você não pode esquecer de incluir outras pessoas em sua arquitetura de software ... Talvez você conheça bem o domínio, mas o software não é um quebra-cabeça, você deve ter o layout mais de algumas vezes.
22418
2

Eu gostaria de responder como alguém vindo do lado comercial, que trabalha com desenvolvedores que demonstram pouco interesse em aprender o básico do comércio, às vezes até parece ter orgulho de não ter que saber sobre o básico: O problema é que o os desenvolvedores não poderão ver erros no resultado à primeira vista (resultados insalubres, sinais errados etc.), o que exige casos de teste detalhados (que não desenvolvemos até recentemente) ou supervisão constante dos resultados. Na medida em que estou disposto a aprender o básico do desenvolvimento de software para facilitar a comunicação, gostaria de incentivar os desenvolvedores a fazer o mesmo.

Devemos Jessen
fonte
2

Você não precisa, mas por que não gostaria?

Eu ficaria preocupado com qualquer programador que fosse relutante e especialmente incapaz de aprender o domínio em algum grau. É importante sair da "torre do código de marfim" de vez em quando.

Escrever código sem ter idéia de como é usado e com que finalidade parece um trabalho terrível. Quem quer apenas quebrar tijolos quando você pode construir catedrais?

JeffO
fonte
2

Quanto mais envolvido um desenvolvedor se tornar e mais sênior nos negócios, mais importante será ter pelo menos conhecimento de domínio de nível intermediário ou as áreas mais diferenciadas do setor que possam ser críticas não serão compreendidas pela equipe de desenvolvedores.

No entanto, uma especificação deve ser suficiente para tarefas de nível inferior. Em resumo, é melhor treinar sua força de trabalho para um nível mais baixo. Eles podem ser o melhor programador poliglota do mundo, mas, se não conseguem entender o assunto com profundidade, estão sempre fadados ao fracasso ou à programação da marcha da morte.

honra krystan
fonte
++ 1 "programação da marcha da morte". É como nos EUA a história do bebê alcatrão .
precisa saber é o seguinte
1

Sempre deve haver alguma especificação - você não pode esperar que todos os desenvolvedores se tornem especialistas em domínio. Ao mesmo tempo, se os desenvolvedores seguem cegamente uma especificação sem realmente entender para que serve, o resultado pode não ser realmente o que os clientes desejam. Muitas vezes acontece que quando um desenvolvedor tem um nível de entendimento um tanto decente (mas não especialista), pode detectar erros e omissões nas especificações. Eles também podem contribuir e dar feedback ao processo, o que pode tornar o produto final muito melhor.

Pode valer a pena contratar alguns especialistas em domínio cujo trabalho é estabelecer uma ligação entre os clientes e os desenvolvedores para ajudar a entender melhor os desenvolvedores e também para ajudar a escrever as especificações.

FrustratedWithFormsDesigner
fonte
1

Acho difícil dar uma resposta de qualquer maneira.

É difícil ver como, digamos, um desenvolvedor freelancer pode entender o negócio (ou ciência) por trás de cada aplicativo que ele desenvolve. Nesta situação, acho que é mais importante que o desenvolvedor saiba fazer as perguntas certas sobre a especificação ou o modelo de negócios do que realmente entender o próprio negócio.

Um desenvolvedor corporativo, por outro lado, supondo que eles estejam no mesmo ramo há algum tempo, realmente deveria ter aprendido como o negócio funciona depois de alguns meses (ou talvez anos). Em equipe grande, você também pode ter um arquiteto que entende os negócios com mais clareza do que os desenvolvedores.

Nas PME com desenvolvedores solitários, é importante que o desenvolvedor tenha discussões frequentes com os proprietários / gerentes para evitar sair e implementar a coisa errada.

Portanto, existem muitas maneiras possíveis de pensar sobre isso, mas a chave é a mesma em todos os casos: comunicação .

ZweiBlumen
fonte
11
Como freelancer, garanto que preciso entender os negócios de meus clientes pelo menos o suficiente para conversar com eles sobre os recursos que eles desejam. A idéia de que você pode escrever uma especificação sem entender o negócio é um sonho. Assim é a idéia de que você pode escrever uma especificação perfeita e lançá-la "por cima do muro" para um desenvolvedor.
Marnen Laibow-Koser
1

O desenvolvimento de software é a única profissão que conheço que exige que você não apenas seja proficiente em sua própria profissão, mas tenha um entendimento básico da profissão em que está trabalhando. É importante ter um conhecimento suficiente do domínio para se comunicar com os clientes e outros desenvolvedores no idioma do cliente. Como desenvolvedor, você nem sempre pode confiar nos outros para treiná-lo. Às vezes, você precisa se dedicar à pesquisa pessoal, muitas vezes fora do horário normal de trabalho.

John Ruf
fonte
3
Os engenheiros industriais precisam desse conhecimento duplo, assim como praticamente todos os analistas. Não se limita apenas ao desenvolvimento de software.
HLGEM
4
Um escritor técnico tem essa mesma situação.
Jennifer S.
1

Eu realmente entendo o que você quer dizer aqui porque nós, como empresa de um setor de turismo, enfrentamos o mesmo problema. Quando eu era desenvolvedor júnior, também estudava turismo em uma faculdade. Então, você pode adivinhar que eu não sou de ciência da computação, mas meu conhecimento em turismo é alto.

Estávamos construindo produtos em relação a outras empresas de software naquela época, mas faltava muito conhecimento específico do domínio. Como você descreveu, é realmente difícil acertar se você estiver construindo um produto no setor de turismo, pois há muitas preocupações transversais etc.

Portanto, esse movimento deu muitos resultados ruins a longo prazo. Então, demos um grande passo adiante, e comecei a focar apenas no desenvolvimento, e não na parte comercial do projeto. Como tenho os conhecimentos industriais e de programação, o projeto se torna mais eficiente do que nunca. Sem mencionar, podemos tomar decisões mais rapidamente, pois tenho experiência nos dois lados da moeda.

Como resposta concreta à sua pergunta, certamente é sim na minha opinião pessoal. Se o projeto em que sua equipe está trabalhando for de longo prazo, siga o caminho difícil e treine sua equipe em fundamentos e detalhes específicos do domínio.

tugberk
fonte
1

Se um desenvolvedor permanecer em uma empresa / setor por um longo período de tempo, aprenderá lenta mas seguramente "o negócio".

Algumas empresas reconhecem e fornecem treinamento "nos negócios". As empresas financeiras são um bom exemplo disso.

Quanto mais você aprender os negócios, mais fácil será conversar com seus usuários. Eles sentirão mais confiança em você. Você entenderá com mais facilidade as peculiaridades de onde um sistema pode dar errado se não funcionar exatamente como o esperado para o usuário.

Para responder à sua pergunta, a especificação NUNCA é suficiente na minha experiência. O problema comum é que eles geralmente não contêm informações suficientes e desatualizam-se rapidamente.

A experiência do domínio comercial pode ser obrigatória para algumas empresas. Eles procuram desenvolvedores com experiência no domínio ao contratar. Algumas empresas até colocam isso acima das habilidades tecnológicas reais. (Nenhuma experiência financeira, nenhuma entrevista é muito comum, certamente aqui no Reino Unido).

Ozz
fonte
O último parágrafo é especialmente verdadeiro em domínios comerciais nos quais você pode ter problemas legais se o sistema não for construído corretamente.
HLGEM
Discordo: não há garantia de que um desenvolvedor competente de longo prazo possa aprender "o negócio". Ainda requer uma certa organização da empresa e é especialmente ruim para as equipes de satélite.
Darien
0

Por experiência pessoal, a especificação é suficiente desde que você tenha alguém da equipe trabalhando com você que possua o conhecimento do domínio.

Trabalho em uma indústria muito especializada: fabricamos software para mídia de transmissão. Eu mal sei nada sobre transmissão, mas conheço código e dados, e tenho boas pessoas na equipe de gerenciamento de projetos que entendem a transmissão. Essa fórmula tem sido boa o suficiente nos últimos anos para que eu tenha uma boa funcionalidade que os clientes gostem.

Mason Wheeler
fonte