Wednesday, 11 June 2008

How I got here, part 8 - Jobs No. 2 & 3

The previous instalment: Job No. 1.

I attended a number of interviews for Job No. 2, most were pretty mundane; one was so mundane I can't even remember what it was, or even where it was, I just remember having to sit around for ages. There were a few of noteworthy interviews:

The first was a company making some sort of financial product, about three steps removed from banks and investment firms. They had a great office in a nice tall building, you could see for miles. It all went wrong when it became apparent how much of a Microsoft-shop they were, but even worse was that they defined themselves by it: "so yeah, that's our product, using Excel as a client connecting to the NT server; we were looking at ways of expanding into this other space, but Microsoft haven't got a product for that yet." I was also given the tour of "developers corner", twelve people sitting elbow-to-elbow in a storage cupboard well away from daylight or the nice views. The agent who lined up the interview seemed quite shocked when I said I wasn't interested in pursuing it further, battery Excel hacker is not for me.

The second was a specialist software house making a collaborative web-based map application (it was quite Web 2.0, before such terms even existed). They weren't one of the famous names in this area, and this was long before Google Maps launched. I have never seen the app they demoed live anywhere, so I presume they ran out of money before actually launching. They were based in a huge warehouse, quite centrally located, near several stations; on the surface it appeared good. But there were two, equally big show-stopping bomb-shells:

Bomb-shell, No. 1: The architecture of the application. The database was Oracle (nothing wrong there); the front-end was HTML and JavaScript (fine); the web-server was Java (all good so far); but there was a middle-tier written in Visual Basic. I asked what the middle-tier did, the answer: "not a lot, we just couldn't figure out how to make Java talk to Oracle." The ensuing face-palm probably ruled me out of the running...

Bomb-shell, No. 2: ...but I was asked to hang around to see an HR person, it seemed a job offer was forthcoming after-all. And sure enough, negotiations began:

HR: So, for someone at your level of experience we would be offering something in the region of £X/year. [Where X was about £5,000 less than I was asking, but I was asking for slightly more than I could reasonably expect just to see what offers came my way.]

