Coding "To The Metal" is a dangerous ideal.
The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.
Edit: It seems a lot of people have really taken this light hearted jab the wrong way, and quite a few others need to perhaps actually read the words that I have written.
This article is not a technical discussion, but one of a business point. People are losing money and shipping games late. Platform specific code is expensive and often thrown away. There will never be another console requiring the amount of fine tuning as the PS3 did. Pushing the limits of hardware is important, but it is an ideal. Something that we should reconsider when we are in an industry of constant layoffs, crippling budgets and failed projects.
The new console generation has reared its ugly, ugly head and the misinformation has come out swinging. Any moment now a "veteran developer" will wander out into the blinding light of the PR storm and start to make bizarre comments about how games development would be far better if we were closer to the metal of the console. If only they had more direct hardware access and less API's choking their creativity.
They mean well, but the excitement of the moment has left them dazzled and confused. The grunts in the trenches, the people actually making games, do not want this.
I am not a clever man. I am however, a pragmatist. And, I am tired of this silly fetishization of doing shit the hard way.
I can see the attraction, the raw speed of blitting to a hardware framebuffer, the power and convenience of direct memory access, it's carnal, sexy, badass. But it doesn’t ship games.
Low level code is worthless..
Firstly, it's a maintenance nightmare. People working on the code will require an acute knowledge of the target platform. That's not something we have time for anymore. Nobody has time for that anymore. Not AAA nor indie. Specific hardware expertise is hard to find and is, more often than not, expensive. Learning to work with a unique machine, especially towards the end of it's cycle is demoralizing for lots of developers. (Anyone who has put their back out recently whilst trying to throw a PS3 dev kit through a window knows what I'm talking about) Some will rise to the challenge, but nobody who likes sunshine or fresh air.
My second, and perhaps more important point is that it locks you to the hardware. Even the laziest beatnik indie outfits are multiplatform nowadays, code has to be portable. Really portable. Even a project built for a single specific platform can find itself deployed on an entirely different architecture at a moment's notice. Opportunities come and go fast, if you can't deploy a vertical slice within a week, you might find yourself out of the game.
In my opinion, Direct hardware access is a bug. It's not the nineties any more and you shouldn't be able to accidentally brick a machine with a few junk pointers. I don't trust my drivers, but I trust them more than a bunch of overworked developers in their thirtieth consecutive week of crunch.
Moreover, it is so often just a security hole waiting to happen. Modern day gamers, be they on phones, tablets, Windows, Linux or even the smelliest of consoles, will have passwords, personal data, perhaps even credit card information on their machines. Software can never be fully bulletproof, and security comes at a price: We need to start planning for more layers of abstraction, with higher latencies and overheads.
If you have time to spare, or programming resources to allocate, you should be working on your tool set. The largest cost in games development this generation will be artist time. Sit down with your artists and ensure they have the tools they need to do their jobs to the best of their abilities. Your audience probably wont care that you got a 2% performance increase with some nasty low level hacking, but they definitely will care if your game ships half a decade late because of the development hell you're heading towards.
I've found that when you accept that squeezing blood from transistors is bad programming, and bad business, you focus on the more important things. Last week I shipped an early alpha of Maia to backers and am currently deploying our latest milestone to three platforms simultaneously. The API's I use to do this are are slow, bloated, have terribly latency and have an abysmal memory footprint.
And I fucking luv 'em.