Half Engineer / Half Business Guy

Starting Your Business And Becoming An Entrepreneur

Tag: Hiring

You Don’t “Just Need Engineers”

As I’ve spoken to new business-side entrepreneurs recently (even those, like me, with advanced engineering degrees), one of the most frequently asked questions has been: “How do I build an engineering team?”

It’s a very tough question! In this post, I’ll describe my team’s experience.

REMEMBER – YOU’RE BUILDING A TEAM

When my co-founder and I decided to pursue Catapulter, we knew it was going to be a complex technology, so we couldn’t just run out and “find some engineers”. We needed to build a team.

For some perspective on what NOT to do:
http://whartoniteseekscodemonkey.tumblr.com/

Here’s how we did it:

  1. Ask Experts Who We Need
  2. Post Jobs & Network
  3. Interview
  4. Get Lucky (Networking & Perseverance Make Luck Happen)

WHO DO WE NEED, ANYWAY?

The first step was figuring out what the Perfect Team would include.

We had a good idea, but we wanted to defer to those who knew from experience. We reached out to as many people as we could find in the entrepreneurial community, to figure out what types of folks would really make the most sense to round out our team.

We met with developers, startup CEOs, VCs, and even a mathematician at Apple, and after a few meetings, we narrowed it down. Besides the fact that we knew we needed a talented CTO (see here why you need a technical co-founder), we specifically needed a mathematician / algorithm guru, and a CTO who could knock out the front-end, but also work with some heavy data processing on the backend.

JOB POSTING & NETWORKING

Now that we knew who we were looking for, we started networking and posting jobs everywhere we could think of.

The easiest way to find a high-quality co-founder is through someone whose opinion you respect.

We basically set up as many discussions as possible with folks in the entrepreneurial community, particularly developers, to find someone who might be interested. First, we asked friends who they knew, then asked those people who they knew. (Whether or not you find someone, you’ll definitely learn something!)

You may have the “perfect person” in mind…but the best folks usually have plenty of projects to work on. There’s likely going to be quite a bit of luck involved – who’s super-pumped about your idea, who happens to have the right experience, and who’s available.

Another way to find folks is by posting to job boards and email lists.

We received a number of quality applications through both entrepreneurial email lists like the Philly Startup Leaders and school job boards like UPenn’s. (We also got a lot of noise, so be prepared to screen!)

With school job boards, there’s a timing consideration based on when each of the various divisions of the school searches for jobs. It turned out that one specific engineering school was recruiting when we posted our Algorithm Developer position, and we received a huge number of applications from that group.

For tips on job postings / intro emails, check out this post from a Penn CS Major.

One important note: If you’re not a developer yourself, there are going to be some people who tell you you’re just a “business person”, you’re useless, and no engineer should ever talk to you. There are certainly folks for whom that’s true…just don’t let it be you!

INTERVIEWS

We found our first team member (our Lead Algorithm Developer) through a school job listing. He wrote one of the few cover letters we received (about his genuine interest in algorithms!), had excellent routing/networking experience, and was a leader going in. We interviewed a number of folks, but he stood out at the interview. He didn’t overpromise, he told us what he could and couldn’t do, but was confident that he could figure out anything.

And he freaking rules.

From the same job board, we found a few students who were interested in the CTO position. We ended up selecting one particularly energetic student before a final round startup accelerator interview…

GETTING LUCKY, PART I

In our interview, the partners of the accelerator gave us the business, and really pushed to figure out how talented our new teammates were. A few days later, our new CTO called and told us, without explanation, that he was out. Shortly after, the incubator called and told us they liked the idea and the team…except for our CTO.

At the time, we were bummed out. We were so close…but now we were a tech startup without a CTO! We didn’t realize how lucky we were to have another opportunity to find the right person.

In any case, we knew we needed to figure it out, FAST!

GETTING LUCKY, PART II

We hit the phones again, now networking with people we knew who already had great jobs. We knew it would be tough, but we also knew we had a fantastic idea, an awesome algorithm developer, and a real opportunity.

Running out of network, I called up one of my college buddies, a super-talented engineering classmate of mine who already had a fantastic job. There was no chance he’d leave, so I decided to ask if he had any friends who might be interested.

However…by an amazing coincidence, it turned out he had recently built a trip planning website in his spare time! AND he was the jack-of-all-trades type of guy who could knock out the front end but work on the heavy processing in the background. AND he happened to be casually looking to join a startup. Booyah.

That’s what networking gets you. You make your own luck. And now we had a CTO.

GETTING LUCKY, PART III

With the new team, we spent the summer at Betaspring building our alpha product and beginning to test with users. At this point, our database was rapidly expanding, and we wanted an experienced engineering leader to focus on managing the growth of our technology, and our growing data acquisition and storage needs.

Over the summer, we had continued to network and post on job boards, but hadn’t found anyone. We had been interviewing a number of candidates through the normal channels, but none really fit the team

Then one day, while cleaning out my email, I found one that had slipped past…

