Categories
Uncategorized

How to motivate with challenging assigments

I can’t remember the URL but I read an article a while back the work programmers hate the most is work that is random. Random work is work such as fixing other people’s bugs, trying to figure out other people’s code (esp. undocumented and/or difficult to test), and problems with no clear specifications, direction, and/or solution. This is why many programmers reinvent the wheel. Although it’s often a time loss to do so, it’s much preferable to solve a known problem with a known solution and make daily progress than guess at something that may or may not do what you want.

Probably after random work would be busywork, or work with no especial benefit or use. It’s not the work in this case but the lack of importance of what you are doing.

Conversely, programmers like challenges, especially when the challenge is important. This is why lead programmers work hard. They feel important (because they are responsible for important things), they are given challenging tasks, and the work they are given is usually time and mission critical. It’s not really because they make more money. It’s true that money attracts workers and it’s important to pay enough so that workers can live comfortably. However, what retains workers is rewarding work. Programmers enjoy working on interesting, important problems. Creating this enviroment will give you far better retention and enthusiasm than just paying more money.

The same task presented diferently can get different results. Saying to a senior graphics programmer “You have two weeks to write the grass waving system” is guranteed to demotivate and the first week will be spent on Slashdot, especially if it’s something they solved before with no new challenges. Saying to a junior graphics programmer, or a non-graphics programer, “You have 3 days to do the grass waving system. Here are some resources to get you started” will be an exciting challenge with an opportunity to learn, especially with someone more senior available to ask questions of. No deadlines, or deadlines too long, is just as bad as deadlines that are too short. Deadlines present a challenge to get the work done in time, which motivates one to work.

This is why I try, when giving assignments, to remove as much guesswork as possible with clear specifications, descriptions of intermediate steps, and a justification as to why the assignment is important. It’s very important to be able to provide a constant line of communication, help, and answers to people working. Not doing so leads to guesswork, which is random, and hence annoying and demoralizing.

Incidentally, it’s also why I’ve finally figured out why I hate a new contract I took so much. It pays very well. Until today I couldn’t understand why I would feel literally sick to my stomach to work on it. I was assigned to create a facade design pattern to undocumented spaghetti code, on a platform I never used before, with little communication or support, using primitive tools. On top of that, when I do ask questions, I’m ignored half the time, making me feel I am not important. The work is essentially random – spend a lot of time to make a guess, repeat, until I figure out the system, then write the facade. In the end, it may not work anyway. It drains away my enthusiasm to work at all, including on my own game.

Categories
Game Development

Got a new programmer, but perhaps not enough

Funny how things work out. I contacted the contractor MIA and he just quit voluntarily. Then I had a mid-level programmer apply suddenly and get hired pretty much the same day.

Looks like about 6 months of full-time work left if I were to do the whole game by myself. I think the mid-level programmer can cut that down by 1-2 months, and the junior programmer possibly by 1 month. The graphics programmer might save some time if he finishes the effects early and helps implement the effects in gameplay. It would probably average out to 3-4 more months of programming, less the week already spent.

One thing I’m worried about is that simply finishing the game in 4 months is only a part of the whole process. Ramping up from 1-2 people during development to supporting 10,000 players is definitely non-trivial. Another thing is that good gameplay never comes out of a closed cycle. Only through beta testing, iteration, and feedback from the community. In the optimal situation, I would sit on the game in closed beta for 6 months. I have a suspicion that is going to happen anyway. There’s no point to releasing before the game is saleable. But that’s a bad thing, since it will essentially double the development cost. It’s going to be tough to figure that one out.

Categories
Game Development

Need mid-level to senior people

My original plan for programming was to do most of the game work myself and have some junior programmers help me out to make things go quicker and take care of the small details.

This actually wasn’t a very good plan, because as I fill out the schedule I find that tasks can be categorized by the skill level of the programmer needed to do them correctly. Some tasks can only be done by me, some by any senior programmer, some by any programmer with gameplay experience, and some by junior programmers. My original schedule was to take the raw total hours, divide by 4 (the number of programmers) and figure out how many months that is. But that won’t work because most of the tasks are senior to mid-level, meaning with the people I have right now only I can do it correctly, meaning that I’ll never finish in the 3 months allotted.

This wasn’t total naivety so much as that I had never worked with any truly junior programmers before until now. When I thought junior I thought of my own skill out of college, which actually was mid-level. So in essence, the programmers I hired up to this point, except the lead programmer, aren’t really going to speed up the schedule.

The smart thing to do at this point would be to dump one of the junior programmers and hire 1 senior programmer and possibly 1 mid-level programmer. I’m not so cold-hearted as to just fire a junior programmer for no reason and will just go over-budget if I have to. However, the problem may resolve itself naturally.

Categories
Uncategorized

Another contractor MIA?

This might be premature but I’m getting nervous about the second contractor I hired. Other than an hour or so the first day, he’s been missing in action (about 3 1/2 days now). About a day and a half ago I sent him an email he didn’t reply to either. Normally I would not care if a contractor was offline for as long as two weeks. As long as they get their work done in the end that is fine. But for someone who just started I’m not sure how they will work out yet. To simply disappear makes me wonder if they are working, if they decided they just don’t like the job, if they are having computer problems, or what. I made a mistake in giving him his first task with a duration of two weeks. If I knew his work ethic it would be OK but for all I know he could wait until 2-3 days before the deadline and then start, doing the work at the level of quality that would take 2-3 days to do, rather than 14 days needed.

I might be totally off my rocker here. Perhaps his internet is down, he is only online when I am sleeping, simply has no questions, didn’t think a response was required from my last email, and/or is planning to crunch his time on the weekend. I got the impression he was very professional during the interview so I feel a little more confident because of that.

