Sunday, January 22, 2012


If you really had the choice, would you pick cronyism over meritocracy?  Even in today's enlightened society, where productivity and efficiency are very desirable traits in both the public and private sectors, one can still find cronyism.  In my opinion, cronyism is the undesirable side effect of relying too much on who you know, or who knows you.

Many of us have heard that it is not as much what you know that gets you a job, but instead, who you know.  So we network to increase our chances of success when seeking employment.  Living in Richmond, VA, I can attest to this notion.  The Richmond IT community is very small and somewhat incestuous when it comes to employment.  It's hard to find someone new in our IT community that a 1st, 2nd, or 3rd degree contact has not at least heard of or knows outright.

I have had more success researching and networking opportunities through friends then applying coldly through an online job site.  In fact, online job sites are mainly used for finding the jobs.  Once the job is located, one is better off if they research where the job is and skip the online job site, or least follow-up through networking channels.

As long as a candidate is qualified for a position, checking his or her credentials through mutual contacts is not necessarily a bad move.  LinkedIn and Facebook have become the De facto method of choice for researching contacts.  In fact, my current position was the result of a LinkedIn search, followed by a check on me by a recruiter.  The recruiter looked at my LinkedIn profile and asked folks in her office if they new me.  Luckily, someone that she solicited feedback from not only knew me and my work, but was able to give me a good recommendation.  This all happened unbeknown to me, but I would still consider it networking, albeit anonymous and unsolicited networking.

While personal contacts are valuable, they are certainly no substitute for technical interviews.  However, I have witnessed numerous times where interviews are not even granted for candidates that do not pass the litmus test that anonymous networking has become.

On the flip side, this approach goes horribly wrong when it devolves into cronyism.  Cronyism is when a person exhibits unwarranted partiality towards a friend of theirs and places that friend into a job or other position of authority based solely (or mainly) on that friendship and not on what should be considered:  technical and cultural fitness for the position. 

I recently witness unbridled cronyism.  It was so blatant that it is both sickening and comical at the same time.  In order to protect the innocent (and the guilty) I will not name names here.  Suffice it to say that it was a commercial, C-level executive that passed on an otherwise very qualified individual, in order to satisfy a false sense of loyalty to a peer that was in fact instrumental in the cronyism.  This peer was another executive that was staffing an already ailing IT organization with only folks that he knew.  No one outside his circle of contacts had a chance.  This even went as far as involving HR to interview folks, while the executives knew all along that only candidates from within the so-called "inner circle" were worthy.  At the least this was disrespectful to the candidates that came in for a false interview.  At the most, it was immoral and possibly even illegal.  Plausible deny-ability would most likely prevent the latter from being true.

At the end of the day, the process is broken when cronyism is involved.  We have all witnessed it in the news, and we have frowned on those political figures that got caught in cronyism-related scandals.  Yet, this doesn't stop some folks from exercising their rights to compromise their own integrity and that of their organizations by participating in practices that they know are both morally bankrupt and, at the end of the day, counter intuitive to successful long term execution of human resource management and staffing.

These folks no longer deserve the mantle of authority and leadership that has so falsely been granted them.  If all is right in the world, this poor decision making will, in the end, bring the house of cards that was built so haphazardly, by embracing poor hiring practices, down on their collectively empty skulls.  Moreover, they will find themselves without redress when they have to explain to their management why they ignored qualified candidates to hire poor performing friends.  It may take a while for this to happen, but "nature abhors a vacuum", and equilibrium will be achieved.  One can only hope to be around to see the imbalance between stupidity and intelligence righted.

Thursday, January 12, 2012

Lotus Notes: One of the First NoSQL Databases - No Really!

Depending on who you talk to, NoSQL means NO SQL at all or Not-Only SQL.  I like the latter meaning as I find it makes the technology more flexible and adoptable for those that have primarily worked with SQL databases.  Regardless of the meaning, there are over 100 databases that can be labeled as NoSQL.  These databases range from wide-column , document storage, and key-value tuple stores to object stores and graph databases, with several types in between.  Included in this list of 100+ NoSQL databases is Lotus Notes/Domino.

I started working with Lotus Notes in the early 90's, right after I started with HTML and VB.  Back then it a was a great tool to allow remote users to collaborate on common data, via replication.  Over the years (more than a decade) Notes evolved to include the Domino server-side technology, while including a host of other technology integration:  HTML, Java, C, C++, JavaScript, XML, Web Services, etc.  In fact, Lotus Notes was my springboard to move to Java.

To me, the two biggest strengths of Lotus Notes/Domino were its approach to non-structured data storage, and its replication technologies.  There are a whole host of other Domino features that make the platform very robust, such as agents, routing, and security, not to mention the robust HTTP stack.

Notes has been much maligned over the years as being mostly a productivity tool or email tool.  However, I was very happy working with Lotus Notes/Domino.  I think there are several reasons for the bad press surrounding Lotus Notes.  My top four reasons are below:
1.  IBM's incredible (dare I say colossal) mismanagement of the Lotus brand, especially in the wake of the WebSphere brand
2.  The lack of standards and design patterns, as well as documented ALM for Lotus Notes development (at one point I heard Notes referred to as a virus).
3.  The lack of forward momentum on modernizing client and web UI tools
4.  The lack of management understanding what Lotus Notes was and wasn't, while developers tried to make every solution a nail to be handled by the Notes hammer.

However much I lament the downward slide of Lotus Notes, there is truth to my NoSQL claim.

Notes stores data in documents, or more precisely, notes.  There are also design notes (forms, views, etc.) and administrative notes (ACL and replication). Based on that alone I would label it a document-based NoSQL database.

In Notes, the container model is quite simple.  Items contain data, notes (document notes) contain items, and database (NSF files) contain notes.  Items are of two types, summary and non-summary.  For the most part, only summary data can be displayed in a Notes view.  Non-summary data, while accessible at the note level, is generally not seen in a Notes view.  Notes views don't really contain document notes as much as they collect and index them.  Using views, designers can build views into Notes data based on the need of users and the data contained in document notes.  In this way, they are somewhat similar to views found in relational databases.

Non-summary items are those items usually bigger than 60K and/or composite, like rich text items.  These items can contain rich text, file attachments, images, multimedia, etc.

Notes forms are generally used to create, edit, and view document notes in the UI.  To that end, forms are designed for those functions with fields added to the forms to contain the data when document notes are displayed or edited in a form.  Forms contain fields, however, fields are not the same as items.  Items contain data, fields will temporarily show and allow editing of item data when the form is used to open a document note.  However, document notes can and do contain items that don't exist on any forms.  Multiple forms can be used to view or edit document notes.  In this fashion, forms are actually decoupled from document notes.  While document notes are item, and therefore data, containers, forms are merely the template used to view, edit, or create documents.

Forms are mostly UI concerns.  In fact, items contained in document notes can be, and often are, mutated, without forms.  Moreover, document notes can be created without ever using a form.

So, in the grand scheme of things, Lotus Notes, at its core, is a document-based NoSQL database for unstructured data.  You can store data within documents.  These documents can be related (or not) by data contained in items.  These items can be summary (simple) data or non-summary (composite) data.  Notes forms and views can be used to enter data (including tags and metadata) and view collections or related documents.  Notes replication ensures that documents contained in one database instance can be eventually synchronized with data in another Notes database with the same replica ID.

Given these features, which are comparable to many other NoSQL databases, Lotus Notes NoSQL is a reality, now.