A simulation engine with an interface people will use
A numerical solver wrapped in a browser interface, so that changing a boundary condition takes a drag instead of a rewrite. Built to replace a pile of one-off scripts.
The problem
Every new configuration meant copying a script, editing constants by hand, and hoping nobody had touched the shared helper file. Results were correct but unreproducible — nobody could say with confidence which version of the code produced which figure.
The approach
I separated the solver from everything around it. The numerics became a pure function of an explicit configuration object; the configuration became something you could build in a browser and serialise to disk. That single split made runs reproducible almost as a side effect.
What I'd do differently
I optimised the solver before I had real usage data, and most of that work turned out to be irrelevant — the actual bottleneck was people waiting on each other, not the CPU. Next time the interface comes first and the profiler comes second.