A documentação, quando atualizada, contempla tudo o que está sendo usado pelo computador para fazer funcionar o sistema. Entretanto, como a documentação é destinada aos humanos, é impossível a utilização de ferramentas para extrair informações de forma automática. Assim, o aprendizado do sistema teria como base a leitura dessa documentação. A extração via ferramenta só seria possível caso houvesse uma padronização na escrita ou a automatização dos documentos principais. Ferramentas que constroem os documentos do processo durante o desenvolvimento do software possibilitam a extração de informações.
Finalmente, também é possível usar outras fontes de informação. Por exemplo, para definir subsistemas, seria imperativo localizar quem escreveu cada parte do código. Se duas partes do código tiverem sido desenvolvidas por uma mesma pessoa, é presumível que pertençam ao mesmo subsistema.
Após recolhidas todas as informações, parte-se, então, para o tratamento dos fatos, que contempla algumas das principais atividades envolvidas na engenharia reversa. Dentre as informações colhidas, devem-se eliminar incontáveis detalhes irrelevantes, separando o que é de fato importante.
Em o software legado, podem existir várias anomalias no código, como por exemplo, partes do programa que nunca serão executadas, os chamados códigos mortos, e trechos de código que foram copiados e ligeiramente modificados. Essas anomalias complicam o código, tornando-o mais extenso e dificultando o estudo e entendimento do sistema por parte do programador. Para resolver esse problema, o melhor a fazer é deletar o código morto e no caso dos clones. Pode-se, ainda, alterar o código para suprimir os clones ou comentar o código informando que existem clones.