Recruiting and the Butterfly Effect

Everyone has heard of the Butteryfly Effect. (Maybe you’ve even seen the movie by that name – I’m sorry, if you have!). Anyway, according to WikiPedia –

“The Butterfly Effect is a phrase that encapsulates the more technical notion of ‘sensitive dependence on initial conditions’ in chaos theory. The idea is that small variations in the initial conditions of a dynamic system produce large variations in the long term behavior of the system.”

When a startup is founded, it is typically done so by a few friends. They’re like-minded or at the very least, focused on the same goal. They are also pretty good at what they do (despite the fact that most startups fail). Without me having to list a whole bunch of wonderful characteristics of this set of people, lets just agree that they all have some desirable characteristics. Not only that, but these folks make the bar that was set on the standard around these characteristics.

When this company grows to the point where they need to hire more people, they are extremely careful in making sure that they hire people like themselves. They hire all the new folks themselves, because they want to preserve the quality of the people that work with them and are like the “model-employee” (geeky, brilliant, marketing genius, a combination of these, whatever).

Being personally involved in hiring (interviewing – I use the term hiring to mean interviewing from here on) can continue upto a point – and then they can no longer do this. Already, because of the fact that no two human-beings are perfectly alike, they have no real model employees, just very smart people who have most of the desirable properties in sufficient amounts. Let us call this deviation from the model, d1 and label this set of employees who were personally picked out as wave-1.

The moment someone other than themselves start doing the hiring (wave-2 and so on), the deviations start compounding. This is because everyone in their mind creates a mental model of the ideal employee that differs, atleast ever-so-slightly, from what they understood was the “model-employee” from the people that hired them. This is inevitable – these are all smart people who are empowered to draw inferences and make decisions. We now therefore have wave-2 and deviation d2. Total deviation at this point is not just d2, but d1d2. If wave-2 starts hiring further employees, deviations start compounding – d1d2d3…dN.

There comes a time, when the total deviation from what was desired is now more than a tolerable threshold and things are different from what they were meant to be. This is a manifestation of the butterfly effect. This is because, in the end, everything (for eg. working at a company) can be reduced to the people involved. This is what probably happened to most large companies of today.

What is my conclusion? People with as low a wave-number as possible, must stay involved in hiring. You can not expect wave-Z folks with a deviation of d1d2*d3…*dZ to be able to hire people who are like wave-1 or wave-2. ThoughtWorks as a company is at times, guilty of doing this and I think a part of the blame is attributable to the fact that its growing too fast – it has become less feasible to apply this conclusion.

Of course, a lot of caveats apply – things change over time – models change and desirabilities change. But I think this hypothesis still holds good. At the very least, it is useful to recognize this phenomenon. To collaboratively create something that is as subjective and personal as “a great company” and to be able to stay as close as possible to this vision , it is imperative to keep people who buy-in and fit-in to the vision the most, completely involved in the inevitable expansion process.

Easier said than done.

SQLite with RubyOnRails

That was nightmarish!

All I wanted was SQLite working with Rails. That’s all. And it was quick and easy – on my Ubuntu workstation at home, that is. And then, began 2 hours of gruesome agony – as I tried desperately to get the damn thing to work on my RHEL staging box.

I only have shell access to this machine – so no fancy graphical package manager. If I had a package manager, I would have selected libsqlite0-dev (the missing item) as well as libsqlite3-dev just to be safe, and would have saved myself the afore-mentioned two hour hair-pulling.

Here are the steps to get SQLite working with Rails –

* Download sqlite from http://www.sqlite.org/download.html. Compile and install the usual way. Or just get the compiled versions.
* Install libsqlite-dev (both libsqlite-dev3 AND libsqlite-dev0-> AAARGH!)
* Download, compile and install swig -> http://www.swig.org/download.html
* Install the sqlite3-ruby gem
* Downlad ruby-dbi and follow instructions on http://ruby-dbi.rubyforge.org/

Everything should work now! I tested this with Typo 4.0.3 and it works. Phew!