Categories
Uncategorized

Handheld development sucking bigtime

I won’t specify which one, but I have a contract to work on a certain handheld and I have to say that working on it sucks bigtime.

1. Adding files requires editing a makefile.
2. Testing any changes requires running the makefile, then loading up an entirely different IDE, then waiting for the hardware to reset, and lastly running it (in total a 30 second process, as opposed to maybe 2 seconds to do the same thing in Visual Studio)
3. This different IDE is just aweful. First among the problems is that setting breakponits doesn’t work consistently. Sometimes it put the breakpoint on the wrong line, wrong file, and sometimes it doesn’t hit the breakpoint anyway.
4. Watches similarly don’t work right.

So I’m reduced to adding what amounts to printf lines and recompiling to try to guess why things don’t work.

Worse, the library has no documentation other than a few code comments in the headers. The comments themselves aren’t very helpful, with comments like
// Calls the Start routine for TRL
void StartTRL(void);

(Actual 3 letters changed but same scenario). What the hell is TRL? No idea. No where ever does it say what that abbreviation stands for. These kind of short abbreviations are all over the place too. In one case they abbreviated a 6 letter word to the first 3 letters, totally obscuring the meaning until had to ask someone else.

Furthermore, things just don’t work. For example, there is a connection routine which has to go through like 9 internal stages. It goes through 8 of them and then just sits there. Why? Who knows. Their sample works and I copy/pasted the relevant parts. My guess at this point is threading, because in another case if I add a delay it works, and with no delay it doesn’t get past an earlier stage.

I’m sorely tempted to just dump this contract immediately, because it’s wasting my time and taking time away from working on my own game.

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

Categories
Uncategorized

Space Empires 5 is boring so far

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.

Categories
Uncategorized

Hard time finding even decent applicants

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.