Archive for October, 2006

Starting my first game company

Tuesday, October 31st, 2006

I’ve had RakNet for a while now and recently it’s started making money. Not much money, but more than before, which was nothing. While RakNet is very good and is something I will continue pursuing, my real heart is in making my own game in my own game company.

After making a schedule, it looks like I can start beta in 3-4 months. It’s a tight schedule but also a pretty small game and I already have a complete engine. I’ve read that a modestly successful independent game can sell 10,000 copies. Since I’m monthly subscription based, that would work out to about $60,000 a month income, about half of which would go towards expenses. My break-even point, to just pay expenses, with no salary for myself, and no phone support, is about 1,000 subscribers. While some MMOGs release once they hit the break-even point, I consider that a failure, because people who try a game once and form a negative opinion are unlikely to return. You will get the most interest on the day of release. So releasing before the game is awesome is just a way to permanently lose a lot of business.

It’s tough to manage the release date. If I release too early, it’s essentially permanent failure and I lost everything. If I wait longer, it’s a huge expense, not just the salaries of the workers but my own lost potential salary, which is over 6 figures a year. I’m reminded of when I first released RakNet. When I did so the library was very good. However, compared to now (after 3 years of development) it was unbelievably slow and primitive. Right now, with version 3.0 of RakNet coming out soon, RakNet is essentially feature complete. If I had just waited 3 years in closed beta I would have been better off. So I think the key balancing act is to stop when there are no longer features to add that would result in a significant increase in business. Keep in closed-beta until the closed-beta testers substantially indicate the game is good enough. Then run open-beta until 10,000 people indicate they would pay monthly. Then I think it’s good enough – even if some people are turned away I hit my goal.

On the logistics, I finished hiring 4 programmers from India. For two of them, I have self-doubt as if I made the right decision. Sometimes I get asked a stupid question or I ask a question they ought to know and get the wrong answer, or an answer that doesn’t address my question. I’m doing my best to avoid being overly sensitive so won’t say more on that until later. I will just say that I really hope I hired the right people because that, more than anything else, will make or break the game and the company.

Outsourcing is just supply and demand

Friday, October 20th, 2006

One day a real estate investor, sipping $4 coffee at the local Starbucks, is flipping through real estate ads. There are dozens of properties in Florida people are just giving away! He exclaims, “These houses in Newport Beach are going for insane amounts! Just yesterday I sold a one bedroom house on the beach for $1.5 million. Can you believe those fools are giving away their houses for a mere $150,000??? What a great opportunity!” So our foolish investor moves to Florida, buys a dozen of houses for the asking price, and puts them right back on the market for $1.5 million each. Obviously, with every other house on the street going for 1/10th the price, he is laughed out of the market. “It’s not fair!!!!” our investor shouts to the heavens. “Those houses in Newport Beach are selling, why do people not give me a fair price here?”

Seem ridiculous? It is. Yet this is the exact same fallacy people use when they think outsourcing for a lower than US wage is taking advantage of foreign workers. And the fallacy foreign workers make when they think they deserve U.S. wages.

An interview I had today:

Kevin: Now one thing I noticed was that you asked for $4,000 a month. Is this correct?
kiran.1784: yes
Kevin: Are you in India or the US?
kiran.1784: I am in India
Kevin: What is your yearly salary requirement in LAC?
kiran.1784: LAC??
Kevin: in Rupees
kiran.1784: ooh It’s 2.04 lakhs/year
Kevin: ok that is not $4,000 US a month. That is about $4,400 a year
kiran.1784: no that is per month
Kevin: As I understand it, 1 LAKH is 100,000 rupees. 100,000 rupees is $2,193 US dollars
kiran.1784: yes exactly
Kevin: If your salary requirement is 2.04 LAKH per year then your salary requirement in US dollars is $4,473 US dollars per year. How are you coming up with months?
kiran.1784: ok so in US dollars it will be 48000$ per year
Kevin: Please explain your calculations to me
kiran.1784: I asked 4000$ per month
so 12*4=48 per year
Kevin: Show me how to get from 2.04 LAKH per year to what you are asking
kiran.1784: If you are intersted in the deal we can continue sir.
Kevin: I’m just trying to understand you. Are you multiplying your yearly price by 12 because I am in the US? And for no other reason? Because if that is the case then we can stop now
kiran.1784: When you have asked for my salary requirements I clearly stated $4000 per month
Kevin: I gave you the benefit of the doubt as per a math error.
However, if that is your salary requirement then you are asking for 10X more than other candidates more qualified than you
in which case we can stop
kiran.1784: so how much you are willing to pay me?
Kevin: Based on your attitude so far, nothing. Thanks for your time
kiran.1784: thanks

