No worries! It’s pretty complex – I’m elated that we’ve (you’ve*
) got this far already; it’s a far cry from a week ago, when I didn’t even know an “exp” system was possible, and thought I had weeks of puzzling out Homeworld’s Lua dialect ahead just to do a crude approximation.
As you may have guessed, I’m hardly a software engineer, but I’m trying to go from “completely useless” to “slightly competent” in programming, and one thing I’ve found is that for anything above a couple lines, my first version never works perfectly. (One reason I really like working in an interpreted language is that I can repeatedly edit and run the code, instead of waiting on a compile… because I need to do a LOT of testing, heh.)
BTW, do you have a Steam wishlist? 
Edit: I believe the problem lies somewhere in getting the subsystem added itself, rather than in the “exp” – telling the script that starting rank and exp = 1 and 30 respectively (just to cover both bases) doesn’t appear to result in addition of vet subsystem. I added SobGroup_CreateSubSystem(CustomGroup, "vet_mod_rank1") to the Create_VeteranShip function, thinking that this would be the most direct way, and no dice either. I’ll try some other stuff; not sure if this is helpful, but just in case it saves you some time!

And no, I didn’t do anything with the UI.
: “Rank 2: The crew learns to squeeze a little extra juice out of the engines. Rank 4: The gunners hone their craft and begin to target weak points. Rank 5: HQ presents your ship with a medal of honor… and a cloak generator.” Etc!