Explain why small changes rebuild everything
Add a Cache that invalidates downstream results
Show that naive algorithm often recomputes results
Add set_dependencies_of()
Add simple docstrings to methods