Well after we had selected a CTO and began at our accelerator, a really talented candidate who fit the bill had sent us an email. He had experience as VP of Tech/Product at other heavy-data startups, where he had guided nascent technologies through rapid growth.

It only took a couple of phone calls and a video chat with the writer of this email, but it was clear he was the man for the job.

PIECE OF CAKE, REALLY…

And like that, we had three killer engineers making up Catapulter’s core team.

The perfect team needed a jack-of-all-trades CTO, an algorithm developer, and an experienced data-processing guru and technology leader, and somehow we got them all.

The main take-away for me: you have to network, and you have to try everything. It took a ton of legwork, but as a result, we built the absolute perfect team.

It was totally worth it.

You Need A Technical Co-Founder

NO, YOU CAN’T JUST OUTSOURCE

If you’re starting a tech company, you need a technical co-founder.

Without one, you won’t be able to build your company. In addition, you won’t be able to raise money, because investors know how important it is to have a technical founder on the team.

There are a long list of reasons, but here I’ll make like an entrepreneur and show you the problem, then give you the solution.

Let me start by addressing the most common issues, usually preceded by:

“Sure I can start a tech company without a tech co-founder, I’ll outsource!”

PROBLEM: OUTSOURCING = MISALIGNED INCENTIVES

While outsourcing a website is possible, the incentives of whoever you’re sending work to is often the opposite of what you want.

Even for the most expensive contractors, their incentives are:

  • Do the least work possible while getting paid
  • Take longer than you want, if it means they can get paid more

Even a great provider has these incentives – they’ll just act on them differently. The best folks do work quickly to earn repeat business, and don’t charge for hours above their estimate. However, until you’ve had experience with someone, it’s hard to know how they’ll treat a job.

At Catapulter, while some of our contractors worked hard to earn repeat business, others did a quick, messy job and then demanded further hourly payments for edits. To be fair, that’s the lowest of the low, but it absolutely happens, particularly when you’re paying bottom of the barrel prices (common for early, low-cash startups).

(See my post on not getting screwed by outsourcing)

SOLUTION: TECHNICAL CO-FOUNDER

Above, I said that some of our contractors did a bad job. If we didn’t have technical co-founders, we wouldn’t even know it!

Fortunately for us, these were quick jobs, and we could afford to lose the $100 we paid. What if we had gone the outsourced route with a 3-month, several thousand dollar job, with no one to look over our contractors’ shoulders? It would have been a tough spot.

The reality is: you need a technical co-founder you trust. Someone who is not trying to make money from you, and wants your company to succeed.

Your Technical Co-Founder Will:

  • Screen and manage
  • Integrate
  • Do it the right way
  • …and, surprise – code!

Screen and Manage

If you’re non-technical, it’s very difficult to manage technical contractors because you don’t know what they’re doing, or how they need to interact with other contractors. Your technical co-founder will understand how the pieces fit together, and make sure that different components can actually integrate.

Also, you shouldn’t expect every contractor or even employee to be able to problem solve or think pro-actively. You’ll need to give guidance and feedback constantly, and if you’re not technical, you won’t be able to do this correctly by yourself.

Integrate

If you outsource components, they’ll have to be integrated. Integration takes an immense amount of time, and it’s not something that can be tacked-on to the end of a job. You’ll want someone internal to guide this process (if not do it completely), to make sure it’s done right.

Do It Right

As I mentioned earlier, a contractor is interested in completing the job, and maybe getting repeat business, not making your site as elegant and easy to maintain as possible. Your technical co-founder will want to drive this process, to make sure your site is being built in a scalable, updatable, low maintenance way.

Code!

Building a website is not easy. There are many moving parts, and there’s always something that needs to be fixed, changed or updated. You want someone on your team who you can count on for emergency fixes, to fill in the gaps between contractors, or add that one last little feature before the next release.

AND MOST IMPORTANTLY, THEY’LL STICK IT OUT WITH YOU

If you fully outsource your website, the folks building the website are doing it for a paycheck. If you stop paying the bills, they’ll stop building the site.

If you’re a new startup, you’re probably not loaded with cash. You want to find someone who’s going to stick it out with you when the going gets tough, and continue to move forward if you hit a rough patch.

Using Outsourcing To Build Your Website

I’ve been asked a lot lately about my experience outsourcing web development, so I thought I’d share my experience. At this point, we’ve worked with just under 10 contractors, both designers and coders, to assist our two-person development team.

To be clear, I have only limited experience in programming (I was an engineer with some coding experience, not a web guy). The core functionality of our site was built by our CTO and Algorithm Developer, while we outsourced 1) the front-end design and build, 2) several other bolt-on programs that could be incorporated later to our site.

If you’re building a web business, one of your founders must be technical to understand and manage your contractors – you shouldn’t be outsourcing your entire website.

However, contractors can be an efficient way to get your site up and running more quickly or “rent” expertise (graphic design, iPad development, etc.), though you may have limited resources.

POPULAR Outsourcing Websites

