Da gibt es keine Universal-Lösung!
Jedem so wie es für ihn am besten ist.

Bei uns kann eine Quelle (ich sage jetzt bewusst nicht Modul) beliebig viele exportierte Prozeduren haben.
Aus jeder Quelle wird zunächst ein Modul und dann ein Service-Programm erstellt. Die exportierten Prozeduren werden in eine Binder-Source eingefügt, die in der Datei QSRVSRC steht und genau so heißt wie das Source-Member.
Das Service-Programm wird in ein allgemeines Binderverzeichnis eingetragen, das in den H-Bestimmungen jeder Quelle hinterlegt wurde. Nachdem das Service-Programm erstellt wurde wird das Modul gelöscht.

Ein handgestricktes Compile-Tool erledigt diese Schritte automatisch. Da wir Quelle : Modul : Service-Programm eine 1:1:1-Beziehung haben, kann die Kopilierung über eine Auswahl im PDM erfolgen, ohne Wenn und Aber.

Muss eine neue Prozedur eingefügt werden, wird die ans Ende der Quelle gestellt und anschließend das Service-Programm mit dem Compile-Command erstellt.

Die Prozeduren sind nach "Aufgaben-Bereich" in Teil-Dateien gruppiert z.B. Alle Prüf-Prozeduren für die Artikel-Nr. oder alle Update-Funktionen für den Artikel-Stamm.

Ein Programm besteht nur aus Prozedur-Aufrufen, die in diversen Service-Programmen hinterlegt sein können (allenfalls noch das eine oder andere IF oder DO). Die Compilierung kann wie gewohnt über 14 erfolgen, da die Aktivierungs-Gruppe, sowie das Binderverzeichnis in den H-Bestimmungen hinterlegt wurde. Die Aktivierungs-Gruppe wird benannt, wobei gilt Aktivierungs-Gruppe=Programm-Name.
Zu Programmen wird nur das umgewandelt, das aus einem Menü aufgerufen oder Submittet wird. Alles andere sind Service-Programme z.T. mit Aktivierungs-Gruppe *CALLER (Update/Input/Delete-Programme) oder benannten Aktivierungs-Gruppen.

Es gibt natürlich auch Verfechter anderer Strategien, die ohne Bindersprache und ohne Binderverzeichnisse arbeiten und dafür die Compile-Befehle als Kommentar in die Quelle einbinden. Bei der Compilierung werden dann diese Kommentare aus der Quelle ausgelesen und ausgeführt.

Bei wieder anderen besteht eine Quelle grundsätzlich nur aus einer Prozedur und ein Service-Programm besteht wieder nur aus dieser Prozedur. Damit kann man beim Create Service-Programm Export *ALL angeben und ohne Bindersprache arbeiten ohne Angst vor Signatur-Verletzungen haben zu müssen.

Es gibt bestimmt noch viele andere Ansätze, die alle PROS und CONS haben. Man muss sich nur für einen Ansatz entscheiden.

Auf alle Fälle sollte man keine Module verwenden. Selbst wenn man sich heute sicher ist, dass eine Quelle nur einmalig verwendet/eingebunden wird, morgen sieht die Welt ganz anders aus und man muss das Modul aus weiteren Quellen aufrufen. Muss jetzt eine Änderung erfolgen, müssen alle Objekte, in denen das Modul eigebunden wurde neu erstellt werden. (Aus Erfahrung weiß ich, es klappt selten, dass man wirklich alle Objekte erwischt!)
Bei der Einbindung in Service-Programme besteht die Gefahr nicht. Sobald ein Modul in ein Programm oder Service-Programm eingebunden wurde, kann es gelöscht werden.

Birgitta