1988-2004 TSI: AdDept: The Macy’s Installation

The first AdDept client. Continue reading

Quique Rodriguez.

In early 1988 Sue Comparetto, who had handled the GrandAd accounts in New York City, received a call at TSI from IBM’s Manhattan office. One of our contacts, Quique (KEY kay) Rodriguez1 wanted to talk with us about Macy’s New York. Its advertising department had been using software programs on an obsolete System/34 to keep track of its advertising expenses and income. The system had been developed internally by people who no longer worked for Macy’s. Documentation was minimal.

Macy’s New York had recently merged with Macy’s New Jersey. The new entity was called Macy’s Northeast, and its offices were on an upper floor of the “world’s largest store” on 34th St. in Manhattan. The advertising department’s existing system had already been stretched to the limits and would never be able to handle the increased load. Moreover, the users were not happy with some aspects of the code. Alan Spett2, one of a very large number of vice-presidents at Macy’s, had been provided by corporate with a budget for replacing or updating the existing system.

This may have been the last time that I actually jumped.

I jumped for joy and clicked my heels when I heard about this opportunity. For some time I thought that companies that produced and/or scheduled their own advertising represented a attractive untapped market for the skills and knowledge that we had acquired from our seven years works with advertising agencies. Evidently I was right. We had never approached any of these departments because I had absolutely no idea how we could even identify which companies created and placed their own ads.

Coincidentally, IBM had just announced a new mini-computer, the AS/400, to replace the System/36 (which had replaced the System/34 in 1983). This announcement and its implications for TSI are described in considerable detail here.

The train brought us to Penn Station, only a block or so from Macy’s.

I made several trips by Amtrak train to the city to document the requirements for the new system. Sometimes I was accompanied by Michael Symolon, TSI’s marketing director at the time, and sometimes by Sue. We soon learned that Macy’s advertising department did everything that an ad agency did except keep track of the amount of time spent on individual production jobs. In fact, they had an advertising agency name that they used when ordering media. In addition, the department had many other needs that regular ad agencies lacked. Specifically, they were required to allocate both production and media expenses to the selling departments. These departments were identified by three-digit numbers. Each was assigned to an administrative group that also had a number. In turn there were three levels of vice-presidents who “owned” administrative groups3.

Macy’s also billed the merchandise vendors (Clinique, Ralph Lauren, Levi’s, etc.) a portion of the expense for ads that featured their products. The cost to the merchandise department was net of these “co-op” billings. The contract could be for a percentage of the media cost or it could be a fixed amount.

The first phase of this job entailed providing Macy’s with everything that they needed to get the ads in all media scheduled—printed schedules in the format that they liked, “insertion orders” (called “delivery tickets” by other retailers) to accompany the materials sent to the media vendors, and so on—in every media. It also included keeping track of expenses and co-op for each level of the merchant hierarchy. There were several different formats that they used for reporting these breakdowns.

I envisioned that the creation of any ad would consist of five steps:

  1. An ad number within the season and a version code that was usually blank would be entered, or ad numbers could be assigned by the system by pressing a function key.
  2. A new ads screen allowed selection of the ad type (e.g., black-and-white ROP) and entry of the primary run date, which must fall with the season.
  3. The other information that applied to all of the media for the ad would be entered on a header screen. This varied by type of ad, but each screen included selection of a pub group—a list of newspapers, markets, or stations.
  4. A media selection screen showed one line for each pub in the pub group with dates, quantities, rates, and other costs or discounts. Any line could be edited or deleted. Additional pubs could be specified.
  5. A participants screen to provide the list of departments or groups for the ad with the expected cost percentages and co-op amounts for each.

Storewide ads could be entered rather quickly. Ads with many departments or groups might take a few minutes. This approach was warmly received. The employees were accustomed to specifying the participants for each pub in the ad.

After the schedule was created, any aspect of an ad could be changed, or the ad could be killed, (in exceptional cases), deleted, or moved to a different date. New ads could be defined. Once the ad was run, the actual participants and the actual co-op could be provided. History records with dates, times, and user ID’s were kept for all changes.

