El artículo aborda cómo aprender diseño y arquitectura de software, dirigido especialmente a investigadores físicos que necesitan entender el desarrollo de código científico. El autor comparte sus reflexiones basadas en su experiencia en bioinformática y proyectos como IntelliJ Rust y rust-analyzer.
La primera observación principal es que el diseño de software se aprende mejor mediante la práctica directa, no solo con cursos formales. Los proyectos reales, como llevar la liderança de un proyecto complejo, enseñan más que la teoría académica.
La segunda observación clave es la Ley de Conway: la estructura del software refleja la organización que lo produce. La diferencia entre código científico e industrial no radica tanto en el conocimiento técnico, sino en los incentivos: un doctorado necesita publicar en tres meses, mientras que un proyecto industrial tiene otras presiones.
El autor propone dos estrategias: primero, modificar los incentivos cuando sea posible (como en TIGER_STYLE); segundo, adaptarse a los incentivos existentes mediante lo que denomina las «cuatro etapas del duelo» hacia la aceptación. Usa rust-analyzer como ejemplo: el proyecto equilibra características profundas (un compilador) con amplias (funciones de IDE), atrayendo tanto contribuyentes dedicados como «guerreros de fin de semana».
Para estos contribuyentes ocasionales, rust-analyzer aísla características con catch_unwind, permitiendo que el código falle sin afectar al usuario. El núcleo del proyecto, en cambio, mantiene estándares más altos de calidad.
El artículo concluye recommending recursos como la charla «Boundaries» de Gary Bernhardt, writings de Pieter Hintjens sobre Ley de Conway, y libros como «Software Engineering at Google» y «The Philosophy of Software Design».