There’s several problems with this line of reasoning.

First, the two goods are not equal. A house in Newport Beach in sunny California weather is more desirable than a house located on former swamplands in Florida. Similarly, from what I’ve seen of interviewing dozens of Indian programmers, US programmers are more desirable. You don’t have the problems with timezones, with slow responses to instant messenger, legal problems of liability and intellectual property, and the simple fact that the US programmers I went to school with are just better programmers than the Indian recent graduates I’ve been talking to.

Second, the demand is lower. If the prevailing wage in India is $5,000, then this is what the employers there will offer. There are very few employees who will demand $50,000 a year because they end up unemployed. There is high demand for game programmers in California because there are a lot of game companies here and few are enlightened enough to let people work at home at all, much less outsource. There is low demand in India for the same reason, and the reasons I pointed out earlier. With lower demand, the price drops.

Third, the supply of cheap employees is higher. If I get 790 job applications asking $5000 a year, and 10 equally qualified job applications asking $50,000 a year, guess who is going to get the job? Now if 790 job openings were to open tomorrow and snatch up the $5000 a year programmers, leaving only the $50,000 a year ones, then perhaps they’d have a chance, and the price would go up. Although in that case they wouldn’t get the job anyway because the goods are not equivalent. Indian programmers are less desirable, and for the same price the job would go to the US programmers instead. In any case, the greater supply, the lower the price.

The lower salaries in India and elsewhere is not exploitation but a reflection of a different cost of living. This is the same reason why programmers on the West Coast in the US make more than those in the East Coast. On the West Coast, houses go for millions of dollars and eating out might be $15 a person. On the east cost, you can eat out for $5 and the houses cost 1/10th as much. We in the West Coast don’t say “You are exploiting those programmers on the East coast!” In fact, the programmers on the East Coast are better off because federal taxes do not account for cost of living in different areas of the country and taxes go up exponentially with income. I know this firsthand, as taxes took 40% out of my last check.

In conclusion, people who say $5 an hour is exploitation are comparing it to their own standards of living, and not those in the country of the person being paid. The only time I agree with exploitation is where tragedy of the commons exist, such as lower prices through environmental degradation or labor exploitation (child labor, slave labor).

Successful interviewing tips

Wednesday, October 18th, 2006

I still have a lot to learn in conducting interviews but here’s a few things I learned by interviewing several people a day over a week now.

1. Always give a sample code test first. The test should test how good they are at solving problems, rather than what they know. The test should involve actually writing code. Good questions are open-ended but simple to comprehend problems. I have three questions myself and they all involve solving potentially real-world problems. The first tests their architecture skills. The second tests their ability to follow a specification. The third tests their ability to plan ahead and not make unjustified assumptions. I learned this because I spent a lot of time reviewing candidates, and at the end of the interview I have a so-so idea of how good of a programmer they are. One guy, who claimed to have two years of experience, I was planning on hiring, mostly because he said that and a case he brought up he claimed to have solved at work. Yet when I gave him a sample test, he failed it so badly I could hardly believe he was employed.

2. Ask questions that are open-ended, as opposed to looking for a specific answers. Good questions give the candidate an opportunity to brag about themselves. Every candidate wants to do so, so if a candidate does not brag about themselves this is likely because they have nothing to brag about.

3. Spelling ability is a reflection of intelligence. Not using a spell-checker is a reflection of carelessness, sloppiness, and a lack of pride in one’s work. You can practically hire just based on how good of a speller the candidate is.

4. I’ve never had a case where a candidate gave me a warning sign and then redeemed himsself later. I might end up just following the policy that if a candidate gives me any sign at any time they are not suitable, I will just end the interview.

5. The good people know they are good and tend to ask for more money. The bad people know they are bad and tend to ask for less money. The unscrupulous people will ask for a ridiculous amount of money. However, it’s still worthwhile to bargain hunt. I’ve interviewed people 1/3 the price who are better than their more expensive counterparts.

