When we build developer tools, we tend to optimize for performance and API consistency. When we build mathematical tools, we have to optimize for something rarer: clarity of reasoning. Writing software for mathematicians, researchers, and educators requires a different mindset. It’s not just about whether the code runs fast; it’s about whether the code thinks the way the user does.
This realization struck me while designing a Python package for combinatorial graph theory called chipfiring. What began as a niche research tool soon became an exercise in human-centered software design. The lessons, however, apply far beyond graph theory. Whether you’re writing a symbolic algebra engine, a geometry toolkit, or a probability simulator, the same principles can help you craft mathematical software that people actually understand.
