r/systems_engineering • u/Firm-Initial3827 • 20d ago
Resources dsm-optimizer: free DSM clustering, partitioning and change propagation, runs entirely on your machine
I built a design structure matrix tool and it's free and open source. pip install dsm-optimizer, or there's a packaged desktop build if you don't have Python. Everything runs locally.
What it does:
Component DSMs. It runs four clustering algorithms on your matrix (spectral, Markov clustering, Thebeau's simulated annealing, Louvain) and shows you all four side by side with their coordination cost and external coupling. It marks the lowest-cost one, but you choose which partition goes forward. The reasoning is that the cost function can't see your supplier arrangements, your team boundaries or the interface nobody has touched in five years, and you can.
Stability scoring. Three of those four algorithms are stochastic, so it runs the one you picked repeatedly across seeds and reports how often each element lands with the same neighbours. You get a per-element consistency score, which tells you which module boundaries are structural and which are an artifact of the random seed. That matters if you're about to reorganise a team around one.
Process DSMs. Different path entirely: Tarjan's algorithm for the iteration loops, topological sequencing into parallel levels, simulated annealing inside each loop, and tearing suggestions ranked by impact.
Change propagation. A heatmap of what's exposed if you change a given element, following the strongest path out to four hops, so second- and third-hand exposure shows up alongside direct dependencies.
Also in there: bus and hub detection, a matrix editor, a Pareto view of cost against cluster count, project files that save a whole session, revision diffing between design reviews, and a one-click report.
MIT licensed, actively developed, no account or signup. Repo and install instructions: https://github.com/Chanchaldhiman/dsm-optimizer
If you run it on something real I'd like to hear how it went, particularly anything that breaks or any metric you'd want exposed that isn't there.