Space Empires 5 is boring so far

Tuesday, October 17th, 2006

I literally raced out the door to buy Space Empires 5, as it has always been a favorite series of mine. But so far I’ve played all day and am feeling frustrated and annoyed rather than wanting to play more. I think this is in large part due to the interface, which doesn’t give you the information you need when you need it. So you have to click all over the place and try to keep track of everything in your head – closer to programming than playing a game.

A few annoyances:

If you have a fleet of ships and one ship is damaged, the entire fleet moves at the rate of the damaged ship. There is no way to tell which ships in a fleet are damaged except by clicking on them, looking at the details, and hitting back, for every single ship. Keyboard scrolling isn’t supported so it’s very slow and painstaking.

When you colonize a new planet, you pick what type of planet to treat it as (research, mining). But you cannot see the rest of the sector from that screen, so unless you remember you have to pick the wrong thing, remember the name of the planet, go back, go through 2 menus, and change it.

There is no way to get a list of what planets are producing what, or which planets are not producing anything.

Your view of the tech tree is limited only to what you currently have. You have to right click to bring up a new menu to see what the item is – very annoying compared to other games where I can just use the keyboard and scroll down a menu. You can see the NAMES of the things researching a tech will give you next, but not what those things actually are. You cannot see any farther into the tech tree than that either, so if you for example wanted shields, unless you already knew how to get there it’s just a matter of luck.

When you design ground troops, there is no way that I can see to select them, modify them, or remove old designs, the same way you can when you design ships.

There is no auto-explore feature. There is an explore button, but all it does is fly to the nearest unvisited sector. It won’t explore the map for you.

The use of 3D was eye-candy and actually hurt the game. Now I can’t see the whole sector at once unless I scroll way out, in which case the icons obscure the map. They used 3D textures for the text as well, so when I scroll way out I can’t read the text anymore.

A few other, non-interface related complaints:

As far as I’ve seen, there are no random encounters or special events so every sector is pretty much the same as every other sector, just with more or fewer planets.

The game is too easy, or at least it is on quick-start. The first time through, skipping the tutorial I was wiping out another race without even trying.

Space Empires used to be the best if you could get past the lack of graphics. But honestly, Galactic Civilizations is a lot better now from what I’ve seen over the course of playing all day today.

Hard time finding even decent applicants

Monday, October 16th, 2006

In order to interview with me you have to complete the following laborous and difficult prescreening steps:
1. Click on a button to apply
2. Reply to a form letter asking 9 questions such as “Do you have a high speed internet connection?”
3. Setup an interview time with me, solving the difficult problem of converting time zones ( although I even tell the canidate what the time zone difference is in step 2).
4. Show up

The trials must be difficult indeed, considering that of about 800 applicants, only 6 so far have gotten to step 4. The only ones I’ve rejected out of hand are those that reply to my form letter with an unmodified copy of the same resume they sent in the first place (and no other information), or that ask a ridiculous salary requirement (the new record is $200K ). It doesn’t happen that often, maybe 1 out of 40 applications.

Keep in mind I’ve lowered my bar massively. According to my normal standards, of those 800 applicants, maybe 799 of them I would have normally just deleted immediately.

So going onto the interview, it’s really hard to tell who is qualified and who is not. Sometimes they surprise me with what they know. For example, I think every canidate I’ve asked so far knows the formula for the dot product of two vectors. It could be they are just looking it up online. There’s no way to tell unfortunately since I’m doing instant messenger interviews right now.

They also surprise me with what they don’t know, or cannot answer. One of my interview questions is “Please give me an example of a difficult problem you solved at school or your current job, that demonstrates to me your programming ability.” If you had asked me that back when I first graduated, I could have spoken for hours. I would have told you how I implemented my own set of data structures, including the difficult B+ tree. I could have told you how I wrote a networked game demo in my spare time, before graduating, so I could have something to show to potential employers when I did graduate. I could have told you how I was so fast in my programming class in high school, I had nothing to do so wrote my own game in my spare time, which became so popular in class the teacher forbid us playing it anymore.

