I completely agree that good documentation, READMEs, ADRs, and design documents are invaluable when they’re available. They often provide context that no automated tool can infer.
I’m particularly interested in the situations where documentation is outdated, incomplete, or missing. In those cases, how do you usually rebuild your understanding of the system?
For example, do you mostly rely on reading the source code, runtime tools like rqt_graph, or do you have any scripts or internal tooling that help you analyze the workspace?
One thing I do is to make sure all the ROS2 systems are in place (rviz2, rqt, etc) and that they work with the network and that the correct versions (Humble, Jazzy, etc) are functional in and out of the container. For instance, some wifi routers block multicast, maybe there’s a device on the network that causes a delay, maybe there’s a version mismatch with pytorch. Making sure the ground isn’t shifting during the implementation saves a lot of headaches later on. (Manually inspect the code…LOL)
When documentation is missing or outdated, I usually start from the launch tree rather than the node source.
The reason is that any static reading of the workspace—grep, IDE navigation, or even handing the source to an LLM—recovers the declared topology, while in ROS 2 the effective topology is assembled at launch time.
To me, the launch tree is the closest thing to an executable architecture document. I walk it first, collecting IncludeLaunchDescriptions, namespaces, remappings, parameter YAMLs, and conditional branches. Only then do I read the node source.
rqt_graph is still valuable, but I tend to treat it as a runtime snapshot rather than the architecture itself.