Ao fazer alterações em sistemas grandes, geralmente enfrento o problema de que alguma funcionalidade precisa obter alguns dados de outra, mas eles estão em partes diferentes de uma árvore de chamadas profunda e ramificada, possivelmente fluindo através de ouvintes de eventos, chamadas adiadas, etc. Dessa maneira, uma simples alteração pode aumentar rapidamente.
Uma citação relacionada da postagem do blog de Yossi Kreinin em http://www.yosefk.com/blog/i-want-a-struct-linker.html :
Você tem algum tipo de estrutura de dados que você transmite bastante. Em breve, a coisa mais valiosa sobre a estrutura não são os dados que ela mantém, mas o fato de estar disponível durante todo o fluxo de controle.
As variáveis globais são uma maneira clássica de deixar o código "gritar" para um código distante, mas são conhecidas por serem problemáticas. Variáveis com escopo dinâmico são uma maneira mais restrita, mas também são problemáticas.
Existe alguma pesquisa em linguagem de programação com o objetivo de resolver esse problema? Podemos tornar mais fácil adicionar fluxos de dados imprevistos a uma grande base de código, enquanto ainda temos verificação estática, testes de unidade fáceis e outras vantagens?