Param is definitely the foundation that makes it possible for a small group like ours to maintain tools this powerful without going crazy. It lets us set up interfaces that are well defended, ensuring that each specific part of the code (and each member of the team) doesn’t have to reason about all the other parts of the code. The richly declared Parameterized interfaces let us state clearly what each class or function does, and then we can just leave it, secure knowing that we’ll be alerted when we or users do anything not allowed by that contract. Whenever I hear people complaining about Python’s lax typing or Python not being appropriate for large codebases or anything like that, mentally I always say “well, of course, unless you use Param”. Of course, as the main person who made Param come into existence (not by coding it, but by noisily demanding it of my employees and students), the fact that I think that shouldn’t be surprising. But it’s nice to hear it from someone else who really “gets it”.
As for why it’s not widely known or used for that purpose, that’s partly from history, in that for the first 10 years of its life we didn’t make it a separate package from our neuroscience-focused academic research simulator, and even when we did make it a proper standalone package we didn’t document or promote it very well. It still isn’t really documented, but we’ve now gotten funding to document it properly sometime in the next few months, so that’s finally going to happen. You can blame academic research for not rewarding anything but an impactful publication in your own narrow subfield; Param is definitely something that’s never going to get any Journal of Neuroscience citations! Or you can blame me having young children while trying to establish an academic career. Or you can blame Param never quite being what anyone intentionally sets out to look for; instead they want a web toolkit or machine learning library or something with more tangible immediate applications. Probably it’s all these things and more! But I’d love to hear ideas how it could be more widely known and appreciated; I cringe every time I see other large Python codebases fully of dozens of assert statements and other error checking code that still makes things only 1/10th as robust as even the most basic Parameterized objects are.