Lei de Hyrum - Lei das interfaces implícitas

Hyrum’s Law: Lei das interfaces implícitas

Hyrum Wright é um engenheiro de software do Google que trabalha em infraestrutura e ferramentas de alteração de código em larga escala. Antes disso, ele passou cinco anos aprimorando as principais bibliotecas C++ do Google. A observação descrita neste artigo surgiu de experiências quando até mesmo a mais simples mudança de biblioteca causava falhas em algum sistema distante. A observação se popularizou como a Lei de Hyrum, como você entenderá melhor a seguir.

 

Lei de Hyrum

A observação de Hyrum é a seguinte: “Com um número suficiente de usuários de uma API, não importa o que você promete no contrato: todos os comportamentos observáveis ​​do seu sistema serão dependentes de alguém.”

Nos últimos dois anos fazendo migrações de infraestrutura de baixo nível em um dos sistemas de software mais complexos do planeta, ele fez algumas observações sobre as diferenças entre uma interface e suas implementações. Normalmente pensamos na interface como uma abstração para interagir com um sistema (como o volante e os pedais em um carro) e a implementação como a maneira como o sistema faz seu trabalho (rodas e motor). Isso é útil por vários motivos, principalmente porque os sistemas mais úteis rapidamente se tornam muito complexos para um único indivíduo ou grupo entender completamente e as abstrações são essenciais para gerenciar essa complexidade.

Definir o nível correto de abstração é uma discussão completamente separada, mas gostamos de pensar que uma vez que uma abstração é definida, ela é concreta. Em outras palavras, uma interface deve teoricamente fornecer uma separação clara entre os consumidores de um sistema e seus implementadores. Na prática, essa teoria se desfaz à medida que o uso de um sistema cresce e seus usuários começam a confiar em detalhes de implementação expostos intencionalmente por meio da interface, ou que eles adivinham por meio do uso regular. A “Lei das Abstrações Vazadas” de Spolsky incorpora a confiança dos consumidores em detalhes de implementação interna.

Levado ao seu extremo lógico, isso leva à seguinte observação, coloquialmente chamada de “A Lei das Interfaces Implícitas”: Com uso suficiente, não existe implementação privada. Ou seja, se uma interface tiver consumidores suficientes, eles dependerão coletivamente de todos os aspectos da implementação, intencionalmente ou não. Esse efeito serve para restringir as mudanças na implementação, que agora devem estar em conformidade com a interface explicitamente documentada, bem como a interface implícita capturada pelo uso. Muitas vezes nos referimos a esse fenômeno como “compatibilidade bug a bug”.

 

A criação de uma interface implícita

A criação da interface implícita geralmente acontece gradualmente e os consumidores da interface geralmente não estão cientes do que está acontecendo. Por exemplo, uma interface pode não oferecer garantias sobre o desempenho, mas os consumidores geralmente esperam um certo nível de desempenho de sua implementação. Essas expectativas tornam-se parte da interface implícita de um sistema e as mudanças no sistema devem manter essas características de desempenho para continuar funcionando para seus consumidores.

Nem todos os consumidores dependem da mesma interface implícita, mas com consumidores suficientes, a interface implícita acabará por corresponder exatamente à implementação. Neste ponto, a interface evaporou: a implementação tornou-se a interface, e qualquer alteração nela violará as expectativas do consumidor. Com um pouco de sorte, testes amplos, abrangentes e automatizados podem detectar essas novas expectativas, mas não melhorá-las.

Interfaces implícitas resultam do crescimento orgânico de grandes sistemas e, embora possamos desejar que o problema não existisse, designers e engenheiros deveriam considerá-lo ao construir e manter sistemas complexos. Portanto, esteja ciente de como a interface implícita restringe o design e a evolução do seu sistema e saiba que, para qualquer sistema razoavelmente popular, a interface é muito mais profunda do que qualquer desenvolvedor imagina.

About the Author: Pedro César Tebaldi Gomes

Trabalho há 10 anos no mercado B2B de tecnologia da informação e hoje atuo como líder de um time de Business Intelligence. Já escrevi mais de 500 artigos sobre tecnologia durante esse período. Estudo ciência de dados, machine learning e estatística para atingir melhores resultados nos diferentes projetos que atuo.

Deixe uma resposta

Hyrum’s Law: Lei das interfaces implícitas

tempo de leitura: 4 min