[No names, and I’m deliberately fuzzy about dates. Not even names of technologies. There were some really good and quite nice people at this company — if you’re reading this, you know who you are 🙂 ]
… so after that start-up I took nine or ten months off to decompress. My needs were modest: I had a small mortgage, plenty of savings (certainly enough for several years of just going to coffee shops and bookstores), and I didn’t really want to do anything serious for a while. I motorcycled some, visited relatives, and finished a lot of books. Mucked around with a bit of code, but nothing epic.
Boredom set in, and with it, bad judgment.
I made the mistake of going to a “Brass Ring” high-tech job fair, more out of morbid curiosity about what jobs were available than actually wanting to find work. The job fair was a “fair” in the same sense that “camps” are sometimes used to hold prisoners of war; it was not a happy, joyful place. Silly Valley was six months or so into of one of its periodic downturns, and the lines of hopefuls were ten or twenty deep in front most of the booths. The anxiety was practically visible as people jostled each other, presented sweat-stained resumes and tried look confident and competent instead of abject and desperate. You could smell the fear, and I’m not kidding. I was detached, relaxed and had brought along just five copies of my resume, with the intent to be choosy and not give out any more than those copies.
Lockheed was there, or maybe it was Martian Douglas or Huge Aircrash, in any event some massive, soulless defense firm was looking for US Citizens Only eager to help blow things up with software and lots of government surplus money. There were some telecom companies, now long gone, and Cisco was looking for hardware engineers and sales types with flexible ethics. There were also a dozen companies I’d never heard of (and you haven’t either) with standard-issue Silly Valley names consisting of the letters X, Y and Z stirred in with some vowels and a light serving of other consonants: XyGroove, Zilyow, ZoodBarf, YankDix and Zxwzzyz. I’ve always wondered how someone answered the phone at Yrzyqk, and how many callers thought they had misdialed the Yrkzogistan Consulate.
One booth screamed “Low budget start-up!” — no frills, just the standard tables that the fair provided, and some wickedly uncomfortable Costco-issue chairs [I know those God damned chairs; they’re cheap and they last exactly two VC rounds and if you don’t sit down in them carefully you can tear off important bits of your anatomy]. The company had a cheap plastic banner with a generic company logo.
This job fair was being held in the Time of the Swooshies, and all corporate logos were required to have arcs representing excited arms, people leaping around in joy, and maybe stars and comets falling to earth (thus forshadowing the dot-com industry’s later crash). The logo belonging to this company was a Medium Swooshie — not a complete disaster, just uninspired, like the company’s name (which had only one ‘Y’ and no other selections from the right-hand half of the alphabet).
I took a closer look. The poster summarizing their open positions looked like a match of the stuff I liked to do. I waited politely for someone to talk to, handed over my resume and introduced myself.
The fellow looked at my resume. “Twenty years of C experience?”
“Um, yeah. I did –”
“Twenty. You were at Apple? Um, when can you interview?”
Just like that. I did a whirlwind interview early the next week, and a day later I had a pretty good offer. Now there was just one weekend left of my long vacation and too many books to finish in that time. Dammit, I was working again. How’d that happen?
I had a hint then that their process for finding engineers was fairly weak. I’d forgotten that interviews need to go both directions, especially with start-ups.
The day I arrived, the developer I was most looking forward to working with gave two weeks’ notice. A couple days later I was starting to copy his attitude and catch-phrases.
The build system was primitive, basically some batch files that didn’t even check for errors. You had to manually scan the output of the file to catch broken builds by looking for words like “Error” and “Failed.”
No source control, naturally. Who would need that? Just put the files on the server in the right spot, and Alf will run the build script . . .
Part of the build required a bunch of files to be copied by hand from point A to point B (on the machine that had been dedicated to run the company’s mail system, be the print server, oh, and by the way, do builds), and carefully renamed so that the installer builder (another batch file with minimal attention to detail) wouldn’t choke. “Alf,” a Q/A engineer who had been roped into doing builds, proudly showed me his skills. It took most of an afternoon, and reminded me of nothing less than someone shoveling coal around with a mouse instead of a shovel.
For lack of anything better, and since it was a Microsoft shop, I stuck a loose collection of the company’s latest stuff into a SourceSafe database. A few more days of mucking about and we had a build system that was capable of figuring out that the build was broken if someone checked in a breaking change (someone promptly broke it and it stayed that way for a couple of weeks). Well, it was progress. A few days later I had the installer being automatically built, with daily build notifications and change list emails being sent out, and the IT guy was finally doing backups of the engineering server. All the stuff you need to get nice, repeatable builds and make sure that a croaked disk drive doesn’t take down your whole start-up.
During a meeting I gave a short presentation to the engineering and Q/A staff about the new automated build system. I finished, and asked if anyone had questions.
Alf looked confused and afraid. “I don’t get it,” he said, “Where’s the part where I copy the files and rename them and build the installer and rename those files?” It was then that I realized that I’d taken half of Alf’s responsibilities away, and that he was going to have to find something else to do.
Someone had read the Software Patterns book, because about every third source file implemented a factory; I’m pretty sure there were factories for making factories. Now there are perfectly good reasons to write factories, fine and wonderful reasons to have abstract instantiation, but what was going on in the bulk of this company’s code was fear, realized with indirection and thousands of lines of creative procrastination, and an attempt to be “grown up” with stuff copied from a popular book on design without doing any actual design. There was no reason to have all the factories and singletons and flyweights and visitors other than someone thought they were cool. To make a simple change to the product often involved modifying a dozen source files, carefully coordinating checkins with other developers who had pent-up breaking changes of their own.
Much of the code didn’t do anything, and it did it in some of the most indirect and complicated ways possible. Tracking down how a line of code got run could take hours; it wasn’t as simple as just setting a breakpoint on something and letting a test case rip because entire flotillas of processes were launched in the course of a run. This was organically grown software with all the architecture of a bowl of soup, with mystery floaty bits on top as a bonus.
A couple months into my stint, the company brought in a psychologist to interview all of the technical staff. We were given a few days’ warning. And, as promised, a shrink showed up and started having hour-long sessions with everyone on staff.
I wish I had a good story on top of this, but I don’t. I have a little experience talking to shrinks, and it’s not like you’re taking a polygraph or anything. You give ’em something to chew on (“Doc? My editor reminds me of my mother…”) and shut the hell up about what you really think about things.
What this really meant was that this company knew it was screwed up and that things weren’t functioning, but the people in charge didn’t have the honesty and guts to find out what was wrong themselves, or to make any hard decisions. In the end nothing happened (well, the psychologist got paid) and things ran on as before (well, the worker bees were a little more cynical now).
Well, I rarely saw my boss; his door was nearly always closed. He was in there doing something with the company’s “architect” (who was a buzzword luminary in the particular technology this company was heavily invested in). Every couple of weeks I’d see one of them and ask a question; I never got a good response. I saw the architect every month or so; he never sent email, and I never saw a design from him that was less than a year old or that read as anything more than a set of vaporous bullet points you might find on a marketing hand-out at a trade show.
I was starting to look for another job, but at the same time we were also interviewing candidates. I thought it would be tough to give a technical interview for someone to work on a product that I didn’t really believe in, but I was wrong; you can detach yourself and do a technical assessment. The moral quandary being, is this a good place to work?, and nobody asked that question.
Two of the big investors had heard rumors and were concerned about the company, and they decided to start digging to see how their money was being spent. So a number of us got dragged into the offices of one of the VCs and we were asked to spill our guts. I’d already decided to bail, so it wasn’t hard.
The culmination of this was a Sunday morning meeting at a local bank where some independent technical experts grilled the daylights out of the engineers. The company’s president gave a ten minute song and dance at the beginning of the meeting; he was brushed aside quickly and the two heavies started drilling down. It didn’t take long.
“Where’s the beef?” asked one, looking incredulous. In twenty minutes they’d drilled down into the company’s technology and come up with a pile of ashes in their hands and the smell of burning money.
I shrugged. A couple of my worker-bee cow-orkers shrugged. There was no beef anywhere, not really. The product did more or less what it was supposed to do, but fundamentally it didn’t do anything very interesting. It was a little bit like a start-up for doing toothpaste; there’s nothing wrong with toothpaste, even a new kind of toothpaste, but technological advances in toothpaste are incremental at best, and it’s crazy to sink VC money into something that is mostly perception and marketing.
I learned some valuable lessons from this:
Interviews work both ways. Ask hard questions. Is this a good place to work, do you use your own product, what is the turnover like, are you excited to come to work every day, how much of the technology actually works well and is innovative, are you planning to quit any time soon?
Don’t be afraid to throw away crap. In its short history this company had accumulated tens of thousands of lines of bad, boat-anchor-class code, and this self-inflicted pain made it very hard for them to do anything new. The delete key is your friend. Sometimes the best thing that can happen to a company is catastrophic loss of its source code repository . . . and I’m not even close to kidding about this.
Hire carefully. This company had very poor hiring practices. I mean, they probably shouldn’t have hired me. What they needed was a strong development team; what they got was a loose collection of developers of various strengths and random skills. Combine this with poor product vision and weak management and you have a recipe for a money-burning party.
I quit after six months. I found my next job (which was a lot better) when I ran into an ex-cow-orker at a technical bookstore; we chatted, I mentioned that I was looking, and pretty soon I had a slightly longer commute.
That’s the way to do it. Job fairs suck.