To add one more details to what Tim wrote about how we handle internal applications - we have a partnership with our QD department where at least one during every beta release period they will request a copy of each of our apps and verify compilation, automated unit tests and manual unit tests on that beta version of Caché.  This way if there is going to be any sort of breaking change, we know it before we upgrade our dev environment and we can schedule that upgrade more wisely so as not to halt other development work.  This practice is supported by the fact that we run all of our environments on VMs so it is fairly easy for us to get a new VM cloned off for them from Test and then we are not otherwise impacted in our development workflow.  

We have been able to move to new released much more quickly as a result of this practice


That is a great question!  Today, you can separate your personal from professional subscriptions by logging out and then clicking the "Become a Member" link in the upper right-hand corner to create a new personal account (perhaps linked to your Gravatar to be used in the future ;) ).  This way you can control your content apart from whomever your current employer is.

Longer term, I would like to see the ability of making an account a collection of different personas (hats if you want) which would represent different roles within different organizations.  Internally we're looking at a project this year which may be able to move us in that direction (for all of our InterSystems-login controlled applications - DC included).  But I can't make any promises at this time in terms of timing or functionality.  But we definitely see the value in the points that you raised!


Ben Spead

Manager, AppServices, InterSystems


I can pull back the curtain and explain the variety of ways that we handle this for Caché and Ensemble-based applications within InterSystems.  We have about 35 in-house applications based on our own technologies.  Some of them are visible to customers while a majority are internal only (as an aside, you can see which of them are available to you by going to and looking at the Application Catalog which is available to you after you log in with your InterSystems credentials).  

The in-house applications are owned by a variety of teams and see a wide range of development activity - from only occationally being touched to having up to 5 or 6 developers working on the same code-base concurrently.  My team (Application Services) is responsible for providing tools, best practices and standard approaches which teams across the company can choose to adopt as opposed to reinventing the wheel.   As such, teams decide what is best for them and we have a variety of models currently in use.  

In general, we work with three environments for each application - production (LIVE), TEST and development (BASE).  Over the past few years we have moved to a model of deploying all of our LIVE servers on VMs which then enables us to clone LIVE and make TEST and BASE identical in terms of configuration, OS, etc.  This has saved a lot of time which was previously lost to surprises introduced by environments being out of sync.

With a BASE VM in place for most apps, our default work-flow is to make this a 'Shared BASE' which developers can use for their development work.  The advantages are that individual developers don't have to build out configuration and data which may impact the code they are writing (we periodically refresh BASE and TEST with the data from LIVE after appropriate scrubbing), and if a developer works with a half dozen applications they can jump in and out easily and quickly  when they need to address items across a number of applications.  Also, this makes it easier to handle things like integration (which Bill refers to above) as well as provide essentially zero ramp-up time for someone asked to jump in and help on an app for a short period.  Lastly, having a Shared BASe makes it easy for someone on call to debug code on an application which they may not normally touch.  In this model, our Studio Source Control hooks enforce only 1 developer checking out a file at a time from the Shared BASE.  

However, while this works for a majority of our applications due to the small number of developers concurrently working on the same application at the same time, we do see collissions on our most active applications with this model (because of only allowing a single developer to have a file checked out or due to different in-process changes breaking the system for others developing on it) and so we have moved other means of working in that case.  The most common is a 'hybrid' model where people can work on the Shared BASE for quick fixes, etc, but longer projects or changes which hit the most frequently edited items take place in a "Private BASE" where the developer does their work and after validation they check in their source into the BASE branch and then loads it into the Shared BASE to final development testing (this is prior to independent testing which will take place in TEST or LIVE).  In some cases the Private BASEs are per-developer namespaces on the "Shared BASE" server so that they can take advantage of common configuration and data (each developer has their own code DB but they point to the shared data DB).  In other cases developers build their own Private BASE locally and do nothing on the Shared BASE server until their code is pushed there for final BASE testing.  In the hybrid model, one developer can have a file checked out on the Shared BASE while someone else is working on the same file in their Private BASE and whoever does the check-in second will need to merge their code with the first check-in.  

Finally, we have one application which decided to have no Shared BASE at all, and instead they have a VM Template of a BASE environment for that application and each developer will spin off their own BASE VM.  This can make integration testing harder and there is no common place to test (and set-up time is much greater) so I am not in favor of this and don't generally recommend it internally to teams trying to figure out their own collaboration.  

I tend to recommend a Shared BASE as a starting point, and if a team finds that they are having confilcts due to the number of developers or level of activity I recommend that the most active developers spin off a Private BASE but leave the Shared BASE for small bug fixes, integration testing, data-driven testing or crisis debugging.   This recommendation aligns well with the home grown change control and deployment tools that we use internally and may not work well for other shops with other tools (our tools were tailored to make this model work well in order to try to maximize productivity for our internal application development activities).  

Feel free to hit me with any questions or comments on this approach :)

Ben Spead

Manager, AppServices, InterSystems

Zen Reports is its own technology (not really related to our Zen web development stack).  It's a full report-creation technology which some people use instead of reporting tools like Crystal Reports:

Because you are actually defining the report output, you can choose how it displays on HTML, PDF, Excel, etc.  


You might be running into some security issues (check the audit DB to confirm).  Or, you might not have it working because you have "Lock CSP Name" set to "Yes" in one of the web applications (ref:

I just did a quick test as follows in my 2015.1 instance:

1) Created a SAMPLES2 namespace with new SAMPLES2 DB

2) Package mapped "csp" from SAMPLES namespace to SAMPLES2 namespace

3) Edited /csp/samples2 web application as follows:

- added Unauthenticated

- added %DB_SAMPLES Application Role

- Unchecked "Lock CSP Name" AND "Autocompile" (this should be done in both /csp/samples and /csp/samples2)

- pointed "CSP Files Physical Path" to c:\intersystems\e20151\csp\samples\ 

After this I was then able to see /csp/samples2/form.csp (although with errors because I didn't map the Samples.* package to the Samples Namespace).

So it appears to work - you just need to figure out which of the above pieces you missed :)