How did Macy’s determine the percentage of the actual cost of each ad that was to be allocated to each department or administrative group? The process astounded me. In one room4 were seated from three to five clerks. Each was provided with a stack of newspapers and a list of ads that were scheduled to be run as well as lists of department numbers and the numbers of administrative groups. They looked through the newspapers to find the ads that Macy’s had run. They then measured—with a ruler!—each of the “blocks” in the ad to see how many columns wide (six columns to a page) and how many inches deep (i.e., vertically) the block was. They then entered the column inches for each block. For blocks that were not specific to a department or group, a special “storewide” department #999 was created. The total of the measurements must exactly equal the total size of the ad.

My approach changed this process so that the clerks measured ads, not insertions (the ad in a specific paper). If the ad was already measured, the clerk could see what had been entered, who did it, and when.

A similar process was also required for each page of each direct mail piece and newspaper insert. The ads for other media were not measured, but actual percentage breakdowns were recorded.

Similarly, the actual co-op dollars received from the selling departments (a process called “turning in”) could be recorded. Lists of missing co-op could be printed.

The most important financial reports for Macy’s compared the committed co-op and costs with the actual measured costs and actual co-op. They could be run for any or all merchants (the vice presidents who owned the departments) and any or all media.

Camex was located at 75 Kneeland St. in Boston.

In addition to all of this, Alan had ideas for other modules such as an inventory system for the merchandise used for photo shoots in the studio in Newark and a system to manage the shoots themselves. He also wanted us eventually to work on an interface with the Camex system that Macy’s used to create the images for the ROP6 ads and books. Thank goodness these ideas were not included in the original contract.

TSI’s GrandAd system for ad agencies had been built around a file for ads, the key to which was a three-digit client number and a five-digit job number. So, each client could have up to 99,999 jobs. For the departmental system, which I decided to call AdDept, I designed a similar structure, but, since Macy’s itself was the only client, I made the three-digit code stand for the season. 891 meant spring of 1989. 892 was fall of 1989. Eventually, a one-digit code for the century was added as well, but otherwise this proved to be a very feasible approach.

Many other structural changes were necessary. The most significant one was the designation of a one-character version code as part of the unique identifier (key) to the main media file. This could be used to make distinctions that varied by pub (media vehicle). For example, one item in an ad might be “swapped out” for a different item in another ad. The catalogs sent to some markets might not include some pages.

The new table for the pub groups mentioned above allowed Macy’s to identifying papers in which they often ran the same ad, e.g., the tabloids. There was no limit on the number of pub groups, and pubs could be in any number of pub groups.

I did not mention this to anyone at the time, but while I was gathering requirements, I noticed a very serious flaw in the design of Macy’s existing software for the S/34. The same ad was run in a few papers, but each insertion in each paper was given a separate ad number. The clerks doing the measuring were each assigned one or more newspapers. They measured and then entered into the computer the amount of space for each department in each ad. The person next to them might have already measured the same ad in a different paper, but there was no way for them to use that information; they had to key it all in again. So, with the S/34 design the increase in the number of papers added by the merger would more than double the work in allocating costs. My approach would decrease the work even with more papers. They would only measure the ad in one paper.

How great was this? The ROI for this feature alone would easily surpass the cost of the entire system in the first year!

How was such a colossal blunder possible? Well, the S/34 programs were designed for Macy’s New York, which advertised almost exclusively in only three papers: The New York Times (a broadsheet), the Daily News (a tabloid), and Newsday, a Long Island newspaper with a unique shape. Each of these would require separate versions and therefore separate measurements. However, all of the new papers were either tabloids or broadsheets. There was no need for separate measurements.

At some point in mid-summer TSI needed to do a presentation for Macy’s at IBM’s office on Madison Avenue in New York. There was no competition; no other software developer wanted anything to do with this project. The alternative for Macy’s was to enlist their IT department to do something. No one mentioned this, but I was quite certain that the IT department would not be able to deliver a functioning system that met all the requirements within the required time frame. Of course, I was not certain that we could do it either. However, we had delivered several large projects on schedule, and I was willing to put in the hours5 to make this one a success.

