It Sucks To Be You

In honor of the DOOM teaser recently released, I have an announcement.  If you are a gamer and you weren’t part of my generation… It sucks to be you.

Imagine each and every year of your young gamer life being composed of Earth shattering events.  Imagine walking into a game store or picking up a magazine and seeing something you’ve never seen before; something that you didn’t even realize you wanted.  It’s something that looks immediately relate-able and yet so alien.  Imagine the school yard being this religious place where you’d overhear conversations about a game you never heard of and it turning out to be Metroid or Castlevanvia.  Imagine yourself feeling like a real world Indiana Jones of video games; discovering life altering experiences only through rumors and speculations spouted out in the lunch lines.

This is what it felt like at least once a year when growing up.  Genre’s were being invented, and new forms of entertainment were being explored through the limitations of current hardware at the time.  One experience I recall was growth of first-person shooters.  The funny thing was that I wasn’t quite wowed by Doom when I first saw it.  I had played 7th Guest, and killed enough Nazi in Wolfenstein to turn an ocean red.  I had also played many 2D tile-based first-person dungeon crawlers at that time and the popularity of “first-person shooter” didn’t exactly click for me.  I didn’t realize that the “shooter” was the more important word than “first-person” in that phrase.

It took multiple plays of id Software’s shareware to finally realize that I had probably put more hours into that demo than I did the entirety of Wolfenstein.  The game just clicked for me.  The motion was fluid, the graphics were stellar, and the gore was just right for my adolescent brain to constantly whisper, “aim for the barrels, always aim for the barrels…”  The slight nod to that arcade-y feel of hidden spaces, time trials, and relentless action just seemed right for a time when I was in transition between the local mall Arcade and my first home PC.  Everything was a new experience, always.

Even the iterations of hardware felt like huge leaps where buying a new PC or adding even 4MB of RAM could literally 2x or 4x your performance from your previous rig.  It was intoxicating.

Over the years I grew older.  I still reveled in my 2D and faux 3D games, but the script was flipped yet again.  Polygonal textured meshes; what?!  Games like Duke Nukem, Decent, and Quake were progressively hitting the shelves.  Suddenly I was looking up and down and exploring these worlds in a dimension I didn’t even know existed for video games.  I was using physics and trajectory in Quake to take out bad guys in a way I had never even considered in any 2D game.  Again, the visual bar was raised, the interactivity was expanded upon, and PCs were doubling and tripling in performance year after year.

That adrenaline packed history lesson is unfortunately just that; history.  Now we have mediocre games that take hundreds of employees, $50M+ to develop, $150M+ to market, and try their hardest to have a little something for everyone.  This and future generations have lost something when they lost the clear lines that define a genre.  Everything has sort of blurred into a generic super-genre out of fear that there might be 1 person who won’t buy that game.  And with that, the idea of something new is also gone.

“Yes but Minecraft Ben!”  I get it, that 1 thing was cool and new and took the world by storm.  Even though games like Dune 2, and DOOM, and Quake never reached that level of financial success I feel like each of those games was just as big, and it was happening at a breakneck pace.  It wasn’t just one digital download that ruled them all, it was an ecosystem of games that crowded my shelves with stacks of physical disks and over-sized manuals.  There was weight to it all (literally), which gave it sense of meaning.  So for every League of Legends today there seemed to be 3 or 4 RTS games from professional teams looking to make it.

everyone-can-be-super-and-when-everyones-super-no-one-will-beIt’s hard to put into words why those times were different, and why I felt they were better.  I guess you could say that it felt like gaming had more of a soul back then.  There was something special; something “super”, about video games in that era.  It really was guys in their garage making the next big thing, and these days guys in the garage are just hoping their Kickstarter campaign can reach $50,000 so the the 8 of them can huddle together and hope to survive long enough to put out a game that might make another $100,000 for all of them to share as payment for the last 18 months of sleepless nights.  You don’t have to be a math genius to realize you could make more money as a Walmart doorman than you could in video games.  It’s either that or work on a large project ending in a number between 3 and 7, sometimes hidden with sub-titles.

What can I say; at the end of the day there is a difference between seeing next years new Toyota or BMW vs. seeing the first car to ever beat the streets or the first plane take flight…  I don’t know that video games will ever have that moment in history again.  Video games are too big to fail now, too popular to notice just how many do.  I’m glad I was there to enjoy it when I could still pick up a magazine and feel like I knew almost everything.

The Misconception of Core Teams

