O que se perdeu

O Mars Climate Orbiter foi lançado em 11 de dezembro de 1998, para ser o primeiro satélite meteorológico interplanetário e um retransmissor de comunicações para uma sonda de pouso que chegaria mais tarde naquele ano. Voou 286 dias. Em 23 de setembro de 1999 a queima de inserção em órbita começou no horário; cinco minutos depois, cerca de quarenta e nove segundos antes do previsto, a espaçonave passou atrás de Marte. Nunca mais se ouviu falar dela. A missão valia 327,6 milhões de dólares.

A comissão de investigação da NASA concluiu que a causa raiz foi a falha em usar unidades métricas na codificação de um arquivo de software de solo, "Small Forces", usado em modelos de trajetória.

O mecanismo

A espaçonave acionava propulsores periodicamente para descarregar o momento angular acumulado. Depois de cada um desses eventos, um programa de solo chamado SM_FORCES processava a telemetria e produzia um arquivo para a equipe de navegação, registrando quanto impulso cada acionamento entregara.

A especificação de interface entre os dois sistemas dizia que os valores de impulso naquele arquivo deviam estar em newtons-segundo. O programa os fornecia em libras-força-segundo.

Uma libra-força-segundo equivale a cerca de 4,45 newtons-segundo. O software de navegação, confiando na especificação, leu os números como métricos - e portanto modelou o efeito de cada acionamento como cerca de vinte e dois por cento do valor real. Ao longo de 286 dias de correções pequenas e frequentes, o erro acumulado afastou a trajetória prevista da real.

Estimativas feitas depois, com os valores corrigidos, puseram a maior aproximação da espaçonave em cerca de 57 quilômetros. A altitude considerada sobrevivível era 80.

Por que a versão famosa é a menos útil

"A NASA esqueceu de converter para o sistema métrico" é exato e não explica quase nada, porque faz a falha soar como desleixo que gente melhor teria evitado.

Nenhuma das unidades estava errada. Libra-força-segundo e newton-segundo medem impulso; as duas são legítimas; cada programa era internamente consistente e correto nos próprios termos. O perigo era que o mesmo número nu significava duas grandezas físicas diferentes em lados opostos de uma fronteira - uma fronteira que era ao mesmo tempo interface de software e fronteira organizacional, entre a empresa que construiu a espaçonave e o laboratório que a navegava.

E havia uma especificação. Ela dizia newtons-segundo. A especificação estava certa e a espaçonave se perdeu assim mesmo, que é a parte que vale demorar: um documento enunciando a convenção correta não a faz cumprir. Alguma coisa precisa conferir. A recomendação da própria comissão foi conduzir uma auditoria de software para conformidade com a especificação em todos os dados transferidos entre as duas organizações - o que é um jeito de dizer que ninguém vinha comparando o que a interface prometia com o que a atravessava.

O presidente da comissão enunciou o achado mais amplo sem rodeios: a revisão identificara outros fatores significativos que permitiram àquele erro nascer, e então o deixaram permanecer e se propagar até produzir um erro grave na compreensão da trajetória da espaçonave na aproximação de Marte. As causas contribuintes listadas foram consideração inadequada da missão como sistema total, comunicação e treinamento inconsistentes dentro do projeto, e ausência de verificação completa de ponta a ponta do software de navegação e de seus modelos.

Os quatro meses

Este é o elemento que tira o caso do pacote de unidades e o põe na companhia da Target e do Knight Capital.

O erro não era invisível. Ao longo da primavera e do verão de 1999, pessoal de nível operacional levantou preocupações sobre discrepâncias entre onde a solução de navegação dizia que a espaçonave estava e onde outros métodos sugeriam que ela estava. Uma correção de trajetória foi proposta e discutida à medida que o encontro se aproximava. Não foi executada - e a investigação registrou a razão: a equipe estava despreparada para este cenário fora do nominal.

Isso não é incompetência. É o formato comum de uma organização encontrando uma situação para a qual não tem resposta ensaiada. Alguém notou. A preocupação circulou, no registro informal em que preocupações circulam. Não havia procedimento que transformasse "várias pessoas estão inquietas com a solução de navegação" numa decisão com prazo, e assim o padrão - seguir como planejado - venceu por não ter sido escolhido.

Lido contra o relógio, todo estágio depois da detecção falhou, ao longo de meses em vez dos quarenta e cinco minutos que o teve.

O que um profissional deve tirar disso

Toda fronteira carrega premissas que não estão nos dados. Um número que atravessa uma interface vem acompanhado de um significado que mora em outro lugar - num documento, numa convenção, na cabeça de alguém. Unidades são o exemplo vistoso; os banais estão por toda parte em redes. Aquela taxa é em bits ou em bytes? Aquele carimbo de tempo é local ou ? Aquilo é comprimento de prefixo ou máscara? A é a carga ou o quadro? Aquele contador é cumulativo ou por intervalo? Cada um deles já causou uma interrupção real em algum lugar, exatamente pela razão que perdeu o orbitador: os dois lados estavam internamente corretos.

Os formatos que carregam essas premissas por uma fronteira - JSON, , XML, carimbos de tempo, codificações de texto, - estão reunidos em os formatos do meio, que é esta falha generalizada.

Especifique, e verifique separadamente. O documento de interface estava correto. O que faltava era qualquer coisa que comparasse o documento com o tráfego - uma auditoria, uma checagem de ordem de grandeza, uma asserção de que os valores caem numa faixa plausível. Um valor 4,45 vezes menor não é detectável por um programa que não tem opinião sobre quanto o valor deveria ser, e dar-lhe uma opinião é barato.

Teste o caminho, não os componentes. O achado da comissão foi a ausência de verificação completa de ponta a ponta. Cada programa funcionava. O teste de integração através da fronteira organizacional era onde a falha morava, e é o teste mais frequentemente pulado, porque exige duas equipes e não pertence a nenhuma.

E construa o caminho para o engenheiro inquieto. A lição mais transferível aqui não é sobre unidades. Alguém esteve preocupado, por meses, e não havia mecanismo que convertesse preocupação em decisão. Se a sua organização não tem um jeito definido de uma preocupação de nível operacional forçar uma resposta explícita - mesmo a resposta "consideramos e vamos prosseguir" - então o padrão sempre vencerá, e o padrão será escolhido por ninguém.

Fontes