Me: I think that undervalues my skills slightly, but I also take into account potential for learning and growth. [Not ruling it out, not ruling it in, lets see where they're going...]

HR: Yeah, and hiring is an expensive business, so we would deduct a third of your pay for the first three months.

I stood up, picked up my coat, thanked them for taking the time to see me, and headed for the door.

The third noteworthy interview, really shouldn't have been noteworthy at all. The only significant thing was that I was desperately trying not to say a certain phrase, that phrase was "they've only got one product, and that's crap". You would think that phrase would be easy to avoid? "So why are you looking to leave your current position?", came the question. "Well, they've only got one product, and that's crap", came the response. I could feel it slip out, but I couldn't put it back in!

Job No. 2

Job No. 2 wasn't really a job, it was just a very long interview process. They paid me for the time I spent doing it, which was nice, but no contract ever materialised so as soon as Job No. 3 made an offer I was gone. The firm offer from Job No. 3 came quite soon, I probably spent about four days in total on the Job No. 2 farce.

The company described themselves as being all sorts of things, but ultimately, when you cut through the hype, they were a firm of printers. And that was what intrigued me in the first place, what do a firm of printers need a software development team for? The answer was quite ambitious, they had plans for online ordering, uploads, etc., interactive design, etc., all sorts. I liked what they were talking about, I had always wondered why more business in stable industries don't try those sorts of things, it would set them apart from the competition by a long way.

Unfortunately, I also discovered the answer quite quickly too! The reason businesses don't attempt those things: lack of talent. Quite often, lack of even the beginnings of a clue of what to do. The company had an existing designers-for-hire department, and the new development team was tacked onto that; but whilst the designers had brand new machines with 24" monitors, the developers had second-hand PC's with flickering 14" screens.

It didn't end there. They'd struggled on until I arrived with only one developer, that's all they thought they needed. That was, until they realised nothing worked and he didn't have a clue how to fix it; that's where I came in. Of course, I wanted to know what the long-term prospects were more than just the immediate crisis:

Manager: Well, Bob (the developer who couldn't build anything) will start work on Project Z.

Me: And what would I be lined up for next?

Manager: Fixing Project Z.

Me: I see, so why not let me build Project Z, we could skip that annoying "broken" stage until I start on it?

Manager: I don't understand.

Like I say, as soon as Job No. 3 made an offer I was out of there! As for that firm of printers, they're still going, but they still don't have an online service with the features they were planning; they have a "drop box" and a phone number. Web 0.1!

Job No. 3

If only all companies telegraphed their incompetence like Job No. 2 did, I would have successfully managed to avoid Job No. 3.

Job No. 3 would go down in the record books as being the worst place I have ever worked. No matter how insane some of the things that would come later were (and some were really, really insane), I would be able to say, in all honesty, "this isn't as bad as Job No. 3". Which is probably why I put up with some future nonsense longer than I should have.

Things started fairly well enough, they had a nice looking office in a nice part of town (always a bonus); they were a small software firm with a long history, there was something to get tucked into, I thought. Their main product was an age-old database, I would later hear all the war-stories about how it was used in the first Point-of-sale systems in the UK, which was still going strong despite those new-fangled relational databases due to the suite of specialised libraries it had accumulated. It sounded interesting. They were hiring because they wanted to modernise their offerings, the ancient database would stay, but they wanted to be able to offer Java-based solutions based on it. Or that's what they told me...

My first task wasn't too bad, it wasn't what they told me they would be doing, but it was still quite interesting. It would be the first, last, and indeed only time I would do any "commercial" development in C; I was tasked into building a demo of a library, and it was quite fun to do, but never came to anything.

The project that was described to me during the interview never actually happened. When I would ask about it, I was told that they never planned such things, and they definitely didn't say that they had. None of this was endearing me to the company, not by a long way.

Things would soon get worse, much worse. There was a crisis with one of their long-standing clients, and anyone who wasn't dealing with a similar-crisis was roped in to help; in practice that meant me. The two-week cushion where I believed everything would be all-right would be abruptly stopped! I now knew I was doomed. There was so much wrong I don't even know where to begin...

  • The development environment. This could have been worse, the development environment could also have been production, it wasn't; but that was the only thing they'd done right. It was shared between all developers, who were all doing critical changes. "Don't break things" was the mantra, which of course made pretty much all changes impossible.
  • The technology - this deserves a paragraph on it's own, see below.
  • The business model - it would take six-weeks to do an average change, for which the client would be billed approximately one-sixth of my monthly way. How were they making money? (Answer: they weren't, more on that later.)
  • Testing - "tes...ting? test...ting? what is this crazy word". And not for the normal reasons that people abdicate from testing. They didn't do any because they literally didn't know they could. "You mean, one of us pretends to be a user, and see how it works? Hmm, that's a good idea, but it doesn't seem very practical."
  • Version Control - they did have it, "for when it's finished." The idea of using it to control multiple mirrored environments to allow developers to make changes, without stopping other developers first, fell on deaf ears.
The type of work being taken on board was also embarrassingly small, which was why they couldn't charge that much for it; but the technology and methods meant that nothing happened quickly. One developer spent three months getting an image map to work... I still don't know how.

So then, their technology choices, these were bizarre by anyone's standards. Most companies appear to limp on with the wrong choice of tools, but in this case, it was terminal. In addition to their proprietary ancient database, which I'd accepted and being interested in, they also had proprietary ancient everything else; and weren't shy in using them.

Now, there are many good reasons for a company to build and use proprietary tools: licensing fees as a source of revenue, as a competitive advantage relative to the field, as a means of locking in customers. None of these applied to Job No. 3's tools. Quite the opposite: no-one was interested in buying them (clients only paid for "labour", no-one ever paid for the software); they were slow and bug-ridden; and three-quarters of prospective customers walked away saying "you actually use that, ho ho ho."

One of the tools was described as "a bit like Virtual Basic", but fortunately I was never exposed to it. The one I got lumbered with for the most part was their Web framework. In many ways it was ahead of it's time, in 1992, when it was written. The open-source framework it is most similar to would have to be Ruby on Rails; there was a tight view-database coupling, more so than rails, from there you would build the page iterating through objects returned automatically from the framework.

1993 would be the last time it had an upgrade (a whole eight years before I would have to use it), that would be the year the author left and no-one else knew enough to fix it. But it was still used, much against my advice. The final kick-in-the-teeth, was the scripting language... that was proprietary too, and that's not all:
  • There were two of them, very similar, almost impossible to distinguish, but with slightly different semantics. You would need to know both, and the arcane set of rules which determined which one was used at which time.
  • There was no manual. Or rather there was, but it was wrong.
  • It had a long known bug in the garbage-collector, but "no-one knows how it works".
  • There were no fewer than three ways of declaring a variable, four ways of declaring a function, but if you used an incompatible combination weird stuff would happen.
It was an absolutely impossible mess. I didn't get a single project finished the whole time I was there, I just lumbered on until it was cancelled; same as everyone else.

I had a terrible sinking feeling the whole time: how the hell was I going to get myself out of that mess? I still hadn't been that long since I graduated; the dot-com crash was well underway; all employers wanted "three years experience" for entry-level roles. There wasn't much point in trying to build a career at Job No. 3 either: it was a small company, no real opportunities for promotion, I was apparently one of the highest paid to begin with; and my CV was only going to get worse, there were no opportunities for adding buzzwords.

I was stuck! Trapped!

Until one day, quite significant rumours abounded that the company was short of cash. People spontaneously started reclassifying sick-days as holiday, presumably to suck-up to management and hope to survive the crisis.

I however, took a different approach. The job market looked tricky, very tricky, but I fancied my chances with the right approach; if I was seen to want to leave, it would look bad on me, why would I want to leave in such bad economic conditions? However, if I was pushed, I would just blend into the crowd of mass-redundancies which were the fashion at the time. But how to be pushed? Getting fired would be a bad idea, I needed a way of making sure I was at the top of the queue of "people to get rid of".

Happily, this coincided with the single worst assignment I have ever been given. A client had paid the equivalent of two-weeks of my time to create a DDA compliant version of their website, which mostly involved stripping out images. My estimate: "Ah, so a bit of sed and awk, get that done, a few days for the problem pages, a week of testing; two weeks is fine." Management plan: "no, that doesn't work, do it by hand, I want to see it done by hand."

Right, fine, good luck with that. One week later: no I'm not finished yet. One month later: I've nearly done the first page. Two months later: No, I've had to start again. Three months later: what do you mean 'you are letting me go'? (They still somehow expected me to finish the task before actually leaving... which, of course, I didn't.)

Justice, I was out of there! And not before time. The final few months wound me up more than anything before; I'd given up on the company, but still, I couldn't bear to watch it destroy itself. A fairly big client had even stumped up enough money to build a ground-up Java implementation, still using the old database; but instead they used it to embed a JVM in their proprietary language! So that made three ways of calling a function, the two "classic" ways and the new java:objectName_functionName syntax. Nice!

How did my plan of improving my employment chances by forcing my redundancy play out? Very well! Better than I expected. Every interview was the same:

Interviewer: So, you weren't there long, why did you leave?

Me: Oh, I didn't want to; unfortunately they were a small company and their clients had dried up, they needed to shrink to survive.

Interviewer: That must be annoying.

Me: I understand, some of the staff had been there years, and had built ten-year relationships with key clients; it was those of us who'd been there the least time who had to go. I would have made the same decision.

They bought it, every time!

In the next exiting instalment, I take the opposite approach and seek employment at very large monolithic corporations, starting with Job No. 4!

0 comments:

Post a Comment