Having worked in the same place for nearly a decade tends to give you some perspective on the life cycle of a small business.  I’ve found that every 2-3 years a fresh crop of engineers are hired and a tribe is formed.  After the hardships of a mostly failed project that somehow pinched out a lukewarm victory, the tribe goes on a journey through the company ranks to push for a centralized or core engineering team.

Continue reading The Misconception of Core Teams

The Internet Is Broken

A while ago I wrote a post about what it takes to bake a 762 layer cake; a thinly veiled metaphor of modern real-time software development.  In the end, the sheer size of what we must maintain for today’s standards has created something of comical Rube Goldberg approach to keeping it all together.

I’ve recently ventured outside of real-time simulations and video games to peek into the world of the internet.  I’ve discovered that there is no better example of the threats we all face than to look at what happens in an environment of rapid growth and profit.  Welcome to the World Wide Web.

A friend and I had a long discussion about our future as software developers.  We are getting older each year and, though our skills continue to branch and strengthen, it’s really a series of diminishing returns.  Salaries eventually cap, and certain branches turn into dusty skills that are reserved for those few and far between contracts that pay generously just for remembering how that dated system still works.  Video games are something of a young man’s dream; long hours, little pay, and a decreasing chance of personal success in an increasingly crowded and turbulent industry.  My friend has left the real-time world behind and found new gold in old hills; web applications.  He has convinced me to at least stick my nose in the door but I must admit I don’t like what I’m smelling.

Not having touched client-based web technologies since HTML 1.x in college, I spent a few days reading about web technologies.  In my ventures I followed a trail of dead and dieing technologies, and I watched libraries abandoned and forked over and over.  It was like a class in digital World History to watch these frameworks and languages thrive then die… but did they?  Not really..  Many hosting sites continue to support aging technologies while some websites and web applications continue to push forward with a blend of old and new.  There is only this unsettling sensation, but without any definitive facts, that most of what exists out there is in perpetual deprecation; and yet it’s still there, all of it.

I started looking into AngularJS.  I’m told it’s the new hotness right now.  As I learned more about Angular I fell deeper into the rabbit hole.  It lead me back to my old stomping ground of HTML.  This brief homely sensation was replaced with dread as I dug deeper into CSS hell.  Magical tags of :before and :after and .show and .hide were everywhere.  A face-punch of intrinsic appendages were scattered in there as if one was simply expected to know.  I mean why wouldn’t you always include webkit-box-shadow and moz-box-shadow with box-shadow in your style template right? Duh!  This is further complicated by the insistence to include other styles such as Bootstrap to help reduce the pains of mobile support.  To add insult to injury most of this was processed through “Minification” which decimates the readability to save a few bytes of download and improve parsing performance.

The documentation and vast majority of training material seems highly geared toward Linux or OSX users.  Most of the tools don’t even run on Windows.  I spent what felt like days, installing various software packages to avoid dual booting into Linux or building virtual machines on my PC just to compile these libraries.  Eventually I just gave up and used the pre-compiled Angular and Bootstrap files.  I still don’t know if I’ve executed enough command lines to actually boot a local web server.  I still don’t know what half of these packages do; many of which have home pages that only say, “A tool used to make your life easier.  It does other stuff too.”  Gee thanks.

The Internet is broken.  I’m convinced of it.  It’s built on a collection of systems that require an institutionalized knowledge of how things work now and how they have worked for the last 15 years or so.  It’s a backwards compatibility nightmare that I don’t ever see going away.  I’m certain that technologies like Angular are just another stop-gap in the road to figuring out what the web is supposed to be.  I’m not sure we’ll ever get there in my lifetime, but it’s a pretty filthy place to be in right now.

Days later, I’m still working on my Angular “Hello World”, but only after I figure out why Bootstrap glyph icons aren’t rendering…  as soon I figure out why I need to:

grunt
my

Bowser

Ohh.. Bower not… Nevermind.

Redneck Software Engineering

I’ll just come out and say it.  I’m something of a fan of redneck engineering.  Most of life’s hardest problems often have a genius and somewhat unorthodox solution.  When you are like most people, you look on a shelf at your local store.  If the shelf is empty, the problem remains until you can buy that something to plug that hole or cool your beer or just have a place to put your feet up.  When you are a redneck engineer you see it as a opportunity to dig through your scrap pile and marry seemingly useless bits and pieces into a solution.  It’s never pretty, it looks incredibly dangerous, and yet… it works.

Often times we see this same dilemma in software development.  The proliferation of open APIs and frameworks has given rise to the similar mentality that a common person may express about redneck engineering.  If there is a library to solve problem X you use it because… well…  it’s there, it’s quick, and you don’t have to think about it.  You are either the guy who wants a hot tub and buys one with LED chroma-therapy lights and a built-in iPhone dock, or you are the guy who builds what he needs; hot jetted water.