The responses I usually have gotten so far is something along the lines of “My job description is to write foozle for platform fizzle” but with broken, misspelled english that took 30 seconds to get a 5 word response to. So I always wind up asking again “That’s fine, but that’s not what I asked. What I asked is…” Sometimes I wonder if it’s them or if they just don’t understand my English.

Another one is “Please describe some data structures to me, and give me as much information as you know.” The response, a minute later will be “List, array, queue, tree” but misspelled. I sit there… and sit there… and eventually ask “Is that your complete answer?” When pressed, they seem to eventually give me the information I want. I’m not sure what the problem is. Maybe they are looking it up online? But if they were, why would it be misspelled?

On the other hand, if I ask something like “What does the friend keyword do in C++” they usually give a pretty good answer right away, even better than I would have thought of. I think it’s something they memorize. Unless they are looking that up online too.

Maybe I should just stick to phone interviews.

At least he aims high

Friday, October 13th, 2006

[Email Interview excerpt. In Question 1 I ask the applicant’s yearly salary requirement]

[Insane Indian] wrote:
> Respected Sir,
> answers of ur questions.
> 1. I wrote preveciously 70000-120000 Us $ P.a.
> 2. yes i have good internet coonnection but not for whole day.
> 3. i have personnel computer & i have visual studio6.
> 4. thuis is my personnel.
> 5. igive myself 4out of 5.
> 6. yes ican.
> 7. yes i can.
> 8. little bit tough but i try to manage.
> 9. no.

[My reply follows]

I’m sorry but I have to ask, are you serious? You are applying to a job, not the lottery. According to your resume you have no professional experience, no hobbyist experience, no qualifications, you couldn’t follow simple instructions in the job descriptions, you have no code sample, and you want $70,000 to $120,000 in US dollars? Whatever your teacher told you was wrong, maybe when you were taking notes you accidentally wrote an extra 0. With what you’ve already shown me you’d never be hired for any price. But lets ignore for the moment your bad spelling and grammar, total lack of qualifications, and disregard for the job post. A junior programmer in the US 95% of the time STILL wouldn’t be able to find a job in the game industry at all. If they did, they can expect between $40,000 to $60,000. Since you are not in the US, but India, you’re looking at between $5000 and $10,000. Considering that this is a telecommuting position, you can knock another 20%.

Consider this one of life’s hard lessons. You can thank me later.

Resumes part 2

Wednesday, October 11th, 2006

What the hell is with Indian job applicants? Out of about 300 resumes so far (of which 0 included the information I demanded) I replied to all 300 of them. In every case I used the exact same form letter, because in every case they didn’t include the required information.

Of the 300 replies I sent out, I got about 30 responses. I have to wonder what is seriously the problem here.

A. You apply to a job. Admittedly a job post you didn’t read, but lets assume you are looking for a job since you bothered clicking the mouse to apply to one.
B. The company replies a few hours later asking for some information your resume was missing.

Do you:

1. Ignore the company
2. Send the required information?

Well in the case of these Indian resume spammers, 90% of the time it’s 1. Ignore the company.

Now I don’t particularly care that they ignore me. So much the better that I don’t get some idiot that can’t 1. Read. 2. Write. 3. Follow simple instructions. But I’m really just curious. What is it about my response that causes them not to reply? I’m not asking for sexual favors here. I’m asking for

1. Salary requirements
2. Availability
3. Contact information

What job wouldn’t need this information? A few geniuses replied “Negotiable” or “Per your standards” to the salary requirements. OK, great! I’d like to pay $1 a year so how’s that? Not good enough? Well don’t waste my time and don’t try to get me to name some outrageous sum and state your salary requirements when directly asked.

There’s another word that isn’t in the Indian english vocabulary. “Must”

Lets look up “Must” in the dictionary:

1 a : be commanded or requested to

To be commanded to. Such as “You *** MUST *** include salary requirements and sample code.” It doesn’t mean “You can include this if you want to” or “You can reply to other parts of the form, ignoring these parts” Yet this is exactly what I get, where some doofus will reply, answering contact info but leaving those fields blank. Why even waste my time?

Another thing. I thought Indians were hardworking. A few applicants even got so far for me to bother sending a sample test, with questions like “What is a Vector” Yet I haven’t gotten a single answer back to the sample test. Is this hardworking? It seems like the height of laziness and apathy to me. Personally, I’d be excited if I applied to a company and they sent me a sample test. It means they are intersted enough to bother grading my work.

