Slides Lista de aulas
Um Sistema Quebrado por Comunicação, Não por Código
As Aulas 1 a 3 desta disciplina trataram a responsabilidade como algo que recai sobre um profissional individual: seguir ou não um código de conduta (Aula 3), reconhecer ou não os atores afetados por um sistema (Aula 1), avaliar ou não as consequências de uma decisão à luz de uma teoria ética (Aula 2). Hoje mudamos de nível. A pergunta não é mais “o que um profissional individual deveria fazer” — é “o que a própria estrutura de como um time se organiza produz, independentemente da boa vontade de qualquer pessoa dentro dele”.
Vale reativar rapidamente o mapa de atores da Aula 1: todo sistema de software tem, por trás, um conjunto de pessoas e grupos que o constroem, mantêm, usam e são afetados por ele — e as relações entre esses atores (quem fala com quem, quem decide o quê) já fazem parte do sistema sociotécnico, não são um detalhe de “gestão de projeto” alheio à engenharia propriamente dita. Esta aula mostra dois mecanismos concretos pelos quais essa estrutura social deixa uma marca direta e previsível no artefato técnico final — e fecha mostrando como traduzir um compromisso ético/social abstrato em algo concreto no código e no processo.
- Por que a arquitetura de um sistema tende a copiar o organograma de quem o construiu?
- Levantar requisitos é um ato neutro de “descobrir o que o cliente quer”, ou um processo social com voz e poder desiguais entre quem participa?
- Como um compromisso ético ou social abstrato (ex.: acessibilidade, privacidade) se transforma em algo concreto no código e no processo de desenvolvimento?
- Que decisões de processo — quem participa, como decisões são revisadas — mudam o resultado técnico final, não só o resultado organizacional?
- Toda fricção que o usuário sente contra um sistema é um acidente estrutural — ou às vezes é uma escolha deliberada, otimizada contra o próprio usuário?
Um problema motivador concreto, para tirar tudo isso do abstrato, extraído do próprio artigo que batizou o fenômeno central de hoje — Mel Conway, programador e pesquisador, publicou em 1968 um pequeno artigo com dois exemplos que continuam sendo citados até hoje:
“Uma organização de pesquisa contratada tinha oito pessoas encarregadas de produzir um compilador de COBOL e um de ALGOL. Depois de estimativas iniciais de dificuldade e tempo, cinco pessoas foram alocadas à tarefa do COBOL e três à tarefa do ALGOL. O compilador de COBOL resultante rodava em cinco fases; o compilador de ALGOL rodava em três.” (tradução livre, Conway, 1968, p. 31)
“Duas forças militares foram instruídas por seu Comandante-em-Chefe a desenvolver um sistema de armas comum, que atendesse às necessidades de ambas. Depois de grande esforço, produziram uma cópia de seu organograma.” (tradução livre, Conway, 1968, p. 31)
Repare no primeiro exemplo: o número de fases do compilador é idêntico ao número de pessoas alocadas para construí-lo — cinco pessoas, cinco fases; três pessoas, três fases. Nenhuma especificação técnica pediu isso. Nenhuma “melhor prática” de compiladores exige que o número de fases coincida com o tamanho do subgrupo que o constrói. E, no segundo exemplo, duas organizações que deveriam produzir um sistema de armas conjunto produziram, em vez disso, uma réplica da própria divisão institucional entre elas. Isso não parece coincidência — e não é: é a manifestação concreta de um fenômeno que vamos formalizar no Bloco 3.
O Mapa de Papéis da Indústria
Antes de formalizar a Lei de Conway, vale tornar concreto quem, de fato, participa da construção de um sistema de software real — porque “a organização” do Bloco 1 não é uma abstração, é um conjunto real de papéis com interesses, informações e poder de decisão diferentes entre si.
Essa divisão em papéis não é burocracia arbitrária: cada papel exige um tipo de raciocínio genuinamente diferente, que raramente cabe bem numa única cabeça ao mesmo tempo. Priorizar entre pedidos concorrentes (PM) é um raciocínio de custo-benefício de negócio; desenhar um fluxo de tela sem ambiguidade (UX) é um raciocínio sobre percepção e erro humano; decidir uma estrutura de dados (Dev) é um raciocínio sobre corretude e desempenho; prever o que quebra sob carga (SRE) é um raciocínio sobre falha e escala. Uma equipe grande demais para uma só pessoa dominar todos esses raciocínios simultaneamente se especializa — e a especialização, uma vez que existe, é exatamente o tipo de fronteira de comunicação que a Lei de Conway vai formalizar no Bloco 3.
Um pedido “simples” de um usuário final — “eu queria poder cancelar um pedido depois de finalizado” — passa, tipicamente, por essa cadeia de papéis antes de virar uma linha de código, e cada papel produz um artefato concreto e específico, não só uma opinião:
Uma cadeia típica de papéis entre o pedido do usuário e o código (síntese nossa, ver nota acima)
| Usuário final |
Formula o pedido em linguagem cotidiana, sem saber o que é tecnicamente viável |
Um relato informal (ticket de suporte, comentário, reclamação) |
| PM / PO (Gerente/Proprietário de Produto) |
Traduz o pedido em uma “necessidade de negócio”, priorizando-o (ou não) frente a outros pedidos |
Um item de backlog priorizado, com justificativa de negócio |
| UX (Design de Experiência) |
Traduz a necessidade em uma interação concreta — telas, fluxos, textos de erro |
Wireframes/protótipos e um fluxo de tela passo a passo |
| Dev (Desenvolvedor) |
Traduz o fluxo de UX em código, decidindo estruturas de dados e integrações |
Código-fonte e as decisões de modelagem de dados que o sustentam |
| QA (Garantia de Qualidade) |
Traduz o comportamento esperado em casos de teste, revelando o que “cancelar” de fato significa em casos-limite (pedido já enviado? já pago?) |
Um plano de testes e a lista de casos-limite descobertos |
| SRE / Operações |
Traduz a funcionalidade em requisitos de confiabilidade em produção — o que acontece se o cancelamento falhar sob alta carga? |
Métricas de alerta e um plano de contingência para falha em produção |
| Stakeholders de negócio |
Podem vetar ou alterar o pedido por razões que nada têm a ver com o usuário (custo, política comercial, contrato com fornecedor) |
Uma decisão de aprovação/veto, geralmente sem registro formal do motivo |
Três desses artefatos têm nome técnico específico, que vale nomear antes de seguir: um ticket é o registro de um único pedido ou problema, aberto num sistema de atendimento (ex.: um formulário de suporte), geralmente com um número de identificação que permite rastreá-lo até ser resolvido. Um item de backlog é uma entrada numa lista viva e priorizada de tudo que a equipe de produto poderia construir — um pedido só sai do papel quando sai do backlog para a fila de trabalho ativo da equipe (o sprint, no jargão ágil). Um wireframe é um desenho esquemático de tela: mostra onde cada elemento (botão, campo de texto, mensagem de erro) fica, sem se preocupar ainda com cor ou estilo visual definitivo; um protótipo vai um passo além, permitindo clicar e navegar entre as telas para simular o uso real, antes de existir qualquer linha de código.
Cada passagem nessa tabela é uma tradução — e toda tradução perde ou adiciona algo. Um PM que prioriza “cancelamento” mais baixo do que o usuário gostaria já mudou o resultado antes de qualquer código existir. Um UX que desenha um fluxo de cancelamento sem considerar o que acontece com um pedido já em transporte já tomou uma decisão que o usuário nunca articulou explicitamente. Um QA que só testa o caminho feliz (cancelar antes do pagamento) deixa passar um requisito que existia desde o início — “cancelar depois de pago” —, mas que se perdeu ao longo da cadeia. Nada disso exige más intenções de nenhum papel individual: é uma propriedade estrutural de qualquer cadeia de tradução com mais de um elo.
Isso já entrega a intuição central: um “requisito” não é um dado bruto que existe pronto, esperando para ser “descoberto” — é o produto final de uma cadeia de pessoas, cada uma vendo e traduzindo apenas parte do quadro. Falta só nomear os dois mecanismos formais que os Blocos 3 e 4 desenvolvem: por que a arquitetura do sistema também acaba copiando essa mesma estrutura de papéis (Bloco 3), e por que a etapa de “descobrir o que o cliente quer” já é, ela mesma, um processo social com voz desigual entre quem participa (Bloco 4).
A Lei de Conway: Premissas e Passo a Passo
Voltamos ao exemplo do Bloco 1 — o compilador com cinco fases e três fases — agora para formalizar por que ele não é coincidência. Conway (1968) chega a essa conclusão a partir de duas premissas, e um raciocínio passo a passo que liga ambas ao resultado final.
Premissa (a): construir uma interface entre duas partes de um sistema exige comunicação entre quem constrói cada parte. Se o Módulo A precisa chamar uma função do Módulo B, alguém que constrói A precisa saber, com precisão, o que B espera receber e o que B devolve — isso só se resolve com comunicação entre as duas partes.
Premissa (b): organizações minimizam custo de comunicação alinhando equipes a subsistemas. Comunicar-se tem custo — tempo, atenção, reuniões, documentação. Uma organização racional tende a reduzir esse custo agrupando, na mesma equipe, quem precisa se comunicar com mais frequência.
Conway (1968, p. 29) formula a consequência dessas duas premissas de forma direta:
“Dada qualquer organização de equipe de design, existe uma classe de alternativas de design que não pode ser efetivamente perseguida por essa organização, porque os caminhos de comunicação necessários não existem. Portanto, não existe uma coisa como um grupo de design que seja, ao mesmo tempo, organizado e imparcial.” (tradução livre)
O passo a passo, a partir daí:
- Se dois módulos interagem, mas os times que os constroem não se falam, a interface entre eles tende a ficar malfeita ou inconsistente — ninguém tem a informação completa dos dois lados para projetá-la bem.
- Para reduzir o custo de comunicação, a organização — de forma consciente ou não — tende a alinhar a fronteira dos times à fronteira “natural” dos módulos que ela já antecipa.
- Resultado: a arquitetura do sistema, no fim, espelha o organograma — não por design técnico deliberado, mas por pressão estrutural de comunicação. É exatamente o que aconteceu no exemplo do compilador: a divisão de pessoas (5+3) precedeu e causou a divisão de fases (5+3), não o contrário.
Conway (1968, p. 31) resume a tese central do artigo assim:
“A tese básica deste artigo é que organizações que projetam sistemas (no sentido amplo usado aqui) são obrigadas a produzir projetos que são cópias das estruturas de comunicação dessas organizações. […] Principalmente, encontramos um critério para a estruturação de organizações de design: um esforço de design deve ser organizado de acordo com a necessidade de comunicação.” (tradução livre)
O diagrama acima redesenha a ideia central do artigo (não é uma reprodução literal de nenhuma figura de Conway): quando duas equipes se comunicam, a interface entre os módulos que elas constroem tende a ficar bem definida; quando não se comunicam, a interface tende a ficar malformada ou inconsistente — porque nenhuma das duas equipes tem, por si só, a informação completa dos dois lados.
Implicação prática — a Manobra Inversa de Conway: se a arquitetura tende a seguir o organograma, então, para mudar a arquitetura de um sistema de forma duradoura, muitas vezes é preciso mudar primeiro a estrutura do time, não só o código. Reescrever um monólito em microsserviços sem jamais tocar em como as equipes estão organizadas tende a falhar: a pressão estrutural de comunicação (premissa b) volta a empurrar a arquitetura de volta ao formato antigo, porque as pessoas que precisam se falar seguem sendo as mesmas, na mesma configuração.
Se a Lei de Conway está certa — a arquitetura tende a copiar a estrutura de comunicação de quem constrói —, o que isso implica sobre tentar consertar um sistema mal-arquitetado só reescrevendo código, sem tocar em como as equipes estão organizadas?
Dica: pense na Manobra Inversa de Conway — o que precisaria mudar primeiro para que uma nova arquitetura se sustentasse, e não fosse revertida pela própria pressão estrutural da organização?
- □ Se as organizações não precisassem, por hipótese, minimizar custo de comunicação entre subsistemas (comunicação fosse grátis e instantânea, sem nenhum custo cognitivo ou de coordenação), a pressão estrutural para a arquitetura do sistema espelhar o organograma desapareceria, mesmo que as duas partes do sistema ainda precisassem trocar informação para funcionar.
- □ No limite em que uma organização tem uma única equipe indivisa construindo o sistema inteiro (nenhuma subdivisão), a Lei de Conway deixaria de fazer qualquer previsão sobre a arquitetura resultante, pois não há mais nenhum organograma interno a ser espelhado.
- □ A Manobra Inversa de Conway sugere que, para migrar um sistema monolítico para uma arquitetura de microsserviços de forma duradoura, bastaria reescrever o código em módulos separados, sem alterar a estrutura das equipes que o mantêm.
- □ Como a Lei de Conway afirma que a arquitetura tende a copiar a estrutura de comunicação organizacional, isso implica que uma organização bem comunicada entre todas as suas equipes produzirá necessariamente uma arquitetura de software tecnicamente superior.
Elicitação de Requisitos como Processo Social
O Bloco 3 mostrou que a arquitetura de um sistema copia a estrutura de comunicação de quem o constrói. Este bloco mostra o mecanismo irmão, do outro lado do processo: a etapa que decide o que vai ser construído — a elicitação de requisitos — também não é um processo neutro.
O processo clássico de Engenharia de Requisitos em quatro etapas — elicitação, análise e negociação, especificação, e validação — corresponde ao Capítulo 4 de Ian Sommerville (Software Engineering, 10ª ed.). Como no Bloco 2, é conhecimento geral consolidado, não uma citação literal verificada contra o livro (pelo mesmo motivo: nenhuma fonte gratuita legítima encontrada). O que segue é uma reinterpretação dessas quatro etapas à luz de Data Feminism (D’Ignazio & Klein, 2020) — essa conexão entre os dois textos é análise nossa, não algo que qualquer um dos dois livros faz explicitamente.
Antes de perguntar o que cada etapa esconde socialmente, vale entender o que cada etapa efetivamente faz, na prática de engenharia — a crítica social só é precisa se comparada ao mecanismo real, não a uma caricatura vaga dele (“perguntar ao cliente o que ele quer”):
- Elicitação combina várias técnicas, não uma conversa única: entrevistas estruturadas e semi-estruturadas; workshops facilitados, reunindo vários stakeholders na mesma sala para que discordâncias apareçam ao vivo; observação etnográfica do trabalho real do usuário em seu ambiente (útil quando o processo dele é tácito — ele sabe fazer, mas não sabe descrever); análise de documentos já existentes (contratos, regulamentos, telas do sistema legado); e protótipos descartáveis, usados para provocar reação a algo concreto em vez de pedir para o cliente imaginar do zero. O produto dessa etapa não é uma lista limpa e pronta — é um conjunto de necessidades cruas, tipicamente incompletas e contraditórias entre stakeholders diferentes.
- Análise e negociação resolve essas contradições, transformando necessidades cruas em requisitos consistentes entre si. Técnicas típicas: priorização estruturada (o método MoSCoW — Must have, Should have, Could have, Won’t have — ou o modelo de Kano, que separa requisitos “básicos”, cuja ausência frustra, de “diferenciais”, cuja presença encanta); matrizes de trade-off explícitas quando dois requisitos competem pelo mesmo orçamento ou pela mesma janela de tempo da equipe; e a pergunta disciplinada “o que exatamente acontece se este item não for feito?”, repetida para cada item da lista, para separar o essencial do desejável.
- Especificação documenta o que foi acordado com precisão suficiente para orientar o design e, depois, verificar se o sistema entregue cumpre o que foi pedido. Formatos comuns: casos de uso (com ator, pré-condição, fluxo principal e fluxos alternativos de erro); histórias de usuário com critérios de aceite explícitos (a fórmula “Como [papel], quero [ação], para [benefício]”, seguida de uma lista de condições testáveis que decidem quando a história está “pronta”); ou requisitos funcionais e não-funcionais numerados, rastreáveis a um artefato de design específico.
- Validação verifica se a especificação captura corretamente o que foi levantado — não é o mesmo que testar se o código funciona (essa é a verificação, uma etapa posterior e distinta). Técnicas: revisões estruturadas do documento de especificação junto aos próprios stakeholders; walkthroughs, em que alguém caminha por um cenário de uso passo a passo ao lado de quem pediu o sistema, checando cada decisão em voz alta; e protótipos de baixa fidelidade, usados para confirmar entendimento mútuo antes de qualquer linha de código real ser escrita.
Só depois de nomear essas atividades concretas — conversas com técnica definida, critérios de priorização explícitos, formatos de documento específicos, revisões estruturadas — é que a pergunta social fica precisa, porque agora ela tem um alvo exato: em cada uma dessas atividades, quem participa, e quem fica de fora? Na descrição-padrão, o processo parece um ato de extração neutra: “descobrir o que o cliente/usuário quer”. Mas cada uma das quatro etapas envolve uma decisão social, com voz desigual entre quem participa:
As quatro etapas clássicas, reinterpretadas (síntese nossa)
| Elicitação |
Coletar necessidades entrevistando usuários e stakeholders |
Quem é entrevistado como “o usuário”? Quem tem tempo, idioma, letramento digital, ou acesso para participar de uma entrevista ou responder a uma pesquisa? |
| Análise e negociação |
Resolver conflitos entre requisitos concorrentes |
Quem tem poder de voz na mesa de negociação quando dois requisitos colidem — normalmente, quem paga pelo sistema, não quem é mais afetado por ele |
| Especificação |
Documentar formalmente o que foi acordado |
Requisitos de grupos sem representação na negociação tendem a ficar implícitos ou simplesmente ausentes do documento formal |
| Validação |
Confirmar com stakeholders que a especificação está correta |
Validar de novo com os mesmos participantes da elicitação apenas confirma os mesmos pontos cegos já presentes desde o início |
Catherine D’Ignazio e Lauren F. Klein, no Capítulo 2 de Data Feminism (2020), oferecem exatamente o enquadramento que falta para essa tabela — a tese central do capítulo, sobre dados (e, por extensão, requisitos derivados de dados sobre o mundo):
“Dados são sempre o produto de relações sociais desiguais — relações afetadas por séculos de história. Como afirma o cientista da computação Ben Green, ‘embora a maioria das pessoas fale sobre a capacidade do aprendizado de máquina de prever o futuro, o que ele realmente faz é prever o passado.’” (tradução livre, p. 53)
Se dados nunca são neutros, requisitos levantados a partir de “o que os dados/usuários dizem” também não são — eles carregam a mesma assimetria histórica. D’Ignazio & Klein propõem quatro pontos de partida para agir diante disso, que se conectam diretamente às quatro etapas da tabela acima:
“Tomar ação pode assumir muitas formas, e neste capítulo oferecemos quatro pontos de partida: (1) Coletar (Collect): compilar contra-dados — diante da ausência de dados ou da negligência institucional — oferece um ponto de partida poderoso […]. (2) Analisar (Analyze): desafiar o poder frequentemente requer demonstrar resultados desiguais entre grupos, e novos métodos computacionais estão sendo desenvolvidos para auditar algoritmos opacos e responsabilizar instituições. (3) Imaginar (Imagine): não podemos focar apenas em resultados desiguais, porque, se assim for, nunca chegaremos à causa raiz da injustiça. […] (4) Ensinar (Teach): as identidades de quem faz ciência de dados importam, então como podemos engajar e capacitar pessoas recém-chegadas à área […]?” (tradução livre, p. 53)
O ponto Coletar — “contra-dados” — é o mais direto para a nossa discussão de elicitação de requisitos: ele nomeia exatamente a estratégia de responder à ausência institucional de dados sobre um grupo. Um caso real, do próprio capítulo, ilustra isso de forma concreta:
“Em 1971, o Detroit Geographic Expedition and Institute (DGEI) lançou um mapa provocativo, Onde Motoristas Atropelam Crianças Negras na Rota Pointes-Downtown. […] As pessoas que viviam ao longo da rota mortal já reconheciam há muito tempo a magnitude do problema, assim como seu profundo impacto na vida de seus amigos e vizinhos. Mas reunir dados que comprovassem essa verdade se revelou um grande desafio. Ninguém mantinha registros detalhados dessas mortes, nem tornava pública nenhuma informação básica sobre o que havia acontecido. ‘Não conseguíamos obter aquela informação’, explica Gwendolyn Warren, a organizadora, radicada em Detroit, que liderou essa colaboração improvável.” (tradução livre, pp. 49–50)
O caso do DGEI mostra o mecanismo em sua forma mais nua: quem constrói o “mapa” de requisitos — literalmente, neste caso — decide o que existe e o que fica de fora. A comunidade afetada já sabia do problema por experiência vivida; o que faltava era alguém com poder para transformar essa experiência em um registro formal que contasse como dado. Ninguém entrevistou essa comunidade como “o usuário” do sistema municipal de segurança viária — então seu requisito mais urgente simplesmente não aparecia em nenhuma especificação oficial, até que o próprio DGEI produzisse seus próprios contra-dados.
O elo com o Bloco 3 fica completo: assim como uma interface técnica sem comunicação entre equipes tende a ficar malformada, um requisito sem ninguém com voz suficiente para levá-lo à mesa de negociação tende a ficar de fora da especificação — não por decisão explícita de excluí-lo, mas por ausência estrutural de quem o representasse no processo.
Quando uma equipe de produto diz que vai “levantar os requisitos entrevistando os usuários”, quem exatamente conta como “o usuário” nessa frase — e quem, na prática, tende a ficar de fora dessa lista, mesmo sendo afetado pelo sistema?
Dica: pense no caso do DGEI — quem tinha o problema não era, necessariamente, quem tinha acesso ao processo formal de registrar ou comunicar esse problema.
- □ Se todos os grupos afetados por um sistema tivessem exatamente o mesmo poder de voz durante a etapa de negociação, a lista final de requisitos ainda poderia refletir as prioridades de quem já detém mais poder social, caso o processo de coleta em si — quem é entrevistado “como” o usuário — não mudasse.
- □ No limite em que instituições oficiais mantêm registro completo e preciso de todos os incidentes relevantes, a prática de compilar contra-dados, como fez o DGEI, deixaria de ter qualquer função, pois a assimetria de informação que a motiva já não existiria.
- □ A lógica de “quem constrói o mapa de requisitos decide o que existe e o que fica de fora”, usada no caso do DGEI, se aplicaria igualmente a uma equipe de produto que decide quais bugs entram no backlog de correção com base apenas nos tickets abertos por usuários que sabem preencher um formulário técnico de report.
- □ Como Data Feminism argumenta que dados nunca são neutros porque refletem relações sociais desiguais, a conclusão correta é que toda coleta de dados institucional deveria ser abandonada em favor exclusivo de contra-dados produzidos por comunidades afetadas.
Quando a Assimetria É Deliberada: Dark Patterns
O Bloco 4 mostrou um mecanismo de exclusão sem intenção explícita: um requisito fica de fora da especificação porque quem o carrega nunca teve acesso ao processo — ninguém, individualmente, decidiu excluí-lo. Mas nem toda fricção que o usuário sente contra um sistema nasce de uma ausência estrutural. Às vezes ela é o resultado exato e deliberado de uma decisão de design — tomada, com frequência, pelo próprio papel de “Stakeholders de negócio” da tabela do Bloco 2, que pode “vetar ou alterar o pedido por razões que nada têm a ver com o usuário”. Aqui essa célula da tabela, até agora abstrata, ganha um mecanismo concreto e um nome técnico.
Você provavelmente já sentiu isso na pele: assinar um serviço digital costuma levar um clique; cancelar o mesmo serviço costuma exigir navegar por várias telas de “tem certeza?”, ofertas de desconto de última hora, e um botão de cancelamento visualmente discreto — como quem já tentou cancelar uma assinatura de transporte por aplicativo ou streaming conhece bem. Essa assimetria entre “entrar” e “sair” quase nunca é acidente de design malfeito: com frequência, é uma escolha deliberada, otimizada para uma métrica de negócio (retenção, receita recorrente) às custas do tempo e da paciência do usuário.
A taxonomia usada abaixo (Insistência, Obstrução, Sonegação, Interferência de Interface, Ação Forçada) segue Gray, Kou, Battles, Hoggatt & Toombs (2018), “The Dark (Patterns) Side of UX Design” (CHI ’18) — um artigo acadêmico revisado por pares. O texto integral do artigo está atrás do paywall da ACM Digital Library, e nenhuma cópia de acesso aberto legítima foi encontrada durante a pesquisa desta sessão; os nomes e descrições das categorias abaixo vêm de coberturas secundárias confiáveis sobre o artigo (não é citação literal verificada linha a linha, mesmo padrão de sinalização já usado no Bloco 2). Já o caso Amazon/FTC, discutido depois da tabela, tem verificação mais forte: a frase “quatro páginas, seis cliques, quinze opções” e o valor do acordo (US$ 2,5 bilhões) aparecem, de forma consistente e independente, em múltiplas coberturas jornalísticas e jurídicas da denúncia oficial; o PDF da denúncia em si, hospedado em ftc.gov, bloqueou o acesso automatizado durante esta pesquisa.
Taxonomia de dark patterns (síntese de fontes secundárias sobre Gray et al., 2018 — ver nota acima)
| Insistência (Nagging) |
Interrompe repetidamente o que o usuário está tentando fazer |
Pop-up pedindo para avaliar o app ou ativar notificações, que reaparece mesmo depois de recusado |
| Obstrução (Obstruction) |
Torna deliberadamente mais difícil um processo que o usuário já decidiu completar |
O padrão “Motel de Baratas” (Roach Motel): fácil entrar, difícil encontrar a saída — o caso Amazon abaixo é exatamente este |
| Sonegação (Sneaking) |
Esconde ou omite informação relevante até o último momento possível |
Taxa extra revelada só na última tela do checkout, depois que o usuário já investiu tempo no processo |
| Interferência de Interface (Interface Interference) |
Manipula a hierarquia visual da tela para empurrar a escolha da empresa |
Botão “Aceitar todos os cookies” grande e colorido; “Rejeitar” cinza, pequeno, ou escondido atrás de outro clique |
| Ação Forçada (Forced Action) |
Exige uma ação sem relação direta com o que o usuário queria, como pré-condição |
Obrigar criação de conta e compartilhamento de contatos de celular só para usar uma função básica do app |
O caso mais documentado e verificável de Obstrução dos últimos anos veio de um processo judicial, não de um artigo acadêmico. Em 2023, a Federal Trade Commission (FTC) — a agência de proteção ao consumidor dos EUA — processou a Amazon alegando que inscrever-se na assinatura Prime era possível em um ou dois cliques, enquanto cancelar exigia navegar por um fluxo interno que a própria empresa batizara de “Iliad” (referência à Ilíada, a longa e árdua guerra de Troia): um processo, segundo a denúncia, de “quatro páginas, seis cliques e quinze opções” (tradução livre), pontuado por telas intermediárias — avisos sobre benefícios perdidos, descontos de última hora — desenhadas para fazer o cliente desistir do cancelamento no meio do caminho. O caso terminou em 2025 com um acordo de US$ 2,5 bilhões, a maior penalidade civil já obtida pela agência por violação de uma norma regulatória sobre assinaturas.
O caso Amazon deixa claro por que “dark pattern” não é sinônimo de “design ruim” ou de qualquer tela de confirmação: uma única tela perguntando “tem certeza que quer cancelar?” pode ser, legitimamente, uma proteção contra cliques acidentais. O que caracteriza o padrão é a assimetria deliberada — o mesmo time de produto que faz a inscrição levar um clique é, tecnicamente, perfeitamente capaz de fazer o cancelamento levar um clique também; a diferença de fricção entre os dois fluxos não é limitação técnica, é escolha de design alinhada a uma métrica de negócio específica (nesse caso, taxa de retenção mensal da assinatura).
Isso fecha o elo com os Blocos 2 a 4 de um jeito diferente dos anteriores: lá, o resultado indesejado nascia de ausência estrutural (nenhum papel específico responsável, nenhuma voz convidada à mesa). Aqui, o resultado indesejado nasce de presença deliberada — alguém, dentro da cadeia de papéis do Bloco 2, decidiu ativamente otimizar para uma métrica que não é o bem-estar do usuário. Se a fricção pode ser projetada deliberadamente contra o usuário, uma pergunta fica em aberto: o mesmo maquinário de tradução — de intenção abstrata a comportamento concreto do sistema — pode ser apontado na direção contrária, a favor do usuário? É exatamente essa pergunta que o Bloco 6 responde.
Pergunta
Se a mesma equipe de engenharia que constrói o fluxo de inscrição também é, tecnicamente, capaz de construir um fluxo de cancelamento igualmente simples, o que explica a diferença de fricção entre os dois fluxos, se não é limitação técnica?
Dica: volte à tabela de papéis do Bloco 2 — qual papel específico tem o poder de “vetar ou alterar” um fluxo “por razões que nada têm a ver com o usuário”?
- □ Se a métrica interna usada para avaliar o sucesso do fluxo de cancelamento fosse “tempo até a resolução do pedido do usuário”, em vez de “taxa de retenção mensal da assinatura”, o incentivo estrutural para alongar deliberadamente esse fluxo, como no caso do “Iliad Flow”, deixaria de existir.
- □ Como qualquer tela de confirmação antes de cancelar uma assinatura introduz fricção deliberada no fluxo, toda tela desse tipo é, por definição, um exemplo da categoria Obstrução de dark pattern.
- □ A mesma lógica de assimetria estrutural entre “entrar em um clique, sair só com muito esforço” se aplicaria a um contrato de aluguel que permite assinatura digital instantânea, mas exige carta registrada em cartório para a rescisão.
- □ Como o processo da FTC contra a Amazon terminou em um acordo bilionário, conclui-se que toda decisão de design voltada a aumentar a taxa de retenção de um produto é, necessariamente, um dark pattern ilegal.
Da Responsabilidade Social ao Artefato de Engenharia Concreto
Os Blocos 3 a 5 mostraram três mecanismos pelos quais a estrutura social de construir software deixa marca no resultado técnico — por ausência (Blocos 3 e 4) ou por presença deliberada (Bloco 5) — sempre de forma indesejada para o usuário. Este bloco fecha o “gap” na direção contrária: como transformar deliberadamente um compromisso ético ou social abstrato em algo concreto, que sobrevive no tempo em vez de depender da boa memória de quem o propôs — o mesmo maquinário de tradução do Bloco 5, agora a favor do usuário, não contra ele.
O método que estrutura essa tradução — usado, por exemplo, quando uma equipe decide que “o sistema deve ser acessível a usuários com baixa visão” — vem de Marc Steen (2022), no capítulo sobre Value Sensitive Design (Design Sensível a Valores, VSD):
“Value Sensitive Design (VSD) coloca valores no centro do palco. É um método que permite às pessoas discutir, explorar e negociar valores explicitamente, com cuidado e sistematicidade. O VSD visa permitir que diversos interessados expressem seus valores e os combinem produtivamente durante o processo de inovação.” (tradução livre, p. 154)
O VSD completo tem três tipos de investigação, combinadas de forma iterativa — não uma vez só, no início, e depois nunca mais:
“Uma versão completa do VSD consiste em três tipos de investigação, que podem ser combinadas em um processo iterativo: investigações empíricas, conceituais e tecnológicas. Investigações empíricas envolvem estudar os valores em jogo em um projeto específico, por exemplo, conduzindo entrevistas ou workshops com os interessados relevantes. […] Essas investigações resultam em requisitos (tentativos) para o sistema que está sendo desenvolvido.” (tradução livre, pp. 155–156)
Repare na última frase: as investigações resultam em requisitos — não em princípios soltos. É exatamente esse elo — de valor investigado empiricamente a requisito concreto — que este bloco formaliza em três passos adicionais, levando o valor um passo além do requisito, até o código e o processo em si:
- Requisito Não-Funcional (NFR) testável. O compromisso “acessível a usuários com baixa visão” se torna, por exemplo, “todo texto da interface deve ter contraste mínimo de 4.5:1 em relação ao fundo” — uma condição que se pode verificar automaticamente, sim ou não, em vez de ficar em um nível de intenção vaga.
- Decisão de Arquitetura (ADR) registrada. Um Architecture Decision Record documenta a escolha concreta que implementa o NFR — por exemplo, “adotar a biblioteca X de componentes de interface, que já garante o contraste mínimo por padrão” — e, crucialmente, documenta por que essa escolha foi feita, preservando o raciocínio para quem vier depois.
- Porta de processo (gate de CI). Um checklist de revisão de PR ou, melhor ainda, um teste automatizado no pipeline de integração contínua que bloqueia o deploy se o contraste mínimo for violado — sem isso, nada impede que uma mudança futura, feita por alguém que nunca leu a ADR, quebre silenciosamente o compromisso original.
A caixa vermelha do diagrama reconecta deliberadamente com o Bloco 3: se não existe nenhum time ou pessoa responsável por essa fronteira específica, o requisito de acessibilidade tende a “cair no buraco” entre equipes — exatamente do mesmo jeito que uma interface técnica sem comunicação cai, na Lei de Conway. Um NFR bem escrito e uma ADR bem documentada não bastam por si só; sem um gate que impeça automaticamente a regressão, e sem um dono claro dessa fronteira, o compromisso original sobrevive só enquanto alguém se lembrar dele.
Vale uma ressalva importante, coerente com a regra de precisão de conteúdo desta disciplina: transformar um valor em NFR testável é uma simplificação necessária, não uma tradução perfeita. “Acessibilidade” é mais rico do que “contraste 4.5:1” — a métrica captura uma parte operacionalizável do valor, não o valor inteiro. É por isso que o VSD insiste em investigações iterativas, não um checklist único: o NFR de hoje pode precisar ser revisitado quando o contexto (ou o próprio entendimento do valor) mudar.
Pergunta
Uma equipe decide, em uma reunião, que “o sistema deve ser acessível a usuários com baixa visão”. Seis meses depois, uma nova funcionalidade quebra essa promessa sem que ninguém perceba, até que reclamações cheguem. O que, entre a reunião e o código, faltou para que isso não acontecesse?
Dica: pense na diferença entre “documentar uma decisão” (ADR) e “impedir automaticamente que ela seja violada” (gate de CI) — e no que cada um resolve, ou não, sozinho.
- □ Se um compromisso ético fosse traduzido diretamente em uma Decisão de Arquitetura (ADR), sem antes passar por um Requisito Não-Funcional (NFR) testável, ainda seria possível, a partir só da ADR, construir automaticamente um gate de CI que impeça regressão desse compromisso.
- □ No limite em que um gate de CI testa uma condição tão frouxa que praticamente qualquer código passa por ele sem alteração de comportamento, esse gate ainda cumpriria, na prática, a função de “impedir regressão” descrita nesta aula.
- □ A cadeia de tradução (compromisso → NFR testável → decisão de arquitetura → porta de processo) se aplicaria a um compromisso corporativo de reduzir vieses discriminatórios em um sistema de contratação, na forma de um NFR sobre taxas de erro por subgrupo, uma ADR sobre qual métrica de justiça adotar, e um gate de CI que bloqueia deploys que piorem essa métrica.
- □ Como um Requisito Não-Funcional testável é, por definição, mensurável, isso significa que qualquer compromisso ético que não possa ser perfeitamente quantificado deve ser descartado como requisito de engenharia.
Fechamento e Ponte para a Aula 5
Voltamos ao roteiro que abriu a aula, uma frase de resposta para cada pergunta:
- Por que a arquitetura tende a copiar o organograma? Porque construir uma interface exige comunicação, e organizações minimizam custo de comunicação alinhando equipes a subsistemas — a arquitetura é um efeito colateral estrutural dessa pressão, não um acidente nem, necessariamente, um projeto técnico deliberado (Lei de Conway, Bloco 3).
- Elicitar requisitos é neutro, ou social? É social: cada etapa do processo clássico envolve uma decisão sobre quem tem voz, e dados — assim como requisitos — nunca são o produto de uma extração neutra, mas de relações sociais desiguais que precedem qualquer coleta (Data Feminism, Bloco 4).
- Como um compromisso ético abstrato vira algo concreto? Passando por três traduções sucessivas — Requisito Não-Funcional testável, Decisão de Arquitetura registrada, porta de processo (gate de CI) — cada uma reduzindo a distância entre a intenção e o comportamento real do sistema em produção (Bloco 6).
- Que decisões de processo mudam o resultado técnico? As duas mostradas hoje — como o time se organiza, e quem participa da elicitação — mas também, implicitamente, quem é o “dono” de uma fronteira entre módulos ou entre requisitos: sem esse dono, tanto a interface técnica (Bloco 3) quanto o compromisso ético (Bloco 6) tendem a “cair no buraco” entre equipes.
- Toda fricção contra o usuário é acidente estrutural, ou às vezes é deliberada? As duas coisas acontecem, por mecanismos diferentes: às vezes é ausência estrutural (Blocos 3 e 4, ninguém decidiu excluir); às vezes é presença deliberada (Bloco 5, dark patterns — alguém escolheu otimizar contra o usuário). O caso Amazon/FTC mostra a segunda forma em escala real, com consequência regulatória.
O que fica em aberto: hoje vimos que decisões de processo e organização têm consequência técnica e social — mas essa consequência também é material. A Aula 5 abre a Parte 2 do curso, “Computação e Seus Impactos”, mostrando que decisões de arquitetura — quantos serviços, onde rodam, como escalam — têm também um custo ambiental e energético real, não só organizacional. A pergunta que atravessa a transição: se decisões “só de processo” já mudam o resultado técnico do jeito que vimos hoje, o que mais, além do organograma e da elicitação, deixa marca concreta num sistema sem que ninguém tenha “decidido” isso explicitamente no código?
Esta aula mostrou três mecanismos — Lei de Conway, elicitação de requisitos, e dark patterns — pelos quais decisões de processo e organização produzem consequências técnicas concretas. Que outro tipo de decisão “não técnica” você imagina que também deixa marca direta no sistema final, mesmo sem nenhuma linha de código específica prevendo isso?
Dica: pense em decisões sobre onde a equipe está localizada, em que fuso horário, ou sobre como o orçamento é dividido entre módulos — nenhuma delas é uma decisão “de código”, mas todas moldam o resultado técnico.
- □ Se a elicitação de requisitos fosse, de fato, um processo perfeitamente neutro de “descobrir o que o cliente quer” (sem nenhuma assimetria de poder envolvida), a conexão entre Data Feminism e Engenharia de Requisitos apresentada nesta aula perderia sua motivação central.
- □ No limite em que uma organização tivesse exatamente um time responsável por cada módulo do sistema E por cada fronteira/requisito entre módulos (nenhuma lacuna de responsabilidade), o problema de um requisito “cair no buraco” entre equipes, descrito no Bloco 6, deixaria de ocorrer pelo mecanismo discutido nesta aula.
- □ A tese de que decisões de processo e organização têm consequência técnica, apresentada nesta aula sobre Engenharia de Software, se estenderia, pela mesma lógica, ao argumento da Aula 5 de que decisões de arquitetura (quantos serviços, onde rodam) têm consequência material e ambiental — em ambos os casos, uma escolha aparentemente “só de processo/design” tem efeito concreto fora do código em si.
- □ Como esta aula mostrou três mecanismos pelos quais a prática social de construir software afeta o resultado técnico, conclui-se que qualquer falha técnica de um sistema deve ser explicada primariamente por causas organizacionais, nunca por erros técnicos comuns (bugs, escolhas de algoritmo etc.).
Exercícios
Questões discursivas
Explique, com suas próprias palavras, as duas premissas da Lei de Conway e como elas levam à “Manobra Inversa de Conway” — a ideia de que, para mudar a arquitetura de um sistema de forma duradoura, é preciso mudar primeiro a estrutura das equipes. Use um exemplo próprio (pode ser fora do exemplo do compilador COBOL/ALGOL) para ilustrar sua resposta.
A aula apresenta a elicitação de requisitos como um processo social, não uma extração neutra, conectando essa ideia ao enquadramento de Data Feminism sobre como dados nunca são neutros. Escolha um cenário de coleta de requisitos (pode ser fora da computação — por exemplo, uma política pública, uma pesquisa acadêmica, um produto qualquer) e argumente quem, nesse cenário, provavelmente ficaria de fora de “quem conta como usuário/afetado”, e o que isso mudaria no resultado final.
A aula propõe uma cadeia de tradução — compromisso ético/social → Requisito Não-Funcional testável → Decisão de Arquitetura (ADR) → porta de processo (gate de CI) — e conecta o risco de essa cadeia falhar ao mesmo mecanismo da Lei de Conway (um requisito “cai no buraco” quando não há um time responsável pela fronteira, do mesmo jeito que uma interface técnica cai quando não há comunicação entre equipes). Escolha um compromisso ético ou social (pode ser diferente de acessibilidade) e desenvolva, passo a passo, como ele se traduziria nas quatro etapas da cadeia — e o que, especificamente, precisaria existir na organização para que ele não “caísse no buraco”.
Questões de Verdadeiro/Falso
Cada bloco de 4 itens trata do mesmo tema. A questão só é considerada correta se todos os 4 itens forem julgados corretamente (deixar em branco tem penalidade de 20% da nota da questão).
- □ Se uma organização substituísse toda a cadeia de papéis (PM, dev, QA, UX, SRE) por um único generalista responsável por tudo, a qualidade final do sistema aumentaria necessariamente, porque eliminaria qualquer perda de informação entre etapas.
- □ No limite em que um time de operações/SRE nunca é consultado antes do lançamento de uma funcionalidade, os requisitos de confiabilidade em produção (ex.: comportamento sob picos de tráfego) tendem a ser descobertos só depois do incidente, não antes dele.
- □ A mesma lógica de “cada papel intermediário traduz e potencialmente distorce um pedido” se aplicaria a uma cadeia de aprovação de crédito bancário em que o gerente de agência resume o pedido do cliente para um analista de risco, que por sua vez resume para um comitê de crédito.
- □ Como um pedido “simples” do usuário passa por várias traduções antes de virar código, isso prova que usuários finais deveriam sempre ser excluídos do processo de definição técnica, já que sua visão inicial do problema é, por definição, imprecisa.
- □ Se a premissa de que “organizações minimizam custo de comunicação alinhando equipes a subsistemas” fosse falsa para uma empresa específica (ela deliberadamente mantém equipes desalinhadas dos módulos, mesmo a um custo de comunicação maior), essa empresa poderia, em princípio, produzir uma arquitetura que não espelha seu organograma.
- □ No limite em que duas partes de um sistema não precisam trocar absolutamente nenhuma informação entre si para funcionar (interface totalmente independente), a premissa de que “construir uma interface exige comunicação entre quem constrói cada parte” deixa de impor qualquer restrição sobre como as equipes devem se organizar.
- □ A afirmação de Conway de que “não existe uma coisa como um grupo de design que seja ao mesmo tempo organizado e imparcial” se aplicaria a um comitê acadêmico dividido em subcomissões temáticas, no sentido de que a divisão em subcomissões já impede certas propostas interdisciplinares de serem seguidas com a mesma facilidade que propostas dentro do tema de uma única subcomissão.
- □ Como a Lei de Conway é sobre comunicação organizacional, ela implica que empresas totalmente remotas, sem escritório físico compartilhado, estão estruturalmente imunes ao fenômeno, já que não há organograma físico a ser espelhado.
- □ Se uma empresa reorganizasse suas equipes para espelhar a arquitetura de microsserviços desejada, mas nunca reescrevesse uma linha do código monolítico existente, a Manobra Inversa de Conway prevê que, ainda assim, alguma pressão estrutural em direção à arquitetura desejada teria sido criada.
- □ No limite em que uma reorganização de equipe é revertida imediatamente após ser anunciada (dura um dia), o efeito estrutural da Manobra Inversa de Conway sobre a arquitetura tenderia a ser equivalente ao de uma reorganização que se mantém por anos.
- □ A lógica da Manobra Inversa se aplicaria a uma universidade que quer estimular pesquisa interdisciplinar entre departamentos historicamente isolados: criar um programa/comitê formal que force comunicação regular entre pesquisadores de áreas diferentes, antes de esperar que os artigos produzidos sejam naturalmente interdisciplinares.
- □ Como a Manobra Inversa de Conway propõe mudar a estrutura do time para mudar a arquitetura, isso significa que mudanças de código feitas sem qualquer mudança organizacional são sempre inúteis para alterar a arquitetura de um sistema.
- □ Se, no exemplo do compilador, a organização tivesse decidido alocar as oito pessoas por competência técnica individual (não por linguagem-alvo), sem formar dois subgrupos distintos, o resultado ainda seria necessariamente um compilador com exatamente cinco fases para COBOL e três para ALGOL.
- □ No limite em que as duas forças militares do segundo exemplo tivessem, na verdade, uma única cadeia de comando compartilhada desde o início (sem duplicação de organograma), o resultado descrito no artigo — “produziram uma cópia de seu organograma” — não teria correspondência para reproduzir, pois não haveria dois organogramas distintos.
- □ O padrão do exemplo do compilador se aplicaria a uma faculdade que divide o desenvolvimento de um sistema acadêmico em dois subgrupos — um para o módulo de matrícula e outro para o módulo de notas — sem qualquer canal formal de comunicação entre eles.
- □ Como o artigo de Conway é de 1968 e trata de compiladores e sistemas de armas, isso significa que sua tese não tem aplicação a equipes de desenvolvimento de software ágil e distribuído da atualidade, que usam metodologias muito diferentes das de 1968.
- □ Se o processo clássico de Engenharia de Requisitos (elicitação, análise e negociação, especificação, validação) fosse conduzido exclusivamente com stakeholders de negócio, sem nenhum usuário final envolvido em nenhuma etapa, o resultado ainda poderia ser tecnicamente “completo” segundo as quatro etapas, mesmo sendo socialmente incompleto.
- □ No limite em que a etapa de “validação” do processo de Engenharia de Requisitos é realizada apenas com os mesmos stakeholders que participaram da elicitação original, essa validação tenderia a confirmar os mesmos pontos cegos já presentes desde o início, em vez de corrigi-los.
- □ A ideia de que a elicitação de requisitos é um processo social, não uma extração neutra, se aplicaria a uma pesquisa de satisfação de usuários feita apenas por e-mail, em um serviço cujos usuários mais vulneráveis têm menos acesso a e-mail do que os demais.
- □ Como a etapa de “análise e negociação” do processo de Engenharia de Requisitos existe justamente para resolver conflitos entre requisitos, isso garante, por construção, que grupos sem poder de voz no processo terão seus requisitos igualmente representados nessa negociação.
- □ Se o ponto de partida “Imaginar” não existisse no framework de Data Feminism, e a ação ficasse restrita a “Coletar” e “Analisar”, o texto ainda argumentaria que isso seria suficiente para alcançar a raiz da injustiça, e não só documentar resultados desiguais.
- □ No limite em que uma equipe de dados só pratica “Analisar” (auditar algoritmos para provar resultados desiguais) e nunca pratica “Coletar”, “Imaginar” ou “Ensinar”, segundo a lógica dos quatro pontos de partida, essa equipe ainda estaria atacando a causa raiz da injustiça, não só demonstrando sua existência.
- □ O ponto de partida “Ensinar” — sobre quem são as pessoas que fazem ciência de dados — se aplicaria à composição de um time de desenvolvimento de um aplicativo de saúde voltado a gestantes, no sentido de que a ausência de qualquer mulher no time é relevante para a discussão, mesmo que o time tenha alta competência técnica.
- □ Como os quatro pontos de partida de Data Feminism são apresentados como formas de “tomar ação”, isso significa que qualquer um dos quatro, isoladamente, é sempre suficiente para resolver uma injustiça de dados, sem precisar dos outros três.
- □ Se as autoridades de Detroit já mantivessem, em 1971, um registro público e detalhado dos atropelamentos na rota Pointes-Downtown, a motivação central do DGEI para produzir seu próprio mapa — “Where Commuters Run Over Black Children” — deixaria de existir da forma descrita no caso.
- □ No limite em que uma comunidade afetada por um problema não tem absolutamente nenhum meio de registrar ou comunicar sua própria experiência (nem mapas, nem relatos orais, nem qualquer forma de testemunho), a prática de produzir contra-dados, no sentido do caso DGEI, não teria como ocorrer.
- □ A lógica de “compilar contra-dados diante da negligência institucional”, do caso DGEI, se aplicaria a um grupo de trabalhadores de plataforma (ex.: entregadores) que cria sua própria planilha compartilhada de acidentes de trabalho, na ausência de qualquer registro oficial da empresa que os contrata.
- □ Como Gwendolyn Warren afirma que “não conseguiam obter aquela informação” das autoridades, isso prova que toda ausência de dado institucional é sempre proposital, nunca resultado de limitação de recursos ou de outras causas não intencionais.
- □ Se a etapa de “especificação” produzisse um documento tecnicamente impecável, mas baseado em uma etapa de “elicitação” que ouviu apenas um subconjunto não representativo dos usuários, o documento de especificação ainda seria, no sentido usado nesta aula, um retrato fiel das necessidades de todos os usuários do sistema.
- □ No limite em que as quatro etapas (elicitação, análise e negociação, especificação, validação) são executadas em sequência estritamente linear, sem nenhuma iteração ou retorno a uma etapa anterior, o processo ainda seria capaz de corrigir um requisito mal levantado na elicitação, caso ele só seja percebido como problemático durante a validação.
- □ A sequência de quatro etapas do processo clássico de Engenharia de Requisitos poderia, em princípio, ser aplicada à elaboração de uma nova política pública, substituindo “requisitos de software” por “demandas da população” em cada etapa.
- □ Como o processo de Engenharia de Requisitos tem uma etapa chamada “análise e negociação”, isso garante que qualquer conflito de interesse entre stakeholders será resolvido de forma justa entre as partes envolvidas.
- □ Se a investigação empírica de valores (entrevistas, workshops com stakeholders) do Value Sensitive Design fosse pulada, e o processo começasse direto pela investigação técnica/tecnológica (de que forma o sistema pode ser construído), os requisitos resultantes ainda emergiriam da mesma forma descrita no Cap. 18 de Steen, como resultado das investigações empíricas.
- □ No limite em que apenas um único stakeholder (ex.: o cliente pagante) tem seus valores investigados no processo de Value Sensitive Design, a expressão “permitir que diversos stakeholders expressem seus valores e os combinem produtivamente” deixaria de descrever o que está ocorrendo nesse processo.
- □ A lógica de Value Sensitive Design — investigar empiricamente os valores em jogo antes de especificar requisitos — se aplicaria ao design de um sistema de triagem hospitalar, no sentido de entrevistar enfermeiros e pacientes sobre o que consideram justo antes de programar a lógica de priorização.
- □ Como o Value Sensitive Design combina investigações empíricas, conceituais e tecnológicas, isso significa que, uma vez completado o processo uma única vez no início do projeto, os requisitos de valores resultantes permanecem válidos e não precisam ser revisitados, mesmo com mudanças de contexto.
- □ Se um compromisso ético fosse traduzido diretamente em uma Decisão de Arquitetura (ADR), sem antes passar por um Requisito Não-Funcional (NFR) testável, ainda seria possível, a partir só da ADR, construir automaticamente um gate de CI que impeça regressão desse compromisso.
- □ No limite em que um gate de CI testa uma condição tão frouxa que praticamente qualquer código passa por ele sem alteração de comportamento, esse gate ainda cumpriria, na prática, a função de “impedir regressão” descrita nesta aula.
- □ A cadeia de tradução (compromisso → NFR testável → decisão de arquitetura → porta de processo) se aplicaria a um compromisso corporativo de reduzir vieses discriminatórios em um sistema de contratação, na forma de um NFR sobre taxas de erro por subgrupo, uma ADR sobre qual métrica de justiça adotar, e um gate de CI que bloqueia deploys que piorem essa métrica.
- □ Como um Requisito Não-Funcional testável é, por definição, mensurável, isso significa que qualquer compromisso ético que não possa ser perfeitamente quantificado deve ser descartado como requisito de engenharia.
- □ Se todo requisito de um sistema tivesse, desde sua criação, uma equipe explicitamente designada como responsável por sua fronteira (mesmo que essa fronteira cruze múltiplos módulos), o mecanismo de “requisito cai no buraco entre equipes” discutido nesta aula deixaria de se aplicar a esse requisito específico.
- □ No limite em que um requisito de acessibilidade afeta igualmente todos os módulos de um sistema (nenhum módulo é mais responsável por ele do que outro), a analogia com uma “interface técnica sem dono” feita nesta aula se tornaria menos aplicável, e não mais, a esse requisito.
- □ A mesma lógica de “responsabilidade sem dono claro leva a negligência estrutural” se aplicaria à manutenção de um código legado compartilhado por várias equipes, nenhuma das quais o considera “seu” módulo principal.
- □ Como a Lei de Conway trata de módulos técnicos e o Bloco 6 trata de requisitos éticos, a analogia entre os dois é apenas estética/retórica, sem nenhum mecanismo causal real em comum entre as duas situações.
- □ Se a Engenharia de Software fosse, de fato, uma sequência neutra de passos puramente técnicos (como a aula argumenta que não é), a existência da Lei de Conway como fenômeno replicável ao longo de décadas seria mais difícil de explicar.
- □ No limite em que uma equipe de desenvolvimento segue rigorosamente todo o processo de tradução ético descrito no Bloco 6 (NFR, ADR, gate de CI) para todo compromisso social identificado, essa equipe ainda poderia produzir um sistema com uma arquitetura que espelha disfuncionalmente seu organograma, pelo mecanismo do Bloco 3.
- □ A tese central desta aula — de que decisões de processo têm consequência técnica — se conecta com a Aula 5 no sentido de que decisões de arquitetura (quantos serviços, onde e como rodam) também têm consequência material e ambiental, mesmo quando tomadas por razões puramente organizacionais, como a estrutura de equipes.
- □ Como a aula conecta processo organizacional a resultado técnico, conclui-se que a solução para qualquer problema de qualidade de software é sempre reorganizar equipes, nunca revisar o código ou a arquitetura diretamente.
Aviso
As questões de Verdadeiro/Falso e discursivas ficam sem solução neste arquivo — são para resolução autônoma do aluno, fora do horário de aula.