Make the Invisible More Visible

    • Source code has no innate presence, no innate behavior, and doesn’t obey the laws of physics. It’s visible when you load it into an editor, but close the editor and it’s gone. Think about it too long and, like the tree falling down with no one to hear it, you start to wonder if it exists at all.
    • A running application has presence and behavior, but reveals nothing of the source code it was built from. Google’s home page is pleasingly minimal; the goings on behind it are surely substantial.
    • If your project is apparently on track and one week later it’s six months late you have problems, the biggest of which is probably not that it’s six months late, but the invisibility force fields powerful enough to hide six months of lateness! Lack of visible progress is synonymous with lack of progress.
    • Writing unit tests provides evidence about how easy the code unit is to unit test. It helps reveal the presence (or absence) of developmental qualities you’d like the code to exhibit; qualities such as low coupling and high cohesion.
    • Using bulletin boards and cards makes progress visible and concrete. Tasks can be seen as Not Started, In Progress, or Done without reference to a hidden project management tool and without having to chase programmers for fictional status reports.
    • Doing incremental development increases the visibility of development progress (or lack of it) by increasing the frequency of development evidence. Completion of releasable software reveals reality; estimates do not.