In any case, I have a lot more appreciation for the difficulty of putting together a good team. It takes time, money, and skill to find the really good people.

Categories
Game Development

First firing

I’m feeling really bad because the first contractor I hired for my company is turning out to be untrainable. I have no recourse at this point but to fire him and find someone else. Part of me feels shamed for taking this guy away from his current job and then having to fire him right away. Part of me embarrassed – how crappy of an interviewer can I be to hire someone like this?

The straw that broke the camel’s back was when after 4 days of just trying to build the game, he told me yet again that it wouldn’t run because of missing DLLs. I’ve told him to copy the DLLs at least 5 times, and have walked him through that exact problem twice already. Honestly, I shouldn’t have had to tell him at all. The game is still in its infancy, there aren’t that many directories, and if you were to just open the 3rdParty directory you would see a DLL directory right there. So I told him “Copy the DLLs from c:\engine\dlls to your game directory” He said it still wouldn’t run with the same missing DLL problem. So I told him where to click, how to load a DOS prompt, what to type, how to copy/paste from the DOS prompt, and to give me the output of the dir command on that directory. Sure enough, the DLLs were not there. I got exasperated and (still politely) asked him if he really had the two years of experience he claimed during his interview, because one of those years he claimed was on Windows and even non-programmers should understand how to copy files, especially if told the same thing 5 times over 4 days, even including written setup instructions.

Earlier that same day he complained to me that he didn’t have permissions to check out files when I asked him to download the latest from source control. He didn’t have permission because two days ago I had to remove his permissions because he kept checking out the entire source tree exclusively. Eventually, although it took 4 days, I realized he didn’t understand the meaning of check-in, check-out, get latest, etc. He didn’t know how to use source control and never bothered looking up the terminology or reading the help, despite the lead programmer and I telling him 5 times to stop doing exclusive checkouts. I mean come on, if someone is telling you over and over not to do something, and you don’t understand the words they are using, maybe it makes sense to ask or to look it up. The information is out there.

After writing all that I feel annoyed enough I’m not so shamed anymore. I think the reason I hired him is because he was still so much better than the other 700 candidates before him. Even quartz looks good to a diamond hunter if they are in a coal mine. At least he could sort-of speak English, could sort-of answer questions, and claimed 2 years of experience. Because of the last point, I gave him the benefit of the doubt, which turned out to be wrong.

One on hand I could say the lesson I’ve learned is to be a hardass and to reject anyone at the slightest hint they might not be suitable. But that’s not really the case – for example my lead programmer is great and yet I didn’t get an overwhelming feeling of how good he was during the interview. It was too hard to understand him so I couldn’t cover technical questions very well. It’s questionable if I would have hired him for lead programmer if I didn’t give some benefit of the doubt. Maybe the lesson to learn here is when hiring in foreign countries, it’s best to have someone there on-site to help you, because without an understanding of the culture, language, and technical terminology they use (including degrees) it’s hard to judge talent.

Categories
Uncategorized

Got a great lead programmer

On the very last day of hiring I got a job application from someone who claimed to be a lead at nVidia. The interview went well and while he was a little hard to understand, I was really impressed by his motivation and his resume. So I gave it a shot, even though he was 3X more expensive than my other programmers.

It turns out this was the best decision I’ve made so far for the company. He is professional, knowledgeable, and incredibly helpful. I now have a resource to turn to ask about about India and Indian resumes and have a good feeling that even though I am not working, progress is still being made on the game.

I can see now that my previous attempts to save money by hiring juniors may have been a mistake. 3X the cost but 10X the productivity is a good deal as far as I’m concerned. If I could do it again I would have skipped hiring juniors and had gotten 2 people with experience instead.

I may have to restart the hiring process, which will delay the game by a month, but it’s better that than failing entirely. I asked the lead programmer if he knew anyone else as good as him looking for a job but unfortunately he didn’t.

Categories
Uncategorized

Already made a mistake with my company

I already made my first mistake and have only been “open” for business 1 day. The first contractor that I hired is turning out to be incompetent the same way as if I gave a compiler to an artist. I don’t mean this in a deragatory way but just in a factual way. He wasted an entire day of my lead programmer trying to connect to source control and learn how to use MSVC. Then he checked out every file in the project for exclusive access the 4th time in 12 hours (and leaving it that way), after being told not to 5 times between me and the lead programmer, not just in email but even on the phone. After this last time I had to take away his checkout permissions in source control so the other contractors can work. I don’t think my explanations are unclear or he is intentionally doing wrong. I think it’s just a matter of gross incompetence, lack of experience, and an unwilliness to admit it. It’s like if you hired a pilot to fly you around and the pilot you hired doesn’t even know how to drive, much less fly, yet really wants the job so just putters around the runway, very eagerly and enthusiastic perhaps, but not someone you’d want to risk your business on.

I feel that the failure of a worker is the failure of a manager to motivate and train properly. However, I’ve been honestly doing my best – very polite, patient, careful to explain clearly, trying to motivate. It’s not working and I’m privately frustated enough now to write about it here. I think with 6 months of training he might be made productive for junior tasks. However, my whole project is only 3 months long and it’s not like I have money to spare paying someone to learn how to program, starting with basic computer skills such as copying files.

I think the obvious resolution is the right one to take if he doesn’t shape up within a few days. I feel really bad about this though because he quit his job to work for me and is putting in a lot of hours to try to do right. You can’t blame someone who is trying right? But I can’t afford to pay someone who can’t accomplish any work and who takes up the time of those who are working.

This is my fault for not using effective screening techniques to begin with.

Categories
Uncategorized

Starting my first game company

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.

Categories
Uncategorized

Outsourcing is just supply and demand

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).

Categories
Uncategorized

Successful interviewing tips

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.