590 Madison Ave., then known as the IBM Building.

I wanted to demo the GrandAd system and explain how we would adjust the database to fit Macy’s. I made arrangements to use a S/36 in IBM’s office at 590 Madison Avenue to show how our advertising agency system currently worked and how it could be adapted. I considered–and still do–this to be the most important presentation that I ever gave. It was my only chance to persuade Macy’s Advertising Director, Howard Adler, that TSI should be contracted to do the project. I figured that if we got Macy’s, and we did a good job, a whole new market would be opened to us. At that point I was still naive enough to assume that other retailers would surely be much less difficult because we had already done the programming for the largest retail advertiser in the country.

I needed to transport our GrandAd programs and our demo data to New York. Not only was it not possible in 1988 to send them there electronically using something like FTP. We did not even have access to a compatible medium. The I/O device on IBM’s S/36 in NYC read 8” diskettes. Our system in CT used 5¼” diskettes. So, I saved our programs and our data onto nine 5¼” diskettes. Then I used a machine that I had purchased for just this purpose to copy the 5¼” diskettes onto previously blank 8” diskettes. I then loaded the 8″ diskettes into a “magazine” that I had obtained somewhere. The S/36 in New York included a device for reading diskettes from such a magazine.

This is the only photo that I could find of a magazine. The diskettes are inserted in and removed from the opposite side.

You say that you are not familiar with the concept of diskette magazines? For over a decade IBM used them on the S/34 and the S/36. As far as I know, no other system from any manufacturer followed suit.

They were almost completely plastic. Their width was about an inch and a half. The other dimensions were just large enough for 8” diskettes. One side was open to allow insertion and removal of diskettes. Small plastic rails on the top and bottom of the open side kept the diskettes separate from one another. The only thing on the magazine that was not plastic was a small metallic bar near the top of the open space that held the diskettes in. The bar could be lifted up on a hinge to allow access to diskettes. The machine that read the diskettes could also do this (like a juke box), and it was smart enough to read them sequentially.

The process of saving and converting the programs and data, which I probably did over a weekend, took several hours. I then inserted the 8” diskettes into the magazine, put it in my sample case with my other materials, and then stowed the sample case in the trunk of my Celica. I do not remember why, but I must have left the car in the sun for several hours. When Michael and I reached New York and took out the magazine, we could see that the little iron bar that restrained the diskettes had apparently become hot enough to melt little notches into all the diskettes. The magazine drive on IBM’s system refused to read them. O tempora, o mores!

Michael had a brilliant idea. He used a sharp knife to slit the edge of each damaged diskette and nine new diskettes that we borrowed from IBM. The actual data was not, of course on the plasticized paper that one could handle (and therefore slit). It was on a very thin circle of magnetized film inside. For each new diskette Michael replaced the blank film disk inside with the one that he had retrieved from a diskette that I had made. Then he carefully inserted the nine new diskettes that hopefully contained our programs and data into the magazine. I then loaded the magazine into the S/36’s magazine drive again and entered the command to restore the files. The machine successfully read six diskettes. However, at that point it made an awful noise and totally mangled the seventh diskette including, because we had no way to reseal the side that Michael had slit, the precious film inside.

My dog could not juggle six balls.

So, I was faced with the prospect of making the most important presentation of my life with absolutely no software to demonstrate. The pony in my “dog and pony show” was a stick-figure drawing. Would anyone notice?

Fortunately, my many years of experience in debate at adjusting a presentation at the last minute kept me from panicking. I began the presentation by apologizing for the technical problem. I then illustrated the approach that we proposed to take using the whiteboard that IBM provided, and I answered questions as well as I could.

It was enough. Macy’s agreed to put in motion the process of contracting with TSI. As Alan later said, “You were definitely the only game in town.”