It’s just wierd. Sometimes I feel like I’m in an episode of the Twilight Zone.

Resumes from the other side

Wednesday, October 11th, 2006

This morning I posted a job on Naukri.com, a general job site for Indians. It is $50 for the most expensive single job post, which is still 1/7th the price of posting on Gamasutra. I always hear that Indians work harder and cheaper than Americans so it was worth a shot.

When I got home, I saw 88 replies in my job inbox. Great! I thought, until I started reading them. The way it worked out was that my job post has an “Apply Now” button that allows a user of that site to send you their resume. Which is utterly worthless. As far as I can tell these guys just went down every job on the site, rapidly clicking “Apply Now” without even reading the job posting.

I have specific instructions in my job post on what you must include to apply to the job, and not a single spammed resume included all the information I asked for. Normally I’d just delete those resumes but if I did that I’d have no resumes at all. So I just spammed back a form letter indicating that if they want to reply to the job they need to include the information I asked for.

This has given me insight into something I knew, but didn’t consider to this extent before. Spamming your resume to employers gives the impression that the potential employee doesn’t care about your job. Nobody wants to hire a potential employee who doesn’t care about your company or what the job actually entails. Conversely, if I were to actually get a resume that shows the applicant read the job posting and is actually applying to my job they’d already have a foot up over all the other canidates.

What this does is to push the work from the employee (applying to jobs they are qualified for and including the information the company wants) to the employer (to filter through spammed resumes to see who actually has this information). Well sorry, but do I really want to hire someone too lazy to read a job description at a company they are asking to pay them?

Some choice quotes, from the few applicants that actually even bothered to write a generic cover letter:

“Currently i am looking for job in a company like yours where can i explore my potential.”
Um, thanks. A company like mine, and every other company on earth.

“I am a BE in Computer Seience.I have enclosed my Curriculum Vitae for your consideration. ”
But obviously not a degree in spelling.

“I have attached my CV for your kind perusal. Please do the necessary. ”
If by necessary you mean hit the delete key, yes I will.

“I came to know about u r company through website.
I send my resume by attachment. And I request u to go through my resume.
And I hope having response from u. ”

I will reply to u as soon as u learn to write English.

I will hire the first person to reply to my post who actually read it!

* Update *

So I got some replies to my form letter demanding more information.

Thanks for your interest in working for Jenkins Software.

As per the job description, you *** MUST *** include:
1. Your resume
2. Contact information
3. A link to self-contained sample code
4. Your salary requirements in US dollars
5. Your work availability in Pacific Standard Time

If your cover letter does not include these five items your application will be not be read and you will not be considered further.

One reply was a blank email with a spam image link.
One reply was the exact form letter the guy sent me in the first place.
Three replies didn’t include salary requirements.
No replies gave the information I asked for.

Is this a language thing? What part of my reply is not clear?

On top of that, a couple of replies with salary information asked for nearly the same wage I pay in the US. From guys who are completely unqualified, with no experience at all in any industry, much less the game industry. What the hell? I wouldn’t even pay a guy in the US what they are asking for much less hire them to begin with.

I’m getting the feeling this was a waste of time.

Performance based bonuses

Monday, October 9th, 2006

One problem with a business that hires telecommuter is that telecommuters are harder to keep motivated and working. It’s harder to tell if someone is working and an instant message isn’t as big of a motivator as the boss coming by and giving you a pat on the shoulder. To be clear, I’m not one of those kind of bosses to stand over your shoulder and watch you work. If you have nothing to do, hey go kick back. If you aren’t in the mood to program and want to take a couple of days of rest, please do it. If you work in crunch, 7 days a week, for 3 months and want to take a week or even two to play games you deserve it (I did this myself at my first job). What I do want to avoid is the guy who get paid on Friday so routinely works on Thursday and Friday and no other days. Or the guy who works one month out of a 9 month project (this also happened at my first job).

You can avoid much of this problem with due diligence. I believe that bosses should stop by the worker’s desk every day and ask “How are things coming along? Are there any questions I can answer? Any problems I can help you solve?” Speaking from personal experience, this is not seen as micromanagement but as a lead helping you do your job.

