By: Dean Kent (dkent.delete@this.realworldtech.com), March 4, 2008 7:51 am
Room: Moderated Discussions
Michael S (already5chosen@yahoo.com) on 3/4/08 wrote:
---------------------------
>
>What is a standard source management solution under MVS? Why it wasn't applicable in your case?
>
The one in use was an in-house written solution. Most source management solutions are more 'production control' than commercial code management.
Production control would be a situation where an IT shop has developers who make changes, and then deploy the change to the users. Everyone runs the production code at whatever level IT deploys it. So you don't have to worry about users running different levels of code. When you get a dump to debug, you only have to keep the current level of the code.
In the commmercial environment under MVS, users may not have certain fixes applied. So, we had to be able to keep the listings for every version of a module. In our environment we ship a new object every time we make a fix, even if a single line of code has changed. Obviously, some macro changes require reassembly of multiple objects. So, when a customer reports a bug, we have to be able to find the specific listing for the level of code he/she is running.
This is important in the MVS world, because a big part of the cost of software is 'maintenance' - which essentially means the vendor will 'guarantee' to fix any serious bugs you encounter. For a 'shop down', the guarantee is that it will be fixed in hours (or at least, a workaround will be given to get you running again). We have 4 defined levels, or severities. Therefore, it is absolutely critical that we have access very quickly to the specific level of code the customer has (source, macros, object), and that we can reassemble it.
I guess the main issue we faced wasn't just source control, but research and recreation. We have to be able to quickly identify what level of code the customer is running, and match it to what we have shipped. This is where the original source/change control system failed - we were getting in dumps where it was very difficult to find the source/listings for, and in some cases it appeared to have been lost. In a shop down situation, that could cost us very big bucks.
The new one tracks every change by its fix number. The published fix has an ID, which is embedded into every object module. The file it is stored under is named with the product code and fix ID, as well as the various pieces (JCL, panels, tables, source, macros, object, listing, etc.) all together. It moves/tracks all of these together from development thru testing/QA/publication, and guarantees that changes are serialized because it is possible that multiple technicians are working on the same module or macro (or other piece), and we don't always have the luxury of being able to spend time sorting out what changes should be included when shipped to a particular customer - it has to be correct (particularly in a 'shop down' situation).
So, we really have two processes - development and maintenance. Development is similar to what most people are familiar with - people work on the code and test it until it is considered complete. You might have multiple people working together, and you have to retrofit changes in from multiple people. But you generally have time (possibly weeks, or even months) before anything has to be delivered to a customer. Maintenance is sort of like being an EMT. You have to keep the customer alive long enough to get the real fix in place (which *could* be your fix). But in our case, we presume that if the bug hits one customer, it could hit anyone - so as soon as a fix is verified to have helped one customer, it is 'published' so any customer calling in has access to it. This is why it is critical to have all documentation for *every* fix - you never know what a customer might have on their system when he/she calls in for service.
Regards,
Dean
---------------------------
>
>What is a standard source management solution under MVS? Why it wasn't applicable in your case?
>
The one in use was an in-house written solution. Most source management solutions are more 'production control' than commercial code management.
Production control would be a situation where an IT shop has developers who make changes, and then deploy the change to the users. Everyone runs the production code at whatever level IT deploys it. So you don't have to worry about users running different levels of code. When you get a dump to debug, you only have to keep the current level of the code.
In the commmercial environment under MVS, users may not have certain fixes applied. So, we had to be able to keep the listings for every version of a module. In our environment we ship a new object every time we make a fix, even if a single line of code has changed. Obviously, some macro changes require reassembly of multiple objects. So, when a customer reports a bug, we have to be able to find the specific listing for the level of code he/she is running.
This is important in the MVS world, because a big part of the cost of software is 'maintenance' - which essentially means the vendor will 'guarantee' to fix any serious bugs you encounter. For a 'shop down', the guarantee is that it will be fixed in hours (or at least, a workaround will be given to get you running again). We have 4 defined levels, or severities. Therefore, it is absolutely critical that we have access very quickly to the specific level of code the customer has (source, macros, object), and that we can reassemble it.
I guess the main issue we faced wasn't just source control, but research and recreation. We have to be able to quickly identify what level of code the customer is running, and match it to what we have shipped. This is where the original source/change control system failed - we were getting in dumps where it was very difficult to find the source/listings for, and in some cases it appeared to have been lost. In a shop down situation, that could cost us very big bucks.
The new one tracks every change by its fix number. The published fix has an ID, which is embedded into every object module. The file it is stored under is named with the product code and fix ID, as well as the various pieces (JCL, panels, tables, source, macros, object, listing, etc.) all together. It moves/tracks all of these together from development thru testing/QA/publication, and guarantees that changes are serialized because it is possible that multiple technicians are working on the same module or macro (or other piece), and we don't always have the luxury of being able to spend time sorting out what changes should be included when shipped to a particular customer - it has to be correct (particularly in a 'shop down' situation).
So, we really have two processes - development and maintenance. Development is similar to what most people are familiar with - people work on the code and test it until it is considered complete. You might have multiple people working together, and you have to retrofit changes in from multiple people. But you generally have time (possibly weeks, or even months) before anything has to be delivered to a customer. Maintenance is sort of like being an EMT. You have to keep the customer alive long enough to get the real fix in place (which *could* be your fix). But in our case, we presume that if the bug hits one customer, it could hit anyone - so as soon as a fix is verified to have helped one customer, it is 'published' so any customer calling in has access to it. This is why it is critical to have all documentation for *every* fix - you never know what a customer might have on their system when he/she calls in for service.
Regards,
Dean
Topic | Posted By | Date |
---|---|---|
Multicore is unlikely to be the ideal answer. | Anders Jensen | 2008/02/14 04:24 AM |
And the links.. | Anders Jensen | 2008/02/14 04:25 AM |
Disappointing.. | Linus Torvalds | 2008/02/14 10:17 AM |
Disappointing.. | Mark Roulo | 2008/02/14 11:03 AM |
LOL (NT) | Linus Torvalds | 2008/02/14 05:43 PM |
Disappointing.. | David Patterson | 2008/02/15 11:53 AM |
Disappointing.. | Linus Torvalds | 2008/02/15 05:01 PM |
Disappointing.. | anon | 2008/02/15 08:54 PM |
Disappointing.. | JasonB | 2008/02/19 07:45 PM |
Disappointing.. | Ilya Lipovsky | 2008/02/22 06:27 PM |
Disappointing.. | Scott Bolt | 2008/03/16 11:36 AM |
Need for new programming languages | Vincent Diepeveen | 2008/02/19 06:18 AM |
Need for new programming languages | Pete Wilson | 2008/02/24 11:41 AM |
Disappointing.. | Zan | 2008/02/25 10:52 PM |
Disappointing.. | Robert Myers | 2008/02/19 09:47 PM |
Disappointing.. | Fred Bosick | 2008/02/22 06:38 PM |
Disappointing.. | Robert Myers | 2008/03/01 01:17 PM |
The limits of single CPU speed are here. | John Nagle | 2008/03/14 10:55 AM |
The limits of single CPU speed are here. | Howard Chu | 2008/03/15 01:02 AM |
The limits of single CPU speed are here. | slacker | 2008/03/15 08:08 AM |
The limits of single CPU speed are here. | Howard Chu | 2008/03/17 01:47 AM |
The limits of single CPU speed are here. | slacker | 2008/03/17 10:04 AM |
And the links.. | Howard Chu | 2008/02/14 12:58 PM |
I take some of that back | Howard Chu | 2008/02/14 01:55 PM |
And the links.. | Jesper Frimann | 2008/02/14 02:02 PM |
And the links.. | Ilya Lipovsky | 2008/02/15 02:24 PM |
And the links.. | iz | 2008/02/17 10:55 AM |
And the links.. | JasonB | 2008/02/17 07:09 PM |
And the links.. | Ilya Lipovsky | 2008/02/18 01:54 PM |
And the links.. | JasonB | 2008/02/18 10:34 PM |
And the links.. | Thiago Kurovski | 2008/02/19 07:01 PM |
And the links.. | iz | 2008/02/20 10:36 AM |
And the links.. | Ilya Lipovsky | 2008/02/20 03:37 PM |
And the links.. | JasonB | 2008/02/20 06:28 PM |
And the links.. | JasonB | 2008/02/17 06:47 PM |
And the links.. | Ilya Lipovsky | 2008/02/18 02:27 PM |
And the links.. | JasonB | 2008/02/18 10:00 PM |
And the links.. | JasonB | 2008/02/19 03:14 AM |
And the links.. | Ilya Lipovsky | 2008/02/20 04:29 PM |
And the links.. | JasonB | 2008/02/20 06:14 PM |
And the links.. | Ilya Lipovsky | 2008/02/21 11:07 AM |
And the links.. | Howard Chu | 2008/02/14 01:16 PM |
And the links.. | Jukka Larja | 2008/02/15 03:00 AM |
Berkeley View on Parallelism | David Kanter | 2008/02/15 11:41 AM |
Berkeley View on Parallelism | Howard Chu | 2008/02/15 12:49 PM |
Berkeley View on Parallelism | David Kanter | 2008/02/15 03:48 PM |
Berkeley View on Parallelism | Howard Chu | 2008/02/17 05:42 PM |
Berkeley View on Parallelism | nick | 2008/02/17 09:15 PM |
Berkeley View on Parallelism | Howard Chu | 2008/02/18 04:23 PM |
Berkeley View on Parallelism | nick | 2008/02/18 10:03 PM |
Berkeley View on Parallelism | Howard Chu | 2008/02/19 01:39 AM |
Berkeley View on Parallelism | rcf | 2008/02/19 12:44 PM |
Berkeley View on Parallelism | Howard Chu | 2008/02/19 03:25 PM |
Average programmers | anon | 2008/02/18 12:40 PM |
Berkeley View on Parallelism | JasonB | 2008/02/15 08:02 PM |
Berkeley View on Parallelism | JasonB | 2008/02/15 08:02 PM |
Berkeley View on Parallelism | Dean Kent | 2008/02/15 08:07 PM |
Berkeley View on Parallelism | Ray | 2008/02/20 03:20 PM |
Berkeley View on Parallelism | JasonB | 2008/02/20 06:11 PM |
Berkeley View on Parallelism | FritzR | 2008/02/24 03:08 PM |
rubyinline, etc. | nordsieck | 2008/02/22 03:38 PM |
rubyinline, etc. | JasonB | 2008/02/23 05:53 AM |
rubyinline, etc. | nordsieck | 2008/03/02 01:40 AM |
rubyinline, etc. | Michael S | 2008/03/02 02:49 AM |
rubyinline, etc. | Dean Kent | 2008/03/02 07:41 AM |
rubyinline, etc. | Michael S | 2008/03/02 08:19 AM |
rubyinline, etc. | Dean Kent | 2008/03/02 08:30 AM |
rubyinline, etc. | JasonB | 2008/03/02 05:26 PM |
rubyinline, etc. | JasonB | 2008/03/02 06:01 PM |
rubyinline, etc. | Anonymous | 2008/03/03 02:11 AM |
rubyinline, etc. | JasonB | 2008/03/03 09:40 AM |
rubyinline, etc. | Foo_ | 2008/03/09 09:59 AM |
rubyinline, etc. | JasonB | 2008/03/10 01:12 AM |
rubyinline, etc. | Gabriele Svelto | 2008/03/10 02:22 AM |
rubyinline, etc. | JasonB | 2008/03/10 04:35 AM |
C++ for beginners | Michael S | 2008/03/10 05:16 AM |
C++ for beginners | JasonB | 2008/03/10 06:35 AM |
C++ | Michael S | 2008/03/10 04:55 AM |
rubyinline, etc. | Linus Torvalds | 2008/03/03 11:35 AM |
rubyinline, etc. | Dean Kent | 2008/03/03 02:35 PM |
rubyinline, etc. | JasonB | 2008/03/03 03:57 PM |
rubyinline, etc. | Dean Kent | 2008/03/03 08:10 PM |
rubyinline, etc. | Michael S | 2008/03/04 01:53 AM |
rubyinline, etc. | Dean Kent | 2008/03/04 07:51 AM |
rubyinline, etc. | Michael S | 2008/03/04 08:29 AM |
rubyinline, etc. | Dean Kent | 2008/03/04 08:53 AM |
rubyinline, etc. | Michael S | 2008/03/04 11:20 AM |
rubyinline, etc. | Dean Kent | 2008/03/04 02:13 PM |
read it. thanks (NT) | Michael S | 2008/03/04 04:31 PM |
efficient HLL's | Patrik Hägglund | 2008/03/04 03:34 PM |
efficient HLL's | Wes Felter | 2008/03/04 09:33 PM |
efficient HLL's | Patrik Hägglund | 2008/03/05 01:23 AM |
efficient HLL's | Michael S | 2008/03/05 02:45 AM |
efficient HLL's | Wilco | 2008/03/05 05:34 PM |
efficient HLL's | Howard Chu | 2008/03/05 07:11 PM |
efficient HLL's | Wilco | 2008/03/06 02:27 PM |
efficient HLL's | anon | 2008/03/05 08:20 AM |
And the links.. | Groo | 2008/02/17 04:28 PM |
And the links.. | Vincent Diepeveen | 2008/02/18 02:33 AM |