The plan was to install the system in the “System/36 environment” of a B30 model of an AS/400. The I/O devices were a single 8” diskette drive and a ½” tape drive. TSI had no system that had either of these drives, and so our only choice was to execute the cumbersome conversion process every time that we needed to make changes.

TSI could not even afford J. Cheever Loophole.

I sent Alan our usual two-page contract. He sent it to their legal department and returned one with about twenty-five pages. I should mention that the TSI was dirt poor at this time. Sue and I had been low on funds before, but this was the first situation that rose to a crisis level. Details are posted here. We certainly could not afford a lawyer. I had to read the contract very carefully and assume the worst. After a few changes, we agreed, signed it, and started work. I did almost 100 percent of the coding. The other programmers were busy with work for our other clients, and I did not trust Sue to do the work.

I was not able to use a single program from the GrandAd system. I thought that at least one of the many insertion order programs that we had written for ad agencies would be usable without much modification, but I was wrong. The people in retail advertising just do not think like the people in advertising agencies. Every single program was written from scratch.

We had no time to produce a detailed design document describing the project. Our drop-dead deadline was the end of the season in late January. All programs must be totally functional. The process was:

  1. Write the code.
  2. Get it to the point where there was something to show to Macy’s.
  3. Save the changes to 5¼” diskettes.
  4. Copy the 5¼” diskettes to 8” diskettes.
  5. Take the train to New York.
  6. Install the new software from the 8″ diskettes. This could take up to an hour.
  7. If changes had been made to the database definitions, make them on Macy’s system.
  8. Make changes on the fly as necessary.
  9. Show Macy’s how the new code works.
  10. Save the changes to 8” diskettes.
  11. Bring the 8″ diskettes on the train ride to TSI.
  12. Copy the 8” diskettes to 5¼” diskettes.
  13. Install the changes on TSI’s system.
The luxurious Windsor Locks Amtrak stop. This is the view looking north. From the parking lot the engine’s light could be seen under the bridge.

This was, to be sure, a terrible way to do things. It required me to make at least one trip to New York every week for several months. Usually it was up and back on the same day. I stayed overnight at a hotel a couple of times. Often I made two up-and-back trips in a week. Each trip required a twenty-five minute drive to the train platform. I boarded the train at 6:00 AM in Windsor Locks. There is only a platform there. I therefore sat in my car with the heat on until I saw the light of the train approaching.

The word you did not want to see was “DELAYED”.

If everything went well, I arrived back at the train platform at 9:30PM. The trains in the evening, however, were almost never on time. Those trains originated in Miami, FL. There were plenty of opportunities for delay as each one crawled its way north. A report on my most memorable Amtrak experiences is posted here.

During this process Alan would quite often come up with new thoughts as to what should be in the “base system” covered by the contract. I grumbled, but I almost always did what he asked. One morning I saw a Daily News in Penn Station with the headline “Macy’s Computer System is Driving Me Crazy!” I bought a paper, cut out the headline, and taped it to the inside of my sample case.

Meanwhile, TSI had received only a deposit from Macy’s. However, we were desperate to receive that final check. I saw no alternative to this nightmarish schedule.

The scope of the project was enormous, and almost nothing from the GrandAd code was usable for this project. In addition to everything else, the emphasis at Macy’s was on newspaper ads. In my experience ad agencies used the term “print”, which for them referred to direct mail and magazines. Most agencies treated newspapers as magazines that published more often on cheaper paper to a geographically limited audience. The ingrates who ran the papers did not even offer discounts to ad agencies. Macy’s, on the other hand, could run a dozen or more ads in one issue of a newspaper.

Time to go home.

Mirabile dictu! By February, 1989, the system was stable enough that Macy’s paid us most of the balance. This did not end the crisis at TSI, but it allow us to meet the payroll for a few months. In retrospect, I cannot imagine how we pulled it off. I remember working seven days a week. I was always at work by 6AM, and I seldom left before 7PM7. I admit that I always went home for lunch, and I usually took a short nap.

Gary Beberman.