You can also avoid the problem by hiring self-motivated people to begin with. The problem I described is far less prevalent among educated professionals but all people need a boost from time to time to keep them going in the right direction.

My business owner friend suggested using performance based bonuses every paycheck. Paying either weekly or bi-weekly, you monitor the employees performance on a day to day basis. Based on their performance, quality, and drive that day you give them some kind of rating. When it’s time to pay, you say something like “You hit these three goals and wowed me on this feature. I’m going to throw in a bonus of X dollars on top of your paycheck.” The important thing is not to do this so often that the employee takes it for granted (at which point it’s a negative not to give a bonus rather than a positive to give one). It’s also important to avoid the appearance of unfairness or favoritism. So it should be clearly cause and effect. “I scheduled you to do X in 5 days, you did it in 3 days. That’s really impressive. I’m going to throw in a bonus in your next paycheck. While I won’t give you a bonus every time you beat a deadline, I am this time and as long as you work this hard the rewards will keep coming.”

Similarly, my friend suggested starting new employees at a slightly lower pay for X months. The problem with most people is that their enthusiasm wanes after a month. I’ve seen this when I managed reviewers who do a great job on their first review, an OK job on their second, and simply not do the third. A new hire costs you a lot more than an existing hire because of training. So it’s fair that they make less at first and fair that they make more after they have proven they can work over the long haul. It’s a way to keep costs down from bad hires as well as is an incentive to work harder. It’s similar to a regular rate of promotion, except it’s performance based and shouldn’t be expected.

Quality = numRevisions / iterationSpeed;

Friday, October 6th, 2006

One problem I’ve always had at my current job is trying to get work done on the poor hardware made available to us. On a regular basis I encounter:

  • 10 seconds lockups to open a new file
  • Compiler crashes
  • 15 seconds to open firefox
  • 1 FPS in debug
  • 10-30 seconds to bring up the visual assist file index
  • 5-12 minute compiles, even with Incredibuild
  • Something like 50 KBPS on our shared internet connection

The problem is twofold: First, you lose the time actually spent waiting. Second, because it’s so distracting you may lose your train of thought and go read The Onion instead. Because it takes so much longer to make changes, you have fewer iterations of the code total. This discourages experimentation, reducing the final quality of the code.

Lets look at the same problem for artists. You ever notice how old games are often more fun than their modern equivalents, despite the old games having a minuscule fraction of the budget of their modern counterparts. I believe this is because of the large iteration time involved with changing assets and code in modern games.

Suppose in my 3D level I have a small town. It turns out the town is the funnest part of the level, with places to hide and more strategy than the surrounding forest. I want to add 4 more towns. In a modern 3D game this is a HUGE amount of work. Man-months by several level designers. In old games, it may be as simple as clicking on the town tile, setting a couple of properties, and trying it out. Suppose it turns out now that 5 towns total wasn’t fun – we should have had 2 instead. Again, with the old game it’s a 5 minute job to adjust the map. In the new game this takes several weeks (have to place trees in place of the old town). Plus, due to the sunk cost fallacy, we may leave the towns in anyway just because it was so much work to put it in in the first place. Maybe rather than removing them the artists just tweak them a bit.

This is why in shooters you don’t see fun levels like in the original Doom anymore. In the original editor I could move a wall in a couple of minutes. In a modern level, this takes 10 times as long.

Fortunately, I think there are ways to mitigate this problem.

First, there is absolutely no excuse for not always working on top-of-the-line equipment. Suppose an employee loses 10 minutes a day due to hardware. This is roughly 40 hours a year, or one week’s pay. At least at my wage this is the cost of the absolute best computer on the market. I currently lose about 2 hours a day due to hardware.

Artists should create levels using only the default Maya objects. Trees should be pillars. Mountains should be triangles. Walls should be cubes. The game should be playable and fun before ever creating a detailed asset. Some final work can be done of course. For example, the character’s model is far less likely to change than a level layout. So it’s not like you have idle artists. Just keep the things that will probably change flexible.

Gameplay programmers should either have a way to very quickly change and link code (such as linking with DLLs) or else use debuggable scripts reloadable at runtime. If using code, it is critical to have a mechanism to change run-time values at run-time, such as debug command console.

Anyway, as I’m soon going into business for myself I’m going to put these ideas into practice.