Typical websites people use to quickly find contractors include:

  1. Find hourly/project workers: oDesk , eLance , Freelancer, Rent-A-Coder/vWorker
  2. Post a design project and have contractors submit work to win your payment: 99Designs , Crowdspring
  3. Turn designs into code (HTML/CSS): Psd2html, HTMLBurger

I’ve used oDesk and Freelancer to find hourly workers, 99Designs for design and HTMLBurger for coding.

TIPS ON SCREENING HOURLY/PROJECT WORKERS

Beware especially of high-ratings / low # of jobs – Ratings are often pretty worthless. Many of the highly-rated people you’ll find on oDesk are salespeople with coders behind them. They’ll promise anything, give the job to a coder who may not have any expertise in that area, and manage feedback so that they always have a near five-star rating. Once they screw up, they’ll create a new username.

Individuals vs. Organizations – However, there are many successful organizations (i.e. salespeople plus coders) on oDesk, with tens of thousands of hours and great user comments. I haven’t yet been successful with an organization – in large part because of the problem above, and also significant communications lag going through a middleman (the salesperson) who’s often also working as a translator. If you find someone whose username is XYZ but answers emails with name ABC, red flag!

If it’s too good to be true, it usually is – If someone says they can do *anything* for $3/hr, your hunch that it’s not possible is probably correct. The best freelancers I’ve used tell you that they’re amazing at certain things and not as amazing at other things.

Country – I won’t elaborate too much on this here, since I’ve had limited experience and can’t really make a good assessment. However, I’ve heard pretty common threads about particular areas of the world that produce really high-quality work, and others that are quite poor. I’ve had good price-to-quality experience and have heard very good things about Eastern Europe and the Philippines.

To Find the Right Provider – 1) Interview and 2) do a test job! – Giving all the work and large payments up front is often a waste of your time. Make sure you interview well, and then test the applicant’s relevant skills with a test job. Once they succeed, continue to give small pieces at a time. If they push you to give bigger chunks of work, you shouldn’t work with them.

Payment

My team hasn’t used hourly payment with contractors, because it gives them an incentive to work slowly, rather than get the job done by a deadline or risk not getting paid. As a result, we’ve only used Fixed Price jobs (this is an option when posting your job on sites like oDesk and Freelancer).

Find out what market price is – On my first job, I said, “if it can’t be done for $500, I don’t want it done, and no one will apply so that’s ok”. Looking back, this was pretty stupid. In fact, the worst developers ended up applying, and they all either quit or tried to raise the price mid-job. The correct way to do this is to search through current listings on the site you’re using (or similar) to understand the market value of a given job and the time it will take.

Also, be careful about milestones – If you set up a milestone payment, one tactic I’ve seen is that contractors try to 2x-3x the remaining price to finish the job. Then they threaten to give you low employer ratings via external email, hurting your chances of hiring top contractors in the future. Customer service won’t help, so make sure you have some reason to trust the coder you’re working with.

Getting Designs from 99Designs

On sites like 99Designs, you post a job description, price and duration, and people will bid with actual work – As before, you should check out the market price for the type of job to make sure you get what you want (e.g. bidding just $300 for a webpage will get you very few entries, though we bid just above that and were lucky enough to find two designs we loved).

You have to put up your money and fees ahead of time, but if you don’t like any of your options, you get your money back…of course, you have to ask a few times as customer service tries to give you various discounts and extensions, but in our experience, you get your refund.

Getting your Designs into Code

99Designs will give you PSDs, You will need to get it into code – One of the quickest / easiest ways to do this in an outsourced way is to give your PSDs (or sometimes even PDFs) to a company that can “slice” PSDs into HTML/CSS. There are a lot of companies that do this, including my personal favorite, HTMLBurger. Keep in mind, this will only be a clickable, pretty shell of a website. You’ll need someone else to make it actually do something.

Make sure you’re very clear on what needs to be separate and dynamic – Your PSD needs to be created such that every picture and every piece of text you want to be separate is created separately, and you specify to the Slicer you want them to act separately. For example, giving a poorly created PSD of Kayak.com to a slicer would yield a website where all the results are lumped together into one big picture, and you can’t change the text.

Hopefully, this was somewhat helpful. It would have been to me!

_id = 6 62 | 0.0002 | enabled | cached | 4171 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 7 63 | 0.0002 | enabled | cached | 4171 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 7 64 | 0.0002 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 65 | 0.001 | enabled | not cached | 4154 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 44 66 | 0.0003 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 67 | 0.0003 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 68 | 0.0002 | enabled | cached | 4171 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 7 69 | 0.0002 | enabled | cached | 4162 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 5 70 | 0.0002 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 71 | 0.0002 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 72 | 0.0002 | enabled | cached | 4154 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 44 73 | 0.0002 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 74 | 0.0002 | enabled | cached | 4127 | SELECT t.*, tt.* FROM wp_f1z5i1_terms AS t INNER JOIN wp_f1z5i1_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.term_id = 6 -->