I’m not saying there is anything wrong with being the guy who just drops the cash for a hot tub.  Speed is how companies stay in business and sometimes it’s just cheaper to buy from someone who only knows how to build that one thing quickly.  Still, I think most engineers working in today’s environment would probably agree that we’ve all become consumers much more than problem solvers.

Sure we ask ourselves every day, “How can I work with this framework to solve my problem?”.  But how often do you still ask yourself, “How can I solve this problem?”  It’s becoming a question we ask ourselves less and less.  I’d like to think that in a world of such rigid constraints and an industry shackled by buzzwords and new “solutions” and standards being created each day that there is still room for the redneck software engineer.  Otherwise, we may wake up one day and realize just how lazy we all are, and how little we actually know about a whole lot because it’s all been abstracted from us.

The Cycle: One Cake, 762 Layers

eat-cake-pink-png

Customer: “Oh hello there.  I’d like to buy a cake.”

Salesman: “We have a wide selection behind our counter here…”

Customer: “…no. You see I need a cake that looks like that one.  But I need it for about 1000 people.”

Salesman: “We can bake 100 custom cakes.  That will be…” *cha ching* “$10,000″

Customer: “Whoa.. Sorry, I’m going to have to shop around…”

Salesman: “Wait wait.  It’s half price to add a layer to one cake. So what about one cake to feed everyone for…” *cha ching* “$1,000″.

Customer: “I’ll take it but only if that cake is treated with the same care and quality.”

Salesman: “Baking cakes is what we do here.  A few more layers is not a problem.  We just delivered a cake with almost as many layers (5) just last week.”

Customer: “I’ll need it in 2 weeks.”

Salesman: “I’ll have it at your door with a bow on it.”

Baker: “…you’re fired.”

 

How do you balance a 762 layer cake?  The answer is lots of wooden stakes and wires and shoving PVC spines down the center.  It’s an amazing achievement to behold untouched.  The fondant is a smooth and aesthetically pleasing curtain over the abomination just below the surface, and maybe 10% of it is actually edible cake.

Unless you are watching a reality show baking competition it’s not too often that someone will try to buy or sell such a ridiculous cake.  There are laws of physics that most of us intuitively learn in our everyday lives.  We know that it’s not easy to balance a car on a toothpick or erect a 762 layer cake without consequence. And yet, we see this in software every single day.

You work all the time with a client that doesn’t understand the “physics” of software development, a sales team that is trying to keep the cash flowing in, and a development team who can only keep adding layers to the same code because that it what was sold to the client.

You’ve done 3D graphics?  Everything from this point on will have it.  Multi-player? Everything from this point on will have it.  Buddy systems, chat support, VOIP, server clusters, massive meetup scheduling database, and VM back ends?  It’s all there, some parts left dormant for the what-if promises made behind closed doors.

Like some sort of code hoarders, we are afraid to start over.  There’s not time after all, and clients are always looking for the best bargain.  We know that we are just one handshake away from feature X being promised at no cost to the next customer because, “baking cakes is what we do.”

code!The reality of code re-use is something of a lie in many ways.  It’s only true if you understand and accept it’s caveats and faults.  It sells a dream to non-programmers that code is more like a bowl of dry cereal – easily separable – than the muddy mess that happens when you let it sit in milk for too long.  Most programmers who aren’t too close to their “precious” code can see that code is almost always backstroking through a deep pool.  It’s a product of all of those promises, and the need to fix bugs in age old features that were assumed to be rock solid.  But the programmer knows, the programmer always knows.  Eventually something will come loose, but we aren’t paid to fix old features.  We are paid, to keep adding layers.

Rarely can we simply pull a piece of code and use it untouched, if only because it is tied to a dozen or so user interface hooks or event listeners and other loosely coupled but critical bits.  Some features need to plug into other features, and even component-based architectures haven’t completely resolved the dependency issues.

I wish I had an answer to the 762 layer cake but I’m afraid this is just the world we live in.  Products are too big to fail now and we are forced to add new layers onto an already rocky foundation.

When the icing becomes more important than the cake we lose sight of the physics involved in keeping it together.

 

What’s Up With Peter Molyneux?

Peter Molyneux…  For many young hopefuls who are eager to earn their gray hairs before the age of 25, the name Peter Molyneux doesn’t ring much of a bell.  Most game designers going through school today probably associate with Notch more than Molyneux.  If you grew up in the Playstation generation, after the golden age of PC and the print publications of “Gaming Gods” in magazines, then you’ve probably not heard of this guy.  Or maybe you have.

