So, labouring under the foolish notion that someone will have the patience to sit through me griping for thirty pages, here goes nothing.
Before The Job, I was basically a freelance contractor; I'd line up work, do the job, get a fat paycheck, say goodbye to the client, and with luck never talk to them again. If I did talk to them again, I could count on getting paid again, thanks to some nice maintenance clauses in my contracts. It worked pretty good. I could work from home, do my own thing, live some life in between all the code and such.
Now, that works fine when you're a self-taught high-school dropout. Problem is, being a self-taught high-school dropout doesn't impress many people. (It's fun to say, though.) Legally, I have no education. Sure, I went to a wide array of schools, but most of them were international and only marginally legal, let alone accredited and widely recognized as valid institutions of learning. That's the price to pay for growing up in another country, I suppose. Anyways, the bottom line is that I've got no diploma, no G.E.D., nothing - just a handful of credits from a community college and a fat portfolio of Real Projects.
When you're a contractor, you can get away with that. Real Projects impress Real People, and when Real People see that you've had Real Success on something that looks an awful lot like what they want you to do, they (usually) will trust that you can do it. So being "unedumacationaged" isn't a terrible handicap. It does tend to limit one's ability to work for Fortune 500 clients, but I don't like working with the suit types anyways. I spent awhile convinced that I could make a successful career of this, continue taking some classes, and eventually everything would work out great.
Somehow, and I honestly don't remember entirely how, I decided that wasn't going to cut it. I wanted some Real Jobs to pad my resume, something with heft and weight. Maybe it was the allure of the suits and their dollars, I'm not sure. Whatever it was, I abandoned my last scraps of rationality and took a decent job offer at The Client. The Client was someone I'd worked with before, on two separate projects, and one maintenance update of one project. I have some loose family ties (of the in-law nature) to some of the Big Names there at The Client, who'd given me the contract to begin with (us experience-free high-school dropouts are more than happy to take that kind of contract). We'd both been fairly happy with things, so I got an offer of a permanent position. I should have known that the in-law ties were a bad sign, but I was young, foolish, and needed the money. (That sounds like a really lame textbook excuse for getting roped into a life of prostitution... hmmm...)
Anyways, I should have known there was going to be trouble. I'd always had a sort of rough relationship with my related contact at The Client. The company itself was a startup and still fairly small. Money was tight. The office space was a small, cramped suite, shared with another software startup. The salary was going to be well under market rate. But hey, what the heck, right? I was going to have some stability, some certainty, some concrete under my feet to take away that awful feeling of never knowing when your next contract might come.
So I took the job.
The Excrement Intersects the Fan
In August of 2004, I moved to the Atlanta, Georgia area to start the job. The apartment I have is about an 8 minute drive on average from The Office, which is probably a good thing, because in the coming 16 months I definitely would have killed someone if I had been forced to deal with a long commute on top of everything else.
Things started out fine. Better than fine. I had stability, a steady paycheck, and to make it all even better, I was living my dream. In the evenings, I'd go home and moonlight at Egosoft, working on a space game. Things looked pretty much darned perfect.
Something vaguely rankled, though. I can remember as early as spring of 2005 thinking that I was ready to get out. I was doing shrinkwrap software, and a little bit of internal systems work, so there was always a new challenge or area of interest to keep things fresh - so it wasn't like I was bored... right? Despite the apparent continual interest, I quickly found myself totally unmotivated. The problems I had to solve were either boring or trivial. I didn't care about the product I was working on. I didn't care about the company, aside from the fact that letting the company tank meant I had no paycheck. Inevitably, I quit working because I liked programming, and started working merely because I felt like I had to.
It seems pretty obvious, looking back on it, what all was going on. At the time, though, I had no idea. I figured it was just a weird adjustment, that maybe I wasn't used to having a rigorous, tight schedule, and that I'd get acclimated and build up endurance over time. Maybe the Egosoft night job was a bit much, too. I started to cut back on it a bit to try and control my stress load.
Counting Up to the Last Straw
Over the summer, I started working on other projects: an embedded network appliance (nothing interesting - dead boring, in fact, aside from a little bit of fun pattern recognition logic built into a hacked Linux kernel), and a Mac platform port of our main shrinkwrap software. On both projects, I was cutting new ground; nobody else in the tiny company had any experience on the platforms, or coding, so it was all up to me. Neither product was remotely stimulating, so again I returned to work every morning just because I felt obligated.
One morning, I layed on the couch (where I'd taken to sleeping), and simply wondered what would happen if I didn't go in to work. So I called in sick. I spent a fitful day laying around, trying to figure out why I felt so horrible. I was eating at least vaguely healthy food, getting a token amount of exercise, and sleeping plenty. Had to be work.
Over time, release on X3 drew close, so I started putting in extra hours on the project at night again. Things started to get really feverish, up until Crunch Time in the fall of 2005. I found myself working 80 hour weeks as a matter of course, stumbling in to work and zombie-coding my way through each milestone, then coming home and doing game work. I found that I really liked the night work, even though I was tired, frustrated, and overtaxed. Something about it was just right.
That made me even more confused. How could all that be right? At work, I was making deadlines, plowing through milestones, getting a lot done. None of it was giving me trouble - everything was fairly easy to finish. Mostly stuff was just time-consuming. At Egosoft, by contrast, it was chaos. The deadline slipped a couple of times, and we fought for every last waking man-hour we could wring from the development and testing teams. The Great Feature Axe amputated a painful amount of content and code from the game. We all pushed one final sprint. My weeks stretched to 100, 105, 110 hours. I ran marathon weekends of coding for two days straight. Testing, debugging, everything was a jumbled nightmare. Without the coordination and direction of being physically with the rest of my team, I spent a lot of time fighting uphill against the rapid-fire changes that come with the final few weeks of coding on a tight-deadline game project.
By all indications, Egosoft was a bad work environment - we were behind schedule, cutting features like mad, cutting corners, wincing as we lined up content for patches that would have to be released post-gold. Finally, the final, unmovable deadlines came, and we hit code freeze. One last dose of testing, and then we shipped X3.
In the next few weeks, I did a lot of deep thinking. From a "professional" management standpoint, the Egosoft project had been risky business. Some of the more conservative managers out there would probably have called it a disaster. Certainly if we'd been looking at annual performance reviews any time after the close of the X3 project, we could have fully expected to get fired from any large company. And yet, despite all of this, the project was a phenomenal success of management and leadership. Our team lead was brilliant, and pulled us all into a solid win. Despite our fears, and some rough edges, X3 has been a successful and impactful game in its genre. As a suit-led business, we were a wreck; as a game development company, we were golden. Frankly, most small, niche-game teams can only dream of the kind of success we've been fortunate enough to enjoy at Egosoft.
Where's the Beef?
This was more than a little confusing. The Day Job was going good, on paper, but I hated it. Egosoft had been a heck of a roller-coaster, and I loved it. Was it just a youthful, naive, adrenaline-junkie urge to work on the edge of danger in a talented and wildly driven team? Was it just that I deeply enjoyed the challenge of the Egosoft job, and found it more fulfilling? Or was there more than that?
As it turns out, there was a lot more than just that. Those things are all true, I think, and all made up important parts of my decision to leave the Day Job. But more than anything else, I left because 9-to-5 jobs suck.
Why 9-to-5 Jobs Suck: Or, How to Make Your Software Company a Personal Hell for Your Programmers
I started looking around for articles and writings on software companies, and programmers. Specifically, I looked around for stuff on why it was I hated my job so much. My good friend and flatmate visited at work one day and was totally perplexed as to why I left drained, annoyed, irritable, and exhausted every day. It was time for some Answers. Sure, Egosoft was a more attractive job, but what exactly made the Day Job so darn crappy?
- You're a Cog in the Machine
Pink Floyd said it best: you're just another brick in the wall. More than anything else, this was the fact that bugged the ever-loving heck out of me. I was there to make money for The Man, and The Man had absolutely no reservations about reminding me of that fact at every available opportunity. I think that this attitude is, at the core, the big cause behind most of the other reasons why the job sucked.
- You Are Not Worthy of Being Offended
Part of this was the personality of the management, but I think it was also a "rank" issue. As a menial slave, I had no entitlement to my own feelings. If The Boss made a terrifically offensive joke at my expense, I was obligated to laugh and not respond. If I sniped back in kind, I was out of line. The severity of this kind of interplay varied quite a bit, and by no means was it a common thing, but there was, on a daily basis, some kind of indicator that I was a gear in the box. I didn't have the right to be pissed off that I was being treated like a galley slave. God forbid I say anything about it.
- Do What I Mean
My bosses (both of them, at the small company) shared a common and extremely annoying management style: Do What I Mean. Virtually every time I got a task, I'd be given a short blurb-like sentence or four on what I was supposed to do, and then be told to go do it. At first, I interpreted this as autonomy, or empowerment, or whatever stupid work managers like to use. Turns out I was wrong.
I'd finish a task, carefully consider any questions I had, answer them to the best of my knowledge, and hand in the results. If I had any really big questions I'd ask before I committed to a course of action, presenting the alternatives, and suggesting what I felt was the best choice based on my analysis of the technical situation. In response, I'd often get told just to "finish it and we'll see how it looks," or something similar and equally annoying. Inevitably, I'd finish a task, and there would be a long line of reasons why it was "wrong." Usually, "fixing" most of those things meant heavy reworking of what I'd done.
I tried asking for detailed specifications so I could avoid having to tear apart and redo my own work three times until the brass was happy with it. This was met with flat refusal; the brass didn't have time to do specs. It was my job to make it wrong once, then change it until they liked it. Tweaking and three-pixel-changes were one thing; but more often than not some pretty major aspects of a system would be affected by all of the changes. It'd driven me nuts while on contract, and it was no better as a day job.
Maybe it would have been bearable if every time I had to make a change it was getting the thing closer to some final goal - but it wasn't. Usually, every iteration of changes would be because some fundamental aspect of the system was being reconsidered. Management would make a five second decision, off the cuff, without thinking about any consequences. I couldn't argue, because that wasn't my place. All I could do was go back and throw away hours (or even days) worth of work, based on careful analysis of the situation and lots of deep thought. My professional and informed planning would, in many cases, be thrown away in favor of a snap decision from someone who'd barely even considered the problem.
Eventually, I quit seeking approval. I started doing things because I knew they were the right thing to do: a heavy code-base refactoring that, on paper, cost me a week and a half, but in reality saved the project literal months; a port of some internal logic from a badly written ASP monster to a well-factored PHP system; a rearrangement and rewording of some critical and very confusing interface elements; some subtle organization changes in the UI. In every case, I'd just do the Right Thing, then politely and firmly inform the brass that I'd done the Right Thing, and they were going to live with it. Shockingly, they inevitably ended up liking the Right Thing - but there's no way I would have been allowed to do it if I asked first. Fighting against authority like that, even when I know I'm doing what needs to be done, doesn't exactly give me warm fuzzy feelings.
- You're Not Typing! Quit Slacking Off!
Apparently, programmers are not productive if they are not typing constantly between 9 AM and 5 PM. I had a few "negative" comments on performance reviews and in private meetings about "all of the web surfing you do." I was, a few times, publicly mocked for "falling asleep instead of working."
In reality, I'd do a lot of surfing, sure. Usually, it was to MSDN or similar reference sites to brush up on some API or to double-check an assumption about something. Even my "recreational surfing" was simply to clear my mind, to reset the stack, to get the juices flowing. In my working style, I sprint - lots of thinking/code, some testing to make sure it works, then relax and reset until ready to take on the next chunk. It works great for me, and as I started to find out from my reading of articles and blogs, a lot of "thought workers" use similar patterns.
As far as management was concerned, though, I was lazy. It made no difference that I was getting things done ahead of schedule on average; the brass thought they could get even more out of me if I'd just quit all that darn goldbricking all day. I actually started feeling guilty about my work pattern at one point, which thankfully I later realized is just plain stupid. As usual, attempts to talk through this fell on deaf ears. "Yeah, sure, we understand that's how you work. Just stop doing it."
- Here, Do This Other Job, Too
The shrinkwrap product we worked on required a fair bit of customer support. Due to the small nature of the company, we had only one support worker. This meant that, in addition to being solely responsible for all of the code work done at the company, I'd regularly get pressed into service as technical support, too.
Honestly, I'm thankful for it on the whole, but my parents did something to me that I absolutely resented during that job: they instilled in me a powerful desire to do a job right. So, when I got stuck with phone duty, I couldn't let myself suck at it. Being the programmer of the software, I was uniquely positioned to know a lot more about how to diagnose weird problems than the front-line staff guy was, despite his superb handling of the product in general. And, being a cog in the machine, it wasn't beneath me to talk to mere customers. Of course, that kind of customer interaction was far below the station of Management, who never dreamed of answering the phones or handling emails - they had more important stuff to do!
That wouldn't have bugged me too much if things had been slightly different. At Egosoft, we're also a small team. There, when one part of the team is unavailable, needs vacation, maternity leave, lunch break, whatever, we can step in to pick up the slack. I understand that small teams need that kind of support and flexibility. The thing is, at Egosoft we do it because we care about each other, and like getting the work done right. At the Day Job, I did it because it was pick up the slack or get fired. That makes a huge difference.
The worst part was that, in addition to being expected to do other people's jobs on a regular basis, I was still expected to do superhuman things on my main job. Schedules became increasingly short and utterly ridiculous. In the last project I worked on, the schedule was literally invented in less than five minutes my management; I wasn't even asked if it was reasonable. When I started to object, I was told that "yeah, we know it's an aggressive timeline, but we'll just have to buckle down and get it done." Apparently, management was incapable of realizing that there was no pressure at all on the next release, and that the schedule could have been ten times longer and not hurt a darn thing.
As it was, the schedule ended up slipping beyond all control to nearly three times the original allotment - and still about 75% of what I would have liked to allocate myself. Several features got axed to make it fit in that amount of time. It was finished as soon as it was because, by then, I'd already made clear my intentions to get out of that company as soon as possible. The problem was, the slippage was universally agreed to be my fault, because I wasn't working hard enough on getting the project done.
- No, You Can't Have an Office
Cubicles are the most disgusting thing that any human being has ever been forced to endure. They are degrading, offensive, and belie a pervasive attitude that the common worker is not worthy of much more than a 5x5 square of carpet with some cheap prefab "walls."
I had to buy my own mouse to replace the horribly inaccurate Dell ball-mouse that afflicted my workstation. It was a miracle that I even got a new workstation to replace the second-hand scrap heap I started out with. Requests for monitors that wouldn't give me eyestrain headaches on a daily basis were flatly ignored, if not outright mocked, while management upgraded themselves to dual LCD setups that they rarely used. Books and training materials were right out. To hell with you, you don't need Visual Studio 2003. VS6 compiles C++ just fine as far as any of us can tell, so take your C++98 standard and shove it. VS2003 costs money that you don't have in your budget. You can set up a source control server as long as you run it on your (highly underpowered) machine and don't use up network resources for it. [Needless to say, I gave up trying to get them to adopt source code control.]
Office space, clearly, was not going to be granted to me, period. Forget the fact that I was cooped up with several people constantly on phone calls, and that across the low cubicle wall was another software startup that engaged in frequent and very loud arguments. I'm frankly shocked I could do anything productive there at all. It was a nightmare for concentration. I took to occasionally napping in my cube and working late just so I could get a couple of hours of actual quiet.
With no way to clearly indicate to people that I needed some privacy to get my work done, I had to resort to being very short and terse, usually at the risk of alienating people that I liked (i.e. the phone support guy). Eventually, people learned to just piss off and send me an email when I was hunched over looking thoughtful, but it took some very regrettable outbursts to convey that point; calmly explaining that "now is not a good time, I need to solve X" never made any headway. You're a cog in the machine, dammit! My inane questions are more urgent than your thoughts, no matter what you're doing!
- You Will Be Here At 9AM, and You Will Not Even Think About Setting Foot Outside This Building Until At Least 5PM
Mandatory schedules are second only to cubicles in being utterly despicable inventions. Being expected to be at work, and typing in my IDE, on a rigid schedule, is just stupid. I only once succeeded in getting a day to work from home, and was told never to try for such a thing again, despite the fact that I got nearly a week's worth of work done in that one day.
Every day is different. Some days I'm ready to work first thing in the morning. Some days I need a few hours to warm up and ease into things. Some days I just plain need to not think about work. Some days I can hop out to Wendy's and grab a burger and be back at my desk in 30 minutes, ready to keep solving a problem. Other days, I'd prefer a solid three or four hours to just clear my mind and relax, think about other stuff for a while. Do some light gaming. The 9-to-5 world (at least, the part of it I was punished with) does not tolerate such heretical notions. You will be here and typing at 9AM, you will continue to do so until no sooner than 5PM, and you will darn well show back up precisely one hour after leaving for lunch.
Never mind the fact that management routinely kept loose schedules, took two or three hour lunch breaks, and worked on personal or external projects constantly. The Cogs in the Machine do not deserve such privileges. You will devote your every waking hour to making money for The Man, and you will like it.
After a while of this kind of crap, I found myself depressed. Not clinically, slit-my-wrists, take Prozac depressed, but pretty bummed out about life in general. Despite what my mother will try to tell you, I like things fairly clean and orderly (in my own weird "order"). During the job, I found myself not caring about that at all. My personal life, my flat, my work all started to decay under the weight of simple complacence.
I quit eating properly, gave up exercise, took to long hours of staring blankly into space instead of sleeping. Some of it was due to heavily limited time during the X3 crunch, but the laziness and lack of motivation continued well after release. I let myself slide in ways that I never would have imagined I could let myself go. Stuff got outright bad for a while in my personal life.
Eventually, the light turned on, and I figured out that I hated my job. I didn't just dislike it, or have frustrations, or have some niggling little peeve at work. I hated that job.
Even during the sleep-deprived panic of working on a game in Crunch Mode as well as a day job, it was pretty clear to me that I liked the Egosoft job. For a while, I wondered if I wasn't just grasping at the greener grass on the other side of the fence. Soon enough, though, I realized that it was more than that.
At Egosoft, I'm finally with a good team, and I've got a great boss. After X3, I sent him a private postmortem outlining some concerns I had with the development processes and made some suggestions for improvement (some of which I've mentioned here before). At my day job, I would have expected (quite literally) to be fired over such insubordinate arrogance. For a while, I had a contingency plan of what I would do if I got fired from Egosoft for writing that document.
As it turned out, my document was welcomed; the problems were things that the team lead had seen and was interested in solving. We've even discussed some things (and plan to continue to do so) that help me see why certain decisions have been made. At the day job, when a decision is made by Management, you will darn well do it and not ask questions. At Egosoft, if there's a problem with a decision, you make your case, and everyone concerned gets together to find a better alternative.
Everyone on this team is a "thought worker." We do business and earn our living on abstract, digital concepts and products. There's a lot of real-world stuff that goes on (like producing and selling game units) but the essence of what we do is all very similar. Everyone understands wierd work habits and patterns; we all have our own quirks. Everyone is given everything they need to get their job done, as far as is practically possible. This team works together, on a shared goal, for a shared purpose, on a project we all care about doing - and doing well.
I've finally freed myself fully from the evils of contracting (never knowing where the next job will come from), and I'm now free of the evils of day jobs (being coerced into existing on someone else's agenda). I now have total freedom to live, clean my flat, go shopping, take a four hour lunch break, and/or sleep all day, provided the work gets done. I'm now working because the people I work with know I'm competent, know I know my stuff, trust me to do what I'm on this team to do. I value and appreciate the skills and input of everyone else on my team, and they reciprocate to me. Even those who are, formally, "In Charge" do not demand to be treated as if they are infallible or above reproach. We're not here to buy a Benz for The Man; we're here to all reinforce each other, and to contribute to a whole that is greater than the sum of any of us individual parts.
This team isn't just a bunch of people who happen to spend their day in the same building and get paychecks with the same letterhead. This is a team. And it feels damned good to be a part of it.