What enabled the completion of this seemingly impossible task in that amount of time was the fact that Alan somehow got Gary Beberman8 to serve as the project manager. He could speak advertising to the workers at Macy’s and geek to us. I only trained one person; Gary trained the others. I am not sure where Alan found Gary or how he got assigned to the project, but he was a godsend. He saved us a huge amount of time and frustration, and he was also quite adept on pouring oil on troubled waters during the frustrating periods in which I was working feverishly on the code.

The next two projects for Macy’s were an inventory system for the “loan room” (usually called “merch room” at other retailers) and a more sophisticated system of entering and reporting actual costs, what Macy’s called “financials”. I gathered the specs for these projects on trips to Macy’s and produced detailed design documents, which Alan quickly approved.

Denise Bessette did almost all of the programming on these two large requests, and she did an outstanding job. I installed the code and showed the people at Macy’s how to use the programs.

Merchandise that was afraid of the traffic could have just as easily taken the train.

The loan room gathered merchandise needed for photo shoots and sent it to the photo studio in Newark or to some other location. Part of the automation of this process was the printing of tags for each item. Almost as soon as this was implemented, the amount of pilferage reportedly decreased dramatically. The merch room manager told me that previously a lot of merchandise had trouble remembering the way back to Manhattan from Newark. She was extremely happy with the new system.

Denise also completed the other project according to the approved design document, and I delivered it. The finance manager then produced a bevy of changes that she wanted. I offered to quote the changes at TSI’s usual fee of $75 per quote. Alan said that Macy’s was under the impression that these programs fell under the terms of the original contract. It clearly did not include them. He was also surprised that I insisted on charging for my time at Macy’s after the warranty period. I would not give in on these matters, and this caused some bitterness.

At some point in this process TSI leased an AS/400 model B10 from IBM. We hooked everyone up to it, and we converted all of Macy’s programs to run in the native environment instead of the System/36 environment. This project went fairly smoothly. I don’t remember any great headaches, and the programs were considerably faster.

In other respects the installation also proceeded rather smoothly as long as Gary was there, but when he and his wife moved to the West Coast, things started to get a little testy. Alan hired Satish Rahi9 (accent on the second syllable in both names) to manage the installation. Satish must have presented himself as an alternative to paying TSI to program reports. He thought that he could produce any desired output using a third-party query product from a company called Gupta Technologies. Their Wikipedia page is here.

Satish was shocked that the product did not work on most of our tables. I told him that there was nothing in our contract that said or implied that third-party products (of which even then there were quite a few) would work with tables that we designed and implemented. IBM’s Query/400 product had no trouble with any of our tables. After considerable digging I determined that the source of the problem was that we wrote records in BASIC, not in SQL10, which was not even available on the AS/400 yet. The designers of Gupta’s product evidently did not take this into account when they began marketing to AS/400 customers.

Satish started lecturing me about industry standards for databases. I explained that the industry standard for writing x-digit positive integers in BASIC was N x, which left-pads these numbers (such as the ad number) with blanks, as opposed to ZD x, which left-pads with zeroes. In fact, most versions of BASIC did not even have a way to write “zoned decimals” without writing extraneous code to do it11. One day I got so upset while arguing with Satish about this that I seriously considered driving down to the Amtrak stop so that, after sitting on a train for over three hours, I could ride the elevator up to his floor at Macy’s and punch him in the nose.

Not long after this conversation Alan fired Satish, and eventually we changed all the programs to “zone” all the integers. Of course, we got paid for neither this project nor the conversion to the native environment, but we felt that we had to do them to hope to stay in IBM’s and Macy’s good graces.

Denise Jordaens.

From that point on we dealt with Denise Jordaens12 and Lee Glickman13 at Macy’s. Things stabilized, but the department did not get nearly as much out of the system as it could have.

Over these years Macy’s went through a lot of changes. In January of 1992 the company declared bankruptcy, thereby leaving TSI with a stack of unpaid invoices. In 1994 Macy’s was absorbed into Federated Department Stores, which had itself just emerged from bankruptcy. This gave them a new set of standards to abide by. Eventually other acquisitions gave Macy’s in New York a large number of new stores to manage on the east coast. They continued to use the loan room system and to pay our maintenance bills. They never asked about any of the enhancements that were installed at Macy’s South and Macy’s West.

