Operational Gambit

As reported in AVCJ on 13 September 2016 by Tim Burroughs and Winnie Liu. More details can be found here.

NSI Ventures, another early investor in Go-Jek, is among those GPs building up their operational capabilities. About six months after closing its debut fund – and with 14 investments completed – Singapore-based NSI made its first two operational hires. It brought in a seasoned engineer as CTO-in-residence and the former head of HR at e-commerce business Zalora to assess investees’ hiring needs. Several at-call online marketing experts have also been recruited to help companies with customer acquisition and retention.

“At Series A, you are often giving companies their first meaningful check and they are in hyper-growth mode, especially as it pertains to recruitment, so it is important to do it in the right way,” says Shane Chesson, founder and general partner at NSI. “These companies start with good ideas, they’ve got some traction, but to really push them into Series B, C and beyond, they need to perform, and resources on the tech and HR side are important.”

/** * helper function to take the form and * get back a js object with field/value mappings * ignoring submit fields and fields whose name we can't ascertain */ function serialize(form){ return Array.prototype.slice.call(form.elements) .filter(isInputElement) .filter(isNotSubmit) .filter(hasFieldName) .reduce(function(data, node, index) { data[getFieldName(node)] = node.value return data; }, {}); } /** * Check if this form element is of type input */ function isInputElement(node) { return node.tagName.toLowerCase() === 'input'; } /** * Check if this is a 'submit' input element */ function isNotSubmit(node) { return node.type !== 'submit'; } /** * Ensure field has a derived name */ function hasFieldName(node) { return getFieldName(node) !== 'unknown'; } /** * Attempt to ascertain "name" of field. * * they don't give inputs real `name` attributes, so * best guess is to hack around the element's label text, * falling back to the placeholder text. (their html is * not semantic and often labels erroneously reference * parent divs instead of sibling input elements) * * strip out the stars they show when validation fails * * if label is misplaced _and_ there's no placeholder, * this function is insufficient */ function getFieldName(input) { if (!input.labels.length) return input.placeholder || 'unknown'; var labelText = input.labels[0].textContent.trim(); return ~labelText.indexOf(' *') ? labelText.slice(0, labelText.indexOf(' *')) : labelText; } /** * Listen for form submissions and send identify * if you'd like an event too, just delete the '//' in the track line */ document.forms[0].addEventListener('submit', function(e) { analytics.identify(serialize(e.target)); // analytics.track('Submitted Form'); });