(assumindo o código de produção)
Eu costumo ir um pouco mais longe. Eu escrevi sobre fazer programas "à prova de idiotas", mas eu nem sempre qualifico isso: eu escrevo um monte de código que outras pessoas não vão ver ou trabalhar (pelo menos, essa é a expectativa quando está escrito). Eu sou o idiota que estou tentando me defender nesse caso. É uma coisa boa quando seu programa detecta problemas para você, e o problema foi simplificado tanto que é óbvio que há um erro e sua origem. A verdade é que os detalhes da implementação são óbvios quando você escreve um programa (a menos que você esteja implementando-o prematuramente), mas eles devem ser abstraídos e resistentes a erros para os clientes (mesmo quando existe a localidade do módulo). A razão é que os programas se tornam muito complexos. Às vezes você pode separar problemas, mas não o tempo todo. Se você mantiver seus componentes muito rigorosos, simples, bem encapsulados e à prova de idiotices, eles tendem a escalar bem e a maioria dos defeitos é detectada antes de serem enviados. É mais fácil de reutilizar, e você tem mais confiança e um tempo mais fácil reutilizando os programas. Além disso, os programas complexos que você escreve só se tornam mais complexos (até para você) depois de algum tempo longe do programa. Quando você lê em 6 meses, pode demorar um tempo absurdo para entender e depurar em comparação com a versão à prova de idiotas. Se um componente introduzir uma alteração de quebra, ele poderá passar despercebido por um longo período de tempo. Programas são complexos; você não pode escapar dessa realidade, mas pode torná-la à prova de idiotas, o que tornará sua vida muito mais fácil quando algo der errado ou quando precisar ser reutilizado ou alterado. Portanto, a abordagem à prova de idiotas significa que seu software pode ser compreendido, reutilizado ou mantido por seus juniores ou pessoas mais novas na equipe também (não apenas alguém tão bom / experiente quanto você). A substituição é uma preocupação à parte: se as pessoas adoram trabalhar com seus programas, você está fazendo um bom trabalho - não se preocupe com a substituição. Claro, eu poderia criar cenários em que programas ininteligíveis pudessem salvar seu trabalho, mas escrever um bom programa que os outros possam usar e manter é claramente o mal menor (olhe para os resopios dos outros). Se eu me pegar escrevendo algo que não é uma prova idiota, eu tento consertar isso.
Apart from the scenario, where you need some documentation for yourself in order to continue a project after 6 months of pause, there seems to be a clear conflict of interest here between the developer and the software company.
Você realmente não tem ideia do que você estava pensando quando você revisita implementações inativas. Quando você é realmente experiente, então o problema é mais simples porque você pode confiar mais em metodologias estabelecidas ou abordagens que você usa. Isso, no entanto, também pressupõe que essas metodologias são invariantes. Mesmo que a documentação seja frouxa, você ainda precisa ser defensivo em suas implementações (por exemplo, você sabe que é melhor passar NULL neste cenário - testar essa condição).
So as a programmer, should you really write excellent documentation and easily readable code for everyone; or should you write code and documentation in a way that it does the job and you yourself can understand it, but another person may have trouble understanding it?
Eu recomendo a abordagem à prova de idiotas, que é ainda mais clara e mais resistente a erros do que a abordagem do fator de barramento. Escreva seus programas e documentação de tal forma que seja facilmente compreendido por alguém externo ao projeto - é bom para você também. Ao fazer isso, você aumentará seu valor para sua empresa e sua equipe, eles não quererão substituí-lo.