A couple of quick things -
1. You don't need, and should not put
DoCmd.Save
in the form's before update event. For one, that has to do with DESIGN CHANGES of the form or report when that is in there. Second, if the Before Update event is firing, then you just need to let it go and it will be saving the record. The only intervention needed is when you need it to CANCEL and NOT Update. Then you need to put in
Cancel = True
Me.Undo
(you need to use the Cancel = True to tell it to stop the update).
2. Your software form I don't have time to run down all of it as I have to go catch a bus, but you should not be storing User Name in the record again; just their ID's.
3. You should NOT have a table for each software product. Your database is non-normalized and needs to have the table structure fixed before going on to anything else.