My first week was mostly spent digging deep into the code base. It's large and complex and it takes a lot of digging to really understand it. In addition, because of it's age, it's been through a lot of hands, each with their own ideas of design and architecture, so the code is typical for that kind of history. Lots of little gotchas and false paths, lots of dead-end code paths, etc. Nonetheless, I'm finding that despite its warts, I'm really liking having a code base that allows me to really do some complex stuff without having to write all the infrastructure from the ground up. Most of the pieces I need are already there - it's just a matter of finding them =)
Early last week I think I got past the initial "huh?" stage of dealing with a new codebase and started to contribute and really think about how to do the tasks I've been given. As is typical in many game projects, the initial design is relatively fluid and not only am I dealing with a set of tasks, but those tasks can change quite frequently. Luckily, I'm somewhat used to that, and once I realized that the project design was fluid, I adjusted my mindset and working habits to accomodate that.
So much of last week was spent not really writing a lot of code (and what I did write, I ended up throwing out), but instead hammering out the design, and figuring out how to rearrange tasks given some new design changes. Turns out that my initial task of rendering, designing the data structures, and handling NPCs didn't make a lot of sense given some of the design priorities that weren't understood initially. Originally, the plan was to make the NPCs a certain way for optimization of data and rendering speed. But, for various reasons, that way wasn't flexible enough, and so the plan was scrapped and NPCs will now be done a different way. This actually made things a lot easier for the engineering, art, and design departments, but, of course, there's always tradeoffs, and we'll have to work hard to optimize them in different ways now.
Also as part of my initial foray into the codebase to figure out how to render NPCs in the new way, I learned a lot about how this rendering system currently works. There were more tasks to use a new system to render PCs with various shaders, texture pre-compositing, etc that were assigned to another engineer originally. But since I now understood that section of code pretty intimately and he hadn't gotten to that task yet, we moved the task to my plate. So I'm currently working on texture-compositing, blending, and rendering of all Sims (NPCs and PCs), both in-game and in the Create-a-Sim portion of the game. This is pretty exciting stuff for me and I'm digging in with a vengeance. As of this morning, I have a first stab at doing all of that in-game, but haven't been able to test it yet. I fully expect it to blow up and require more work, but at least the major initial portion and design work is done. After this, I have lots more on my plate, but so far this task is taking far less time than I originally thought it would, so unless I've made some major mistakes in the logic of what I'm doing, I'm ahead of schedule right now.
So far, this has been exactly the challenge that I needed in my life. I realized last year when I was buried deep in the coding for the game programming class that I had found my niche. Nothing I had ever done before in programming challenged me like that code, or held my interest so much. I was hoping that moving to a new codebase wouldn't take away that challenge and ability to do complex, interesting code. My worries were unfounded though, as I'm definitely feeling challenged here. I'm not feeling overwhelmed, though (most of the time anyway), so I'm achieving that fine balance between being challenged and being overwhelmed. I can certainly say that I could never have done something like this without writing my own engine and game code first, though. Everything I learned doing that I'm putting to good use here.
In many ways, the shiny new-ness of the job is wearing off. It's feeling more like any other coding job in some ways, and that's a good thing. I'm not doing unfamiliar things or totally revamping my working habits or thought processes. Things are familiar enough that I understand enough to fit in and be quickly productive. But in the important ways, the subtle things that were making me so damn unhappy in my previous jobs are different. I'm working on something that I can really, truly enjoy. Instead of making things that are just useful, I'm making things that people will truly enjoy. That's important to me, and one of the major reasons I've wanted to change to a career in game development.
The only thing that makes it not-so-good is that I miss my family. It's a catch-22 though. I want them here, but I also know that if they were, I wouldn't be doing so well in my job right now. If they were here, I'd feel guilty about not seeing them and that would just make us all unhappy. As it is, I can dedicate all the hours I want to doing well at my new career. Right now, that's critical, both to make a good impression (so far, so good!) and to really learning and becoming valuable.
So far, I've been dedicating a lot of hours to this. I took this last Saturday off, and the Saturday before that, I didn't come in to work until 5pm or so. Other than that, though, I've been here pretty much everyday from 9-10am or so until around 1-2 am (that's approx. 176 hours since May 16th, including today). And before people start crying foul, EA is not at all asking me to do that. Certainly no one else on the team is pulling anywhere near those kinds of hours that I know of, and that's a wonderful thing. I would be extremely worried about my future here if others were doing these kinds of hours. We're not in crunch mode by any means yet, and I suspect we won't be for a couple more weeks yet. Even then, it's a relatively short expected crunch-time (a week or two?) and then an estimated week or two of normal work hours and then a couple more weeks of crunch. I'm actually impressed with how well this project is being managed and scheduled. They're really prioritizing scheduling to make sure that crunch-time is minimized.
So much for the horror stories of EA, huh. Like the horror stories I always used to hear about Microsoft, everything depends greatly on what department you work in, and what projects you're working on. Things can go badly sometimes and when that happens, it gets stressful. Honestly, that's no different than the rest of the computer industry, though. Crunch time happens - again, just like the rest of the industry. But so far, I haven't seen any signs of the horrors that I heard (and read) about before coming here. Not having been through a full game development cycle here yet, I can't say with certainty how things are, but from everything I can gather so far, there's nothing to worry about here with respect to constant crunch time, etc. At least on this project, anyway. I can't speak for other teams - but I do know that when I go home at night, my car is one of the few left in the garage =)
I'm flying up to Seattle next weekend and I'm really looking forward to it. My son is testing for his next belt in martial arts, we're having dinner with a couple friends, and I'll get a chance to see my family again. I know, for me, I do very well indeed on a schedule where I can intensely focus for a week or three, then have a few days of down-time completely away from code. Not working on any side projects right now helps a lot with that, too. I'm starting to feel a little run-down, and I can tell I'm going to be really ready to see them.
Somehow during this, I also managed to find a place to live here. Currently I'm staying at a Residence Inn for a month (part of the relocation package). I've been looking at getting a room in a shared-living situation as well as getting my own place. The tradeoffs being that if I get a roommate, I can live cheaper and have a nicer place..but less privacy and I'd have to deal with roommates. Getting my own place is a little more expensive (mainly because of utilities and the fact I'll have to buy things like towels, plates, silverware, a bed, etc), but not terribly so. I would have all the privacy I wanted and could live on my own terms, clean up as I wanted to (or not), and not have to answer to anyone. In the end, I went with option 2 and found a nice little 1 bedroom apartment for $750/mo. The landlord is really great and it's less than a mile from work. It's a little far for a daily walk, but easily bikeable and it's a quiet location right near downtown San Carlos. I move in on June 15th. So, that's a load off my mind at least.
On the social side of life, well...ok, I don't have one right now. I've joined a mailing list and LJ community for some of my shared interests, and I suspect I'll eventually meet people. So far, though, I haven't had a lot of urge to get out and socialize - I'm enjoying my work too much =) I thought about going to Baycon this weekend, but on Saturday I just ended up doing errands and playing a game I checked out from the library here. I really just needed the downtime and going to Baycon would have been fun, but not relaxing.
I'm really enjoying Warhammer 40K: Dawn of War so far. While the gameplay is relatively standard for an RTS, there's a few new elements that add a fair bit of depth and the graphics are truly amazing. It's really, really FUN to just watch the Space Marines and Orks blow the crap out of each other. I suspect I'll get bored with it soon, like I usually do with RTS's after a short amount of time, but for now, I'm enjoying the game. I also bought Armies of Exigo from the company store (with some of my employee purchase points), but haven't played it yet. I remember reading about it, though, and I'm looking forward to playing it. In my copious spare time =)
I think that's about it to report about my life right now. Summary: enjoying the hell out of the job, spending all my time doing said job (on my own volition) because I'm enjoying it so much. Found a place to live. Missing my family and friends, but doing ok for now, especially since I wouldn't have time to see anyone even if they were here =) Feeling very, very fulfilled in life right now.