I recommend moving this code out of `renderContact()` and into its own `renderSelectCheck()` function.  This function would be similar to `renderOrderString()` and `renderSearchString()`.  Its key features would be:

  * Lightweight check to see if the checkbox is already rendered.  Something like a `data-select-rendered` attribute is probably faster and more robust than a query selector.
  * If not rendered, then render using the `getSelectCheck()` and `insertBefore()` logic you use here.

Then call `renderSelectCheck()` from the `doRenderTimer()` function near where `renderContact()` and `renderPhoto()` are called.  Also call `renderSelectCheck()` for each node in `enterSelectMode()`.

This provides two benefits:

 1) You no longer have to worry about ordering issues between `renderContact()` and `enterSelectMode()`.  Currently, if you call `enterSelectMode()` before `renderContact()` is called for all contacts then I think you will end up with two check boxes.  This can happen because `renderContact()` normally only occurs when a row goes on screen.
 2) It decouples the select checkbox building code from `renderContact()`.  The `renderContact()` code is partially in the hot path at load time because we need to immediately render the first six contacts for each letter group.  With a large list this adds up and can be over 100 contacts. (6 * 24 letter groups = 144 `renderContact` calls).  Its not clear that even if we were in the select mode whether we would need to force immediate checkbox rendering or if a slight delay before they appear would be ok.  I would guess a slight delay would be fine, personally.