There were other complications as well. On one occasion Macy’s asked for someone from TSI to visit so they could explain their problems with and aspirations for the system. My schedule was totally booked for weeks in advance. I asked Sue to take the trip. She did. I don’t know what transpired, but Denise Jordaens later told me that they made a voodoo doll of Sue and stuck pins in it.


I may have made some bad decisions about Macy’s. I did not yet understand how decisions about products and services like those offered by TSI were made in a large retail advertising department. This issue is discussed in more detail here.

TSI probably should have charged more for the original installation and used the money to hire another full-time programmer. Maybe we should have tried to borrow money from somewhere. I was unwilling to put all of our eggs in the Macy’s basket. Macy’s declaration of bankruptcy was a devastating blow to TSI. When Macy’s was acquired by Federated Department Stores14, it appeared to me that the decision to concentrate our efforts elsewhere had been a sound one.

As it turned out, however, Macy’s eventually gobbled up nearly all of the regional department stores in the entire country. The strategy that I chose helped TSI succeed for more than twenty years, but if I had gambled on Macy’s, we might still be in business in 2021. On the other hand, we would have been working almost exclusively for Macy’s for most of that time. Such an experience might have really driven me crazy.

The story of the Macy’s installation had a bizarre final chapter. It is recorded here.


1. According to his LinkedIn page (which is here), in 2021 Quique Rodriguez is retired and enjoying family time. I suppose that it is possible.

2. Alan Spett lives in Atlanta in 2021. His LinkedIn page can be found here.

3. So, I designed the database with five levels of participants. The lowest level was always called a department, but the names of the other four levels to be used on reports and screens could be specified by each AdDept client. At all Macy’s divisions they were called Administrative Groups, Group VP’s, Senior VP’s, and Group Senior VP’s.

4. This same room housed the AS/400, at least for a while. I sat at an empty desk when I was there. When the first phase of the installation was completed, some of the measurement clerks were reassigned to other tasks.

5. Unfortunately, I don’t think that I was careful enough to account for the large number of unproductive hours that I would spend on trains, in meetings at Macy’s, and in converting files. The round-trip train ride alone accounted for six or seven hours and a drive of nearly an hour, So, each full day at Macy’s was matched by another full work day getting there and back!

6. ROP stands for “run of press”. All display ads (as opposed to preprinted inserts) that are run in a newspaper are called ROP. It is not an acronym; all three letters are pronounced.

7. I am a “morning person”. Any work that I did after 7PM was likely to be counterproductive. Moreover, I needed a few caffeine-free hours so that I could fall asleep at 10PM and stay asleep.

8. I have kept in touch with Gary Beberman. He moved to California to work as a consultant and then was employed by Macys.com. Macy’s West and Neiman Marcus hired him as a consultant during their AdDept installations. He was the only consultant whom I ever respected. He has lived in Marin County for the last five years. He and his wife are hoping to retire to Italy.

9. Satish Rahi’s LinkedIn page is here.

10. SQL (structured query language) was invented in the seventies by two IBM researchers, but at the time of the debut of the AS/400 no IBM computers used it much. The reason, we were told, was that it was much less efficient than the ISAM methods that IBM endorsed. Later IBM computers, including the AS/400, were designed to maximize the efficiencies of SQL queries.

11. What I said to Satish was correct from my perspective, but perhaps I should have asked him what made Gupta Technologies think that the AS/400’s relational database conformed to these “industry standards” that he cited. After all, SQL had been invented by IBM, and IBM was not yet positioning its AS/400 as an alternative to the “standard” databases such as Oracle, Sybase, or Informix.

12. According to her LinkedIn page (here) Denise Jordaens still works as coordinator of media systems for Macy’s.

13. I think that this might be Lee Glickman’s LinkedIn page.

14. A more detailed discussion of TSI’s long and torturous relationships with Federated Department Stores can be found here.