3 weeks ago, I started working at Avigilon. I wouldn’t say I was terribly excited about returning from Europe to go to work, but still, it turned out quite well.
If you haven’t heard, Avigilon is one of the (or the?) fastest growing tech company in Canada, having IPO’ed less than 2 years ago at $4, and is now at $18. I thought it would be interesting to try working at an exploding semi-startup instead of a big well-established company like NVIDIA.
It’s definitely different. Very low overhead operation, with all extremely talented people.
For example they just got an HR department couple months ago apparently, when they were at around 200 employees (doubling every 1.5 years or so). How do you run a 200 people company without an HR department? I’ll probably never get to find out. The HR people that showed me around were REALLY nice, like, nicer than regular HR niceness. Maybe they will become less nice once they are more experienced?!
Benefits are OK. Pretty standard. Nothing really stands out, but also not terrible like NVIDIA (a 7000 people office with no gym… really?). No cafeteria, which is slightly annoying, but being in the middle of Yaletown means finding food is not really a problem. Finding CHEAP food is a bit of a problem, but making full time engineering salary makes it slightly less of a problem =P.
Coworkers are nice and very helpful, but the work is quite intense.
It’s definitely one of the most complicated codebases I have worked with. Plenty of templates, crazy inheritance hierarchies, different types of smart pointers, and thousands of classes. Lot’s of abstraction and polymorphism. I’d say it’s pretty clean, and people really know what they are doing.
As an aside, from what I heard, out of the people that have already been through resume-filtering and test-filtering (there’s a written test) that they interviewed, they only end up hiring about 1 in 5. Pretty happy that I made it.
On my first day, my supervisor drew me a class diagram of the subsystem I’ll be working on first. I have never seen someone draw UML diagrams that fast.
20-30 classes, plenty of abstract base classes and complicated dependencies, and inheritance chains 6-7 classes long, in about 15 minutes, while explaining and answering questions the whole time. Impressed.
My first task was to port someone’s big change (20+ files) on an older system to a new system, that is being majorly re-architectured and re-written at the same time, while I was trying to figure out the code structure. I would spend couple hours figuring out how a big subsystem works, and then be told that it actually won’t exist any more once he pushes his latest re-architecturing changes into the master repository, and that I have just spent hours integrating changes into the part of the code that’s going down the drain. That’s fun.
It’s nice to finally feel challenged at work, and be learning new things instead of just applying things I already know over and over. A lot of opportunities for exploring, and things to get creative about. Happy.
Working on this kind of projects require a very different set of skill compared to working on things like school projects, where you can be intimately familiar with all parts of the program you are working on. In large scale developments like this, no one is intimately familiar with more than a few percent of the code, and they still have to be able to contribute effectively. It’s something I am getting more and more comfortable with, and this time, it only took me about 1 week to get more or less up to speed (vs 1 month at Capcom, where I had my first insane-codebase experience)! Need to be able to recognize many design patterns, and be able to guess (correctly) how things work just by looking for those patterns. It’s something they don’t teach in school, and I don’t think they really can, but it’s very useful.
People wise, it’s a very work-intensive place and people don’t joke around or even talk much, which is an interesting departure from the kind of work environments I’m used to, but I think I’m getting used to it.
Management definitely has significant amount of presence. There’s a pretty well-defined management structure, and I’m not too sure if I like that, but it clearly works for the company.
Also a lot of PM, almost to the point that you’d be spending more time creating tickets and coming up with time estimates, than actually writing code. That’s pretty annoying, but at least they are nice people.
Now the fun part – the run club I just joined. There are about 20 HR, sales, finances, and marketing people… and about 3 engineers. I don’t know if it’s because engineers are too busy to exercise, or not many of them can run 10 km :P. It’s also interesting that it’s mostly girls (they are INTENSE!), when the engineering department is about 98% guys (I’m PRETTY sure that’s not due to discriminatory hiring practices). Nice.
Overall, pretty happy! Don’t know what’s my next step, yet. I want to go back to school to do masters in CPSC some time. Not for financial reasons – I’m pretty sure I won’t be able to get the money back, but because there are so many interesting things in CPSC that I’ve yet to explore. Maybe in couple years? In the mean time, I’ll have some fun here!