The following was written by me in my Slashdot journal on September 02, 2001. I have not edited it since then except for formatting.
This is long and rambling and will likely have parts that make no sense. I just finished writing it at 5:33 am right now Sunday morning, so that is my excuse. What’s yours?
In September 2000 I was gearing up to return to Dartmouth College in New Hampshire to begin my senior year. To say I wasn’t looking forward to it would be an understatement. I had two courses left in my Computer Science major: Theory of Computation and the “culminating experience,” a course that I guess takes the place of a senior thesis. The most theoretical aspects of Computer Science have never interested me, and since I know that I will never have a use for the vast majority of them. To graduate I still needed to take 8 more classes and none of the offerings were terribly appealing. For the fall term I enrolled in Theory of computation, an econ class, and a government class (the standard courseload is 3 classes). I wasn’t terribly thrilled with any of my classes.
At the beginning of October, a friend of mine who was attending RPI told me that there was an opening at Aimster for a Mac developer. The first version of Aimster’s client had recently been released and was met with tons of press. My friend talked to his boss, John Deep, and John was interested in meeting with me. So one day I drove to Albany and met with John and the rest of the Aimster crew. Aimster seemed like a great idea to me. Share files just like Napster, but only with the people on your AIM buddy list. Combine two of the day’s hottest applications and be useful at the same time. Seemed like a brilliant idea to me. I spent the night in my friend’s basement and the next day met with John who offered me the job. He told me what was offering, which included salary, a new Powerbook, health insurance, and stock options. The salary was generous, but less than six figures. I had recently read that the average salary for computer science graduates was about $46,000, and the offer was enough that I decided to give it a go.
I’ll leave out the battle that ensued with my mother. Suffice it to say that she wasn’t thrilled with my decision to drop out of an Ivy League school for no apparent reason.
I asked John for some kind of a contract. After all, I was taking a huge step by quitting school and it seemed that my mother would never speak to me again. I needed some kind of assurance that he wasn’t just making this all up. He was reluctant to do this. He said “That’s not the way I operate, you’re going to have to trust me.” I explained that I needed something, I couldn’t risk my whole future on his word alone. He said I should write up a contract and forward it to his secretary. I did, including the points John and I had agreed on. She wrote back saying that he said that looked fine. He would sign it when I arrived in Albany.
I did all the paperwork at school and withdrew from the college. I can go back at pretty much any time by filling out a 1 page form explaining why I was gone and what I did. I spent several weeks living in my friend’s basement until I got an apartment that would take me, my girlfriend, and our two dogs.
I get to Aimster and wanted to get my Powerbook as soon as possible. I should mention that I did not own a Macintosh, having sold my powerbook 4 months before in favor of an Athlon system. John said we’d go to CompUSA and get one. The day we were supposed to go, he never showed up. He put it off for several days and then one day said “Why don’t you just use the G4 in the office for now?” At this point I suspected something was up. Pretty much everybody else at Aimster had gotten brand new Sony VAIO laptops. At least 8 of them at ~$2600 each.
At the time, there were two other Mac developers. One (call him Mr. A) had been an RPI student who had taken time off to work for Aimster, and the other (call him Mr. B) was… well, I never really knew anything about his background. Let’s just say he wanted to write Aimster in AppleScript.
My own background in programming was pretty limited. Pretty much all my C++ experience was from class. I had experience with CodeWarrior but not with developing GUI apps. I had 2 or 3 classes that used codewarrior for development, and the rest were using gcc on Linux. I knew data structures, algorithms, STL, all that stuff, but only really in a class setting. And as I said, I’d never developed a GUI app before.
When I started going to the Aimster office, the first topic we discussed was what programming environment to use. Mr B wanted to use RealBasic, which was pretty simple to use and was basically Visual Basic for Mac, and Mr A said that real basic was too weak and we should use CodeWarrior. I played around with Real Basic and it was incredibly easy to use. I had a whole gui laid out in less than a day. However, Real Basic’s limitations showed themselves pretty quickly, mostly with regard to networking and threading.
Things were not going well. Around Christmas 2000 the “Mac team” and John had a meeting where we told him we had decided not to use Real Basic. It was simply too weak for our purposes. And since the Windows client was written in C++, developing in Real Basic would have made portability extremely difficult. There are ways to incorporate C code into Real Basic apps, but it’s a real pain. Anyway, John freaked out at this and said that if we couldn’t do it in Real Basic then we had to cancel the Mac version. This was something he had hinted at a few times so it wasn’t entirely a surprise. Every time I had asked him about my supposed Powerbook, he’d said “well, we don’t know if there’s going to be a mac version or not, so let’s hold off,” which I didn’t find especially reassuring. Anyway, we managed to convince him that we could do it in Codewarrior, though I’m sure he still didn’t believe us. And I can’t really say that I blame him, since things were really not going well. However, the computer I was working on was a piece of garbage. It would give random linker errors, wouldn’t even compile Metrowerks’s own sample code (nor Apple’s), crashed randomly, and when code did compile, the debugger didn’t work at all, so I couldn’t step through anything, making debugging a complete crapshoot. At least on Linux/windows you can write output to cerr so you know what the hell is going on. I resorted to putting ::SysBeep(30); calls throughout the program. If it beeped once, I knew it got to point X in the app. If it beeped twice, I knew it got to point Y, etc. It was absolutely awful. I wanted to format the hard drive but they did not have the CD. I borrowed Mr A’s powerbook CD and did a clean install (which for non-Mac users replaces all of the System files and leaves mostly everything else intact) and reinstalled codewarrior. This helped quite a bit, as I could now use the debugger, but the computer still crashed randomly and frequently. One day it crashed 37 times in 6 hours. I counted. I tried formatting the computer with mr A’s powerbook CD but it didn’t work for one reason or another. So I was somewhat better off than I had started.
Then Aimster’s office moved. I took this opportunity to take the G4 home with me since I was getting very little work done at the office. This was a bad move as I got even less done at home. One problem I had with this project was that there is very little, very poor documentation for CodeWarrior. The documentation that comes with codewarrior is not helpful at all and little else exists. The only printed material I found on the topic was from circa 1992.
For about a month I was held up on the problem of creating tables. If you’ve ever used a Mac, I wanted to create tables like the Finder’s list view, in which the search results would be displayed. This seemed to be something nobody ever wanted to do. Macster, the Mac Napster client (which has since been purchased by Napster and been renamed “Napster for Mac”), had beautiful tables for search results, and I wanted something very similar to that. However, I didn’t know whom to ask or even what exactly to ask. I posted several questions to the codewarrior.mac.* newsgroups begging for help with tables. A very few kind souls lent me a hand and I began to understand how tables worked, but things were not going the way I had planned. The problem was abruptly solved when Mr. A (who I only spoke to every 2-3 weeks or so) informed me he had a table working. (It turned out that I should have been using CodeWarrior’s LOutlineTable class all along instead of trying to use their LTableView class… ARGH).
At some point I decided to move the operation back to the office. The new office was absolutely awful. The carpet was nasty, we had only old broken up folding tables to work on. Not a single non-broken chair. Even the reporter who profiled Aimster for the Washington Post (article here) agreed. Mr. A was still MIA and Mr. B was still in AppleScript land. At some point around March, Mr. B was officially no longer working on Mac Aimster and became the webmaster. So it was Mr A with his Powerbook and me with 50% of a G4 desktop. We were getting a lot of pressure from the bosses to show something, since it had been about 6 months. However, we were told by the Windows team that it had taken them longer than that and they were significantly better equipped than we were… they actually got some support from management whereas we got nothing whatsoever.
Anyway, once the table fiasco was behind us, development proceeded at a much more appropriate pace. We were hampered somewhat by the myriad changes in Aimster’s encryption schemes and all the new features constantly being added to the service, which added countless days to our development time. A moving target and all that, blah blah blah.
To make this long story shorter, we released Aimster for Mac 1.001 on June 26 2001, well behind schedule. We quickly released a new version the next day due to a pretty big bug. We were getting about 3,000 downloads of the Mac client per day, which we thought was great. The reviews were in and most people thought it was great, if a bit unstable. Well, “a bit” is a bit of an understatement. However, we had only our two development machines to test on and the program ran pretty well on them. When I mentioned to John that we needed more machines so that we could test, he basically said to forget about that idea. If people have an incompatible computer (such as, for example, an iMac) then too bad for them. How can we be expected to support every idiosyncracy of every computer system? This was his attitude. I saw no logic in it whatsoever.
Aimster moved its office again to Albany’s business district. We got a T3 into the office and it was really quite nice. No birds living in the vents like at the previous office, they actually had toilet paper in the bathrooms, whereas at the old office we had to bring our own, nobody was selling crack on the corner outside the office, etc.
When the summer came, several RPI students were hired to do various tasks. One guy did sysadmin stuff, one did development, one took over the webmaster position (Mr B had been laid off), one was working on the Spanish version of the program), and there were (I believe) a few others. I didn’t understand why these guys were here, but they were good guys and I didn’t have any problem with them personally, so I didn’t really give it much thought. I was just wondering how much money we were spending on these guys. Back in November-december there were a couple of times we didn’t get paid on time. We always got paid sometime the next week so I never thought much of it, but I later learned that those were times the company was out of money and we were awaiting more money from investors. So every 2 weeks I wondered whether or not I would get paid. And every 2 weeks I was relieved when I checked my bank account and saw that my check had been directly deposited.
Until August 10, 2001, a day that will live in infamy as far as I’m concerned. Friday August 10th was a pay day. I checked my account online and saw that the money hadn’t been deposited. I panicked. I called the office manager, who told me to talk to the project manager. He said that the payroll “wasn’t going to happen” and when I asked him why he said “he didn’t know” and when I asked him if it was going to happen next week, he said “I can only hope.”
At that point I fled Albany. I drove down to Queens to be with my girlfriend and to figure out what to do. Everybody told me that I would probably get paid next week, which I was hoping, but deep down I knew it was the end. I still had not paid August’s rent in Albany and had several other debts that I was planning to pay with Aug 10’s paycheck. I stayed in queens for about 2 weeks, as I saw no reason to return to Aimster if they were not going to pay me. I should note that the pay cycle was lagged by 2 weeks, so that when you get paid, you’re not getting paid for the 2 week period ending that day, you’re getting paid for the 2-week period that ended 2 weeks ago. So when I didn’t get paid on August 10, Aimster owed me 2 paychecks. This is not a trivial sum of money.
I begged and borrowed money from family and friends. When I returned to Albany, there was an eviction notice from my landlord since I had still not paid my rent. I borrowed $1100 from the friend who had first told me about the Aimster job back in October 2000 and used that to pay my rent and some other bills.
It is now September 2, 2001, and Aimster is officially out of money. With the remaining funds, everybody was given a pro-rated paycheck (which was really a loan against future payroll so they could avoid deducting taxes for now) and we got a speech about all of Aimster’s great prospects for the future. Big corporation X wants to license Aimster, company Y does too and will tell all its friends to do the same, blah blah blah ad nauseum. The management is continuing on as if nothing has changed. Except all of the programmers have returned to school. Nobody is working there anymore save some sysadmins and John himself. A couple of people were laid off, but basically everybody else is still considered an employee even though they’re not being paid. I am going to have to somehow get out of my Albany lease as I cannot afford this place on $0 income. I have applied for unemployment as that’s the only option I can think of. As far as I’m concerned, I was laid off. I can’t quit because then I can’t collect unemployment. I have been applying for jobs since August 10th but nobody really seems interested. Part of the reason I took this job was to gain programming experience. But one year of programming experience isn’t really that helpful.
The thing that really infuriates me the most about this whole ordeal was the fact that we were given no warning whatsoever. Nobody even had the common courtesy to tell us, “The payroll will be late this week.” Then when nobody got paid, nobody would even tell us what was going on. No word from management, not even an apology. We had to infer that there was no more money (which was later confirmed by the execs). Not only that, but 2 days before we were supposed to get paid, 60 computers were delivered to the Aimster office. 60 1ghz, 1GB ram AMD Athlons. So that’s where our payroll went? Isn’t that illegal? I’m sure I read somewhere that payroll must be priority #1.
So now I can only imagine what’s going on in the Aimster office. There are no programmers, so maybe John Deep just sits there staring at his computer looking at all the people online and wondering what went wrong. His blunders alone are enough to fill a textbook for a business managent course. But that’s another story.
So in conclusion, I have to say that my experience with Aimster has been one of the worst episodes of my entire life. I will leave Albany with nearly $10,000 more debt than when I arrived, not including the student loans which have come due. I wish I had just stayed in school. It is too late for me to even go for the 2001-2002 year, so I guess a year from now I’ll go back, since it seems nobody wants to hire me. I have so little faith in humanity at this point that I am considering teaching, just so I can have the opportunity to help some kid avoid making mistakes like this one.
Finally, I would like John Deep to know that I deeply hate him and wish I had never met him.