…and when Losing is actually Winning
Posted by Euroranger on June 10, 2013
So, as many of you know, I’m a software developer. Who else would sit at their desk 12-13 hours per day without restraints or really good meds? I pen posts here in increments when I simply need to find something to distract myself from my daily professional activities. Typically those distractions are things like wanting to simply give my brain a break from trying to untangle unnecessarily complicated code, learn something more about how to understand the black magic some DBA used when encapsulating business logic in a database…things like that. I’m relatively good at what I do so I understand most things I see and can figure out most of the rest that I don’t. I’ve been doing what I do for somewhere short of 15 years now so there isn’t much code or data wise that I can’t handle. To that end, I make a fairly comfortable living primarily as a contractor while enjoying the revenues I get from personal projects that continue to make my customers happy. I do well enough, in fact, that I have time during the week to take on additional work. Now, a great many of you might think that working from home would be ideal and who couldn’t be delighted to do such work? No commuting, no dress code, flexible hours and the like is cool, right? Well, it is but there are distinct pitfalls that many wouldn’t realize. One of them is that you typically don’t ever get to meet the people you’re working for. That sounds minor but more and more, I’m coming to discover that it’s actually a major piece of a potential employee or contractor who is trying to size up a work opportunity for suitability. By virtue of the fact that you’re seeing this comprise the topic for a post, I’ve had recent experiences that I feel I need to
vent about share with those thinking of doing this kind of thing.
Several years ago I briefly worked as a remote developer for a firm in Jacksonville, FL (keep in mind, I’m located outside the Atlanta, GA area) who had a grass roots political organizing application. Not to get into the specifics of the app because it was way too ambitious given the owner’s timeline, funding and overall technical acumen but I did code some pretty cool modules for this application that even today (roughly 4 years later) I’m still pretty proud of (think a Google maps mashup that would create a walking route overlaid on a map for volunteers to go door-to-door for “get out the vote” drives with pinpointed addresses for political supporters with a map popup with details for each address…yeah, it was damn cool). Anyway, long story short, the owner turned out to be a budding little criminal and it wasn’t until after he decided that paying me was “optional” that I discovered that he’d done the same to the two previous remote developers who’d done work for him as well as later hearing the same about two subsequent employees. He did it enough that he rated an article in the Florida Times-Union for his activities. He’s now a cable installation tech in Anchorage, AK. My guess is that Anchorage is probably as far as he could run away from his legal troubles back in Florida that didn’t require the use of a passport. Lesson from that: if the employer is short, seems slimy and tries to impress upon you who his friends are to show big a wheel he is…be careful. Narcissistic a-holes don’t much care about anyone but themselves. I did contract work for another 3+ years after that without incident. Long jobs, short jobs, one off jobs. They all worked out and I did good work for them and they paid me what I was owed…which is really all I’m after. But then I took a contract with a firm in Philadelphia earlier this year that made me recall why contracting can be such a racket.
Now, this firm, to be honest, appeared to be on the up and up. It was a small, start-up like company who were providing assessment tools to the post-secondary education market (read: “colleges and universities”). This time I actually flew up to Philadelphia to make the acquaintance of the owner and other folks I’d be working with. They all, on the surface, seemed to be a nice group of people. But a couple of things were apparent initially and became more ominous as time went by. One of those things was the number of previous developers’ notes I was seeing in the codebase I was assigned to work on. Now, keep in mind, the entire team was comprised of just 4 people (owner, project manager, database/network guy, lead CF dev) plus me but as I progressed through the code I saw notes in there from no less than 5 other devs who had worked on this code…within the previous 6 months…none of whom were still with the company. Yes, that did ring alarm bells but not loud enough that I had reason to evacuate. The other thing that happened was the announcement shortly after I started that the project manager would be leaving the company. Now, this in and of itself wasn’t anything to be concerned about but she was, seriously, the only employee that knew anything about what was going on. It became clear to me very early on that if she got hit by a bus or was somehow otherwise removed from the picture, that this company would struggle mightily. Her reason for leaving though was even more suspect. She was moving from Philadelphia to Pittsburgh for her husband’s job. However, as I was doing MY job remotely and others (especially the owner) did much the same…why did she choose to not do her job from Pittsburgh remotely? She easily could have but decided not to…and explicitly told me she didn’t have a job lined up in her new locale. I don’t know about you but my family would find it difficult to get by on one income if we’d been relying on two…but this girl admitted it would be tough going and yet STILL didn’t seek to do her job remotely. Third thing was the sudden “disappearance” of a remote developer they had who was in California. One day up and quits responding to emails, Skype messages, everything…and nobody seemed at all concerned or surprised by it. When most people go suddenly missing from their jobs, more often than not, it’s the employer who ends up calling someone to ask why such and such hadn’t been in to work recently. Not so these folks. The owner made a point of bringing it up during a telephone conference that he “was probably in jail” and had had other such occurrences before…except that this was news to both the lead dev and the database/network guy when I mentioned it later. Anyway, long story shorter again, these folks called me one day to tell me to stop working despite the fact we had a contract that specified minimum guaranteed hours but when I asked if I should expect more work or if this was their way of ending the contract they said they’d have more work…it was only temporary. Temporary, in this case, actually meant permanent and also apparently meant they’d decide to not pay me for the previous week of labor I’d provided. They also decided to do this to their lead, in-house developer, as well and they stiffed him to the tune of around $15K. The lesson I took from that: don’t wait until the warning signs are so piled up they’re like knocking over furniture before you make a move to protect yourself.
So, while those two were bad enough on their own, they had something in common: those assholes pretty much robbed me for their own gain. However, something happened just this morning that makes me nostalgic for straight up crooks like that. Recently, I entertained an opportunity to take on a FT developer role that I saw via LinkedIn on May 14 (that’d be just 3 weeks and some as of today). I read the listing, knew I had the time and certainly the qualifications for the remote, telecommute position…so I applied and in short order I was interviewed and pretty much immediately offered the job. Great right? Well, on the surface you’d think so. I mean, it’s a non-profit located in Maryland who caters to the education industry (something I already had a few years experience with). The salary was low for my experience level but then again, I didn’t really take the job for the pay. I took it for extra money and to stay gainfully occupied. While they described their technical situation in terms that suggested they knew their application needed the kind of help I could lend it, it wasn’t until I actually got a look at their code and database that I realized the extent to which their product suffered. For you non-devs out there (most of you, I think) the following paragraph of my admittedly subjective opinions will seem like Greek but believe me, this gets into nightmare territory dev-wise.
To begin, the application(s) they describe are actually one big application, not separated code-wise at all. Crossover identity issues abound. They move data around in the application via URL or form variables, both of which are ridiculously easy to hack and, for which, their code had nearly no validation or even any rudimentary protection whatsoever. Further, while it was running on a relatively recent version of the server software I specialize in (ColdFusion) it was coded as though it had been written perhaps 10 years ago. No concern with code organization, multiple redundant pages, absolutely zero use of any Object Oriented Programming, little code re-use, nothing to indicate that anyone who had looked at it had done so in the past decade or did so with any expertise whatsoever. Potential SQL injection opportunities on practically every form page, easy to invoke looping race conditions, cross site scripting attacks…you name it and this application was ripe for it. On top of that, as a new dev, I had no documentation, the code contained no commentary whatsoever, business logic was entirely contained in the CF code (as opposed to the more secure and more efficient database), data was stored with little regard to efficient retrieval and lookup tables? Nah, who needs those when you can store all your data as single flat files? And the cherry on top? It’s all on one box. Not just the database and codebase but the development environment as well as their production environment…all one box. No versioning control software to be found either which means that if (when) their site is ever hacked, they have a snowball’s chance in hell of recovering the code and/or data and bringing up a restored box (and why mention the failover backup box when it doesn’t exist?). In short, from a developer’s perspective, calling it a “challenge” was probably the nicest thing you could say about it. But, as I gained access to their technical resources I resolved that I’d move methodically through this steaming turd of a Fisher Price application and, by God, make it better…and I was.
That is, until this past Friday. Having cleared roughly 3/4 of the outstanding tech tickets in just 8 days and having only the ones that required greater business knowledge than I possessed remaining, I got an email Friday afternoon informing me that they were disappointed with the volume of my work product and had scheduled a performance evaluation for this morning. Naturally, I was fired during that call today. Keep in mind, this was but day 9 of my employment and only 7 days after I got access to their code and database. I’d been given no goals, no expectations, nothing but tickets to work on and for which I had cleared all but the 4 I lacked the requisite business knowledge to address. In short, I was fucking lied to this morning. Nobody hires an employee, says nothing about their work performance in the interim and then fires them less than 2 weeks later. I’m not all that broken up about not working further for such a schizophrenic and obviously dysfunctional imbecile like the woman I was reporting to but for crying out loud, at least be a prepared asshole when I question exactly what goals did I fail to meet. The conversational equivalent of a shrug isn’t what qualifies a fat chick to be a CIO these days is it? Somebody enlighten me some here. I thought competence still had a spot in the American workplace.
Anyway, all of the above is merely my opinions on the companies involved (namely Patriot Information Systems which is unsurprisingly now defunct, AEFIS, Inc which will likely become defunct in the near future and Quality Matters which while the company name criminally abuses the definition of the word “irony” will likely stagger along like a drunk toddler for some more time) and shouldn’t be considered anything other than my right as a person relating anecdotal recollections of events I was involved in. If any other devs wish to work for AEFIS or Quality Matters, I’ll be pleased to stand aside and watch you rush to your predictable reward. After all, you shouldn’t believe everything you read on the internet…but some of it should cause prudent people pause.
My name is Euroranger and I approved this message.