Molyneux has had a dark cloud over his head for quite possibly his entire gaming career; the kind of reputation I think would drive most people out of the industry.  I mean, can you blame the guy?  He started out as a baked bean salesman in some factory.  The guy was quite literally a bean counter.  It’s practically in his DNA to up-sell you something you may clearly regret hours later.  (In classic Fable fashion, this post needed at least one good fart joke).

In all seriousness though, I’ve probably followed Molyneux through his entire career.  I was personally more invested in his vision than the actual execution however.  Even by his late days at Bullfrog, Molyneux had a special way of speaking to the press.  The man knew how to make headlines as colorful as an 80’s themed nightclub.  His quotes were always especially inspiring, though I read them with the kind of inspirational skepticism you get when your too-old-to-care grandad tells you how much “tail” he got because of his car.  You know only a fraction of it is true, if any, but it leaves you thinking… “what if”

I feel like there is this loose thread that people must connect between the man and the kind of games he makes.  It’s as if the fact that he makes god games requires him to be as perfect as a god himself.  To be honest, gods aren’t exactly perfect either.  Mistakes are made, promised are broken; they are practically meant to be.  What is more important than the end product to me is the wishful dream that sparked it.

You see, we need a guy like Molyneux to promise that you can step on a flower and it will die or drop an acorn and it will grow into a massive tree.  We need designers to have a childlike untetheredness about them, while understanding that not every idea will make the cut.  But here’s the thing, not every idea is good for every game.  And though we never saw dynamic flowering meadows in Fable, we have seen games focus almost exclusively on that kind of mechanic.  We’ve seen many ideas that seemed almost birthed from this man’s mouth, even if it didn’t come from his studio.  We need more of that.

The first word most of us learn is, “no”.  From the moment of our birth we begin the life lessons of what to say, how to act, and which dreams are worth telling someone.  We are taught what it means to be cool, and how to be attractive, and what are the best things to say for every occasion.  Being a likable person often means sticking to the script.  We’ve all had those moments in our lives when we wanted to speak and maybe didn’t.  Eventually we all reach a point in our lives where the dreaming stops, and we’ve heard “no” so much that we find ourselves saying it quietly.  We mutter in our minds, “people will think I’m crazy for saying this,” but Molyneux seems to be the only person who hasn’t changed.  He may add caveats and speak in “maybes” but the dreams are still there for the world to see.

In an industry filled with people ready to pounce on your failures there is still a guy who isn’t jaded enough to be the same boisterous dreamer that made games like Populous, Black and White, Dungeon Keeper (the good one), and even the Fable series.  Where technical behemoths like John Carmack were my motivator to seek out Engineering as a future, it was boisterous dreamers like Molyneux that inspired me to think of games as more than just guns and corridors.

Admittedly Molyneux’s public persona has developed into a caricature of it’s own, even spawning a fake Twitter account that tweets outlandish game ideas.  But would we really want it any different?  Do we want to live in a world where people just have “designs”, but rare dreams?  Do we want to only play what is possible and never hear about the impossible?  That sounds like a boring place to be, and yet here we are; slowing bashing each other down until everyone sits comfortably somewhere in the middle.

Molyneux has recently suffered some hard blows, yet again, to his credibility but I hope that he doesn’t stop.  If he walks off into the sunset it will quite literally be the end of dreamers.  All that is left out there seems to be quiet voices timidly hoping not to become him just for speaking up, or others who would rather bury their idea before they let someone else make it.  If he leaves we will be left with people selling us the product, not the dream.  Games may stop being about what is possible and simply be about what is here now.  I’d encourage all designers to speak as loudly and shout about their crazy ideas from the tallest soapbox and become the next Molyneux.  If you look at the roster of successful games under his belt you might agree with me in saying, there is nothing wrong with that.

 

The Uncanny Interview

Video games are big business.  Ubisoft, EA, Activision; no one is exempt from using multiple studios, each employing hundreds of people, to get a single product to ship.  Even indie studios have started to grow as that space settles into its’ own.  Indies have elevated their game to the AA status and those bite-sized experiences from lone developers we once called indie don’t seem to have a name anymore; perhaps hobbyists?  Everything is moving up and onward.  And with all of this growth, where does that leave the process of finding those hundreds of people to ship the next game?

For the first time in my life I had an experience that I’m still not certain that I can put into words, but I’ll try.  It was such an experience that I owe it to myself to try to explain.  I had what felt like an uncanny interview, something that I feel could only be possible due to the success that video games have enjoyed.

