Sunday, January 29, 2012

Miner Wars Development Costs: How Much Is a Feature Worth?

As the director, I pay careful attention to the development costs of Miner Wars, not just to sit around and count the stacks of money, (although ’greed is good‘), but especially because I received a specific amount of money from the investors – that’s our budget – and I must not spend it without having finished product – Miner Wars.

Today, I want to show you how much it costs to implement a given type of feature.

All the figures shown below include every related cost: programming, art, testing, design, team management, risk reserve, etc.

Feature Costs

Prefabs: $30,000
This task required us to design, model and texture about 400 prefabs –what’s currently in the game.

One Small Ship: $1,000
This task requires us to design, model and texture one small ship, add dummy points for weapons, the drill, define head for the player, etc. Then we integrated each one of these into the game and tested them. We have 23 unique small ships in-game, thus all small ships are worth $23,000.

Editor - Snap Points: $3,000
This task required a programmer to modify our editor to support snap points, (to help everything align perfectly), modify selection procedures, add dummy points to 3D objects (to define where a snap point is), artists then went over a few hundred existing prefabs to add dummies for snap points, after which testers tested these objects by building some experimental scenes. Second iteration consisted of making snap points more intuitive – programmers added perspective transformation on snap points, more control over selections, etc.

Large Ship Weapons: $4,000
This task required a programmer to implement varying types of large weapons, (bullet based and guided missile launchers for example), with their own AI such as auto aiming and friendly fire avoidance. These were then integrated within the editor and save/load functionality was added. So far, our artists have modeled and textured about 8 different weapons. This complex process is topped off with sound and particle effects, (though some are reused from smaller weapons).

Third Person Camera: $1,500
This particular task required a modification to the default cockpit camera - to be able to move it a few meters behind your ship, add some string physics, and be able to react to obstacles between your view and the ship.

Encyclopedia + $5,000
This task required us to rewrite our internal design document into a more readable form as an Encyclopedia, fill in some new details on factions and characters, add drawings and publish it on the wiki website to keep things up to date.

Sunlight Shadows: $1,800
This task required a programmer to implement sunlight shadows into our engine, make it stable and solid even on long distances, and then a couple of optimizations iterations: reduce objects needed to render into the shadow map, blend by distance, fix issues with floating point precision, etc. Artist had to build a “shadow testing scene”.

Spotlight Shadows: $1,000
This task required us to add the shadow-casting feature to our spotlight entity, support for different types of shadow caster textures, optimizations and tweaking for different rendering qualities.

Publish a Press Release: $150 to $300
This is what we do every week when we post a news update. It requires us to write and proofread a press release, send it to magazines, update our Facebook page, twitter, YouTube, our forums, our web site, etc.
Sometimes we do a trailer or some special PR campaign, and then it’s more expensive.

Publish a test build: $150 to $300
This really depends on how ugly things get—which is hardly predictable. In most cases it is straightforward and it costs us max a few hours of work. In some cases things go awry and we lose 1-2 days. The process consists of making a separate branch of source code and assets, build it (auto-updater, installer, torrent files), upload to all our servers, and switch the test build or the public build to this new version.

I realize now just how costly these features are. I use to think about them in man-days, not in money/dollars.

Think about this: would you rather have 400 prefabs or a new car? Hehe.

Nothing Beats a Reserve

When I do cost estimation for a new feature, I usually assume that the initial estimation covers only one third of the final price. In other words, people, (including myself), tend to under-estimate. For example, the third-person camera was projected for only $500, but internally I knew it would cost three times more: testing, bugs, tweaking and polishing, broken functionality in some completely unrelated function....
So I have this rule: multiply it by 3. I use it for all my estimations.

Admitting Failures

We have failed features too – we spent the money, but the feature never got delivered.
I do everything possible to not let this happen, and though it actually hasn’t happened in the last couple of months, the beginning where I was just creating this team, there were a few moments.

Most significant were:
  • Story and Dialogues for Single-Player Missions - This cost us a couple thousand, as well as a lot of lost time on my side, and we ended up with unusable and unfinished documents that no one could read, no dialogues at all... so we have to do it AND PAY it again. 
  • Multi-Player - 3 months of paid work, 6 months of total time. I felt this was going to be a fiasco after the first month when the programmer took it a very wrong direction. My mistake was that I let him continue because I was hoping that “he will change”. And then the next month passed, and the next month... by December my patience was gone and we let him go. Worst thing is that this “experiment” cost us 6 months – we could already have working multi-player!

Lessons Learned:
  • If you have a new guy in your team, who has only been there 1-2 months, and you feel that he is incapable, or that there’s something wrong with him, or that you actually start thinking about firing him – then do it! Immediately! There’s no point in second, third, fourth chance. Adults don’t change.
  • Save money, save money, save money! You will be needing the reserve anyway.

Wednesday, January 18, 2012

18 years of being a programmer

Today I have reached a score of 33 years on this planet.

It occurred to me while I was responding to questions in an interview. The interviewer mentioned there that I have been a programmer for a decade. This didn’t sound correct, so I made a quick calculation in my head and fixed it: it's actually been 18 years.

Eighteen years of being a programmer! Wow. I started at age 15, now I am 33; that makes it 18 years. Huge!

Some people are not even that old.

Some serious statistics:
  • Programmer period of my life is longer than non-programmer period (18y vs. 15y)
  • If I spent 10 hours of programming per day on average, that's 65,700 hours of nonstop programming, or 6,570 days
  • If I wrote 100 lines of code per day, that's 657,000 lines of code during my whole life
  • That would make a book with 13,140 pages
  • Or 43 books, each one having 300 pages
  • If I would be making just the minimum US wage, I would make $420,480
  • If I spent all that time just walking, it would be 328,500 kilometers
  • That's 8x Earth's circumference
  • Or 85% of the distance between Earth and its Moon
  • Or 0.22% of the distance between Earth and the Sun

Curiosity at the end: I still have spent more time sleeping than programming! It’s funny though…
  • Total Hours Programming: 65,700 hours
  • Total Time Asleep? 96,360 hours!

Best Regards,

Wednesday, January 4, 2012

Rastko's "making of" of our intro video

Spoil alert :-)

Miner Wars Cinematic Intro - Breakdown from Rastko Stanojevic on Vimeo.

Rastko Stanojevic - 3D Artist who works with us, he did weapons, prefabs and this intro video.