We cumulate too (I posted a previous message but is somehow missing). This usually allows devs to get a very high confidence and fidelity for the change when put live in production.
We use also a specific library (that you can call "the configuration layer" ) where all configuration for external dependencies are stored. i.e. email servers, ftp server, endpoints.
This solves the problem of the usual "I'm emailing all the customers from the test or qa, or send the edi message in test...". That you can also solve by decoupling producer and consumers (i.e. messages are posted to a queue, not consumed in the dev envs).
Also object like outq, dtaq are duplicated in the test lib and put on top (without a physical writer attached, back to what said above), this allows for easy testing also on an accurate print and routing workflow.
This allows for a super flexible layering system and really easy to think about compared to other Rube Goldberg style solutions.
We have dedicated programs to manage the library lists in what we call a list of "environment id". A user or dev can switch to a named environment (basically a LIBL, plus attributes, and that can change also depending on language parameter, i.e. to place or force different DSPF ) in less than a second.
Source management and versioning is irrelevant in the topic here, it is totally an orthogonal (one can use git etc.etc.).
------------------------------
--ft
------------------------------
Original Message:
Sent: Wed April 01, 2026 03:57 AM
From: Paul Nicolay
Subject: Library structure/contents with modern development
I'm not talking about database objects (it seems only logical to me that each environment has its own dedicated database).
I'm only referring to program objects... does each environment has its full set or do you cumulate by having multiple libraries in your library list.
Example, a test user has TSTLIB, QASLIB, PRDLIB, a QAS user has QASLIB, PRDLIB and the production only PRDLIB.
PS1. The PRDLIB in my example is also not the real production environment but a "digital twin" of the real production environment.
PS2. Not all companies have the luxery to have separate boxes for DEV, TST and QAS
------------------------------
Paul Nicolay
Architect
Cegeka
------------------------------
Original Message:
Sent: Tue March 31, 2026 01:10 PM
From: Robert Berendt
Subject: Library structure/contents with modern development
@Daniel Gross
Even with separate machines (which we do) there is still a risk. Like testing a process to find out it emails all your customers.
------------------------------
Robert Berendt IBMChampion
Business Systems Analyst, Lead
Dekko
Fort Wayne
Original Message:
Sent: Tue March 31, 2026 11:44 AM
From: Daniel Gross
Subject: Library structure/contents with modern development
Hi Paul,
it depends upon your definition of "modern development".
Of course, "library list driven object retrieval" is still up-to-date in IBM i development. It has a more or less small security risk, that someone can fumble a malicious object somewhere into the *LIBL and compromise your system.
From the safety view, your construct depends upon the premise, that production, test and development are are located on the same machine - and that is a more or less big risk. One developer who runs a wrong program with the wrong library list, can ruin the day.
I've been there - and someone has done that - it wasn't funny at all. After that incident (and working for about 26h to restore everything to normal), it was quite easy to convince my boss, to pay for a separate development and test machine.
With SCM / CMS systems in place, you often switch to at least full copies for test and production - and partial copies for the development environment(s). But if you separate your prod, test and dev environments on different partitions/machines you need full copies anyway.
Because our dev box wasn't that big, I used a trick - I created empty versions of all historical and large transaction tables. And then I restored backups from production with the option to skip existing objects. This way we had everything we needed - but not at the full size. But this will not work with referential integrity (foreign keys) - at least it will cause some problems.
So finally - for me, I would say, it's OK to have partial object libs in the *LIBL - but from a security and safety POV, I would always try to separate production and test/development as far as I can - probably even rent an extra machine from the cloud.
HTH and kind regards,
Daniel