Salesman-FinalI was contacted by a recruiter about a year ago, maybe more.  I humored her because I did admire the studio she represented.  We chatted and she seemed like a knowledgeable and friendly person.  I turned down the offer at the time but the conversation was struck up again recently.  This time I decided to at least take the first step and possibly answer my proverbial question about the relationship of this company and myself, “what if?”  What if I passed the test.  What if I got to meet the team.  What if I got an offer.  What if I accepted.

These were all questions that were always there, so I took the plunge and accepted the test.  What transpired after that very human, very friendly interaction was… interesting.

I took the programming test.  I finished it in what felt like a reasonable amount of time.  Some questions took longer than others, but there was nothing terribly difficult.  It was mostly questions that were masking a genuine engineering problem through humorous context.  This is the point where I started to feel a little paranoid.  Why would such a successful studio throw out a bunch of softball questions?  And to add to that, why would they give me so much time to complete it?

Dramatic ChipmunkWhen I finished the test, I reviewed it thoroughly.  I ran inputs, good and bad, through every answer to validate their outputs.  My answers were stable, consistent, and produced the demanded outputs.  I sprinkled in comments to state my assumptions throughout my answers.  As with all code, there is a large permutation of answers to any software problem, this is something that the test itself mentioned.   Sometimes the answer relies on your objectives.  Are we coding for readability, re-usability, performance, memory conservation, or is the real test just a veiled attempt to look at your choice of coding standards or see if you like tabs or space?! *cue dramatic chipmunk!*

I had many concerns at this point, but I was honestly having too much fun with the test to worry.  My biggest concern was that the test not only stated there were multiple solutions, but it also stated that it would be processed by an automated system… Wait what?  No human hands would touch this random Word document I was about to upload to a webpage that had little more than a “good luck, you’ll need it” message?  I thought it was pretty funny at first… I mean, the answers were right, so I’d at least get a callback to discuss why I chose option 4 of 999, right?!.  Sadly no.  In less than 12 hours (many of those being sleeping hours) I was rewarded with a kindly worded generic email that confirmed my greatest fears.

morphious

Only after I got that email did I abashedly realize that they weren’t looking for a right answer, they were looking for THE right answer.  The questions were a lot like a pixel hunting puzzle in a classic Adventure game; not nearly enough information, and mostly wild guessing based on what little clues were on the screen.  I knew what the answer was, I just needed to figure out how to tell the game that I knew what the answer was.  Alas, it was too late, and I had been judged and filed away by the system.  My final interaction was a response that politely explained that I was but a drop of water in an ocean of applicants.  That was the end it.

Good-day-sir

I wasn’t sure how to take all of this.  I have never NOT gotten a callback and I can’t ever recall talking to a company I wanted to be at and not gotten an offer.  It was a strange experience for me.  It was rejection, sure; but it was the kind of rejection that I find harder to accept.  An algorithm told me I wasn’t good enough, like something out of Minority Report or Gattaca.  How am I supposed to feel about that?

Taking that test was an eye opening experience.  It had honestly been a while, years in fact, since I decided to sit on the other side of the interview table.  This may have been an isolated incident and in many ways I do hope so.  In an age of Twitter, “Social” Media, You Tube, and Goggle Hangout, it’s easy to forget the value of just shaking someone’s hand.  There is irony in trying to find intelligent and sociable engineers in a creative space by grinding them through a machine first.  In the end though, my first and most important question was answered.  I had little else to say about it after the following few tweets.  As crushing as it may have felt, I’d like to think that it was in my best interest that it didn’t go any further.  That’s what I’ll keep telling myself until I believe it.

The Tortured Artist

Not to be such a Debbie Downer so soon after Christmas, but this is something that fell onto my lap.  As with many things online, one hyperlink lead to another and I found myself reading about the poetry of Michelangelo.  I can’t say that I studied nearly as much as I should have about the great Michelangelo but his poetry seemed very relevant to that of a game developer…   I thought I might present some excerpts and ponder on his plight. Continue reading The Tortured Artist

Being JUST An Engineer

engineer

I’m not sure what to call it.  Some might call it agism I suppose, but I’m still struggling to find a word that accurately describes what happens after you’ve gotten pretty good at doing your job, mostly because you’ve been around long enough to see how the Matrix works…  Maybe if I talk it out I’ll get some suggestions or divine inspiration, but one thing is certain; career choices are never easy.  They only seem to get harder as life gets more complicated.

Continue reading Being JUST An Engineer

Codemonkey | Author | Cool Dad (certified)