Archive for the 'Work' Category
Considering offers? A checklist in alphabetical order

Every offer you get will include some details and omit others. To perform a proper comparison between multiple offers and reach a good decision, you’ll need all the details for all offers. After numerous back-and-forths with several companies, I composed a checklist ideal for anyone on the verge of deciding the next stage of their career.
- Benefits
Medical, dental, vision. Yes, you’re young and healthy, but root canals are much more painful when you’re paying for them out of your pocket. - Bonuses
Sign-on bonus, moving bonus, refresher bonus, performance bonus, yearly bonus. Some companies have them, others don’t. This affects your “total compensation” per year. - Career opportunities
What positions are available in the event that you earn a promotion? What is the procedure for promotions and raises? Some companies require a strict number of years of experience or qualification before you can reach specific positions. - Equity
Stock options and restricted stock units are two that I’ve encountered. Find out the vesting conditions (when the stock actually becomes yours), and more importantly find out its value. For publically traded companies you can look up the value of each share, but for private companies 100,000 shares means nothing if you don’t know how many shares there are in total. Ultimately, you want to find out what portion of the company value you are getting in the event that there is a buyout. Large and VC-funded companies will usually have less stock floating around for new hires, while smaller privately-funded companies will usually offer more stock for a lower salary. It’s up to you to determine how much you think that company (and thus, your stock) is worth.
I highly recommend reading Venture Hacks’ writeup on considering offers from startups if you find yourself in that boat. - Hours
What is the company culture regarding the number of hours they’re expecting you put in? Is it a 60hr/wk sweatshop, or do they not care how late you stumble in and how early you bust out as long as your work is getting done? - Leaving
You never know when your life might change and you have to jump ship. Keep an eye out on leaving conditions and consequences, such as having to pay back your bonuses. You don’t want to find yourself in unexpected debt. - Perks
Free lunches, gym access and trainers, public transit pass, housing assistance, commute shuttles, relocation assistance, company events, corporate discounts. They don’t pay the bills, but they don’t get taxed and make you a little bit happier even if you refuse to admit it. - Salary
This is heavily proportional to the location and its cost of living. Your salary is worth a lot less in California than it is in Seattle where the cost of living is half, and there is no state income tax. - Starting date
How flexible is your starting date? - Telecommuting
What is the policy for working from home? What about workign abroad during an extended trip? - Title
You might not think it matters right now, but it matters to your career. That, and salaries are often proportional to your title. Find out what positions are available in your branch of specialty and figure out what bracket they’re offering you. Big tech companies often have things like Software Engineer Level 1 (new graduate), Level 2, etc. - Vacation
How many days of vacation per year? Personal days? Sick days?
What did I miss?
5 commentsEmployment status: differently abled

Today: My final day of work at Idée Inc. I wrapped up documenting and handing off my projects, returned my key and notebook, cleansed my hard drive of incriminating evidence, and headed off with my co-workers to celebrate my departure by consuming unhealthy quantities of delicious sushi at New Generation Sushi on Bloor. Tea, rolls, teriyaki, and dirty jokes were had by all, suffixed by ice cream and a heartwarming going away card.
Two weeks ago: I declared my intent of resignation. I learned freighter-loads of knowledge-units at Idée, especially in the first several months, but I realized that my growth has plateaued and it’s time to move on to a new environment which will yield novel challenges and new experiences. It was hard saying good bye to everyone, especially knowing that I will be back on Wednesdays and Fridays to mooch Idée’s free food and beer. I met great people and formed important friendships, and I’m not abandoning that!
What now: Take some time and indulge in my interests which were not discarded but merely supressed by my dive into adulthood. I will focus more on contributing to open source projects, such as those I’ve started in my free time while being employed (workerpool, s3funnel, urllib3) and those I use on a daily basis which hold a special place in my heart (PIDA, Pylons, Gentoo, and KDE). Maybe I’ll also dabble in some game development.
Alas, sooner or later, bills will start piling up and I’ll have to seek new employment, or at the very least some freelance/contract work. So tell your friends and neighbours that a Python ninja (and Javascript slayer by night) with wicked webapp and database experience is available for hire.
4 commentsMisconceptioned Memcached

You’ve heard of memcached, haven’t you?
Made by Livejournal to sustain millions of angst-ridden teen diaries, now used by web giants like Slashdot, Digg, Wikipedia, Facebook, Youtube, and countless more. Even this very Wordpress blog supports it.
The same misconception seems to haunt all those unfamiliar with the memcached: it’s some sort of magical layer that sits between your database and your application layer, and somehow it makes things faster. The magic is scary. How would something know what it needs to speed up from the database? It must require all sorts of nasty configuration, all sorts of nasty corner cases to cover?
Admit it. The thought of using memcached terrifies you. Well, I have good news for you: That’s not what memcached is. Are you read for it?
Memcached is a hash table.
No, seriously. It’s that simple. It’s a hash table that sits in memory, that can scale between multiple servers. All you do is launch the memcached daemon on your server with memcachedand you can use it!
“Well obviously that’s not all there is…” you say. It is! As far as the server is concerned, that’s all the configuration it needs.
Now, the client side…
How does the hash table work? It’s just like a dictionary. To save data: you send it a key/value pair, and it saves it. To retrieve data: you send it a key, and it gives you the value. Explicit. Simple. Efficient. It supports a handful of simple operations like set, get, and replace.
Here’s how to use 3 distributed memcached servers to cache a huge query in Python:
import memcache ... cache = memcache.Client(['192.168.1.100:11211', '192.168.1.101:11211', '192.168.1.102:11211']) ... def get_post(post_id): "Return data associated with post with given post_id" result = cache.get(post_id) if not result: # No cache, perform potentially costly SQL query result = model.Post.get_post(post_id) # Save result in cache for next time cache.set(post_id, result) return result
Do you see what they did there?
Yes, it’s not magic. Yes, you have to cache things explicitly. Yes, this is incredibly powerful. Now go. Go make a Slashdotting-proof web service, that’ll show them.
1 comment
