So you want to be a tech star
4 MIN READ
You’re approached by someone you respect and believe in to start a company. Not just any company, but one you believe strongly has the potential to make people's lives easier and has a huge potential market. You have enough cash to hire a couple of engineers and get this startup off the ground. Fantastic…. Now what?
People will be by far the most important part of your company, they’re more important than any technology choice you will ever make. Hiring the right people from the start can greatly benefit your culture, and will make your startup more attractive for future recruitment of engineers.
We’re very choosy about who we hire. It’s important to us to hire someone who’s excited at the possibility of growth and does not shy from performing some heavy lifting. This doesn’t mean work 60 hours a week. This means that people need to be efficient, make significant progress during the time they work, and have time off to have a work life balance. A sense of humor is a must, as well as the ability to perform under pressure.
Required skills are somewhat more difficult to define. This does to some degree depend on your technology choices. However, I’m not a proponent of hiring someone based solely on his or her previous experience. While helpful, the ability to learn and perform multiple roles is imperative. You should hire people that have strengths that compliment your weaknesses. For instance, I have a lot of experience in distributed systems and APIs. I feel very confident in my abilities in these areas, but I’m not the best in the realm of iOS, Android, and Web Applications. As a result, our first hire is someone who can fill these gaps and keep us rolling towards a beta product.
Choosing a technology stack can be an incredibly daunting task. There are so many options for creating an API service. Do you develop your Software stack Java, Go, Node.js? Do you bundle your software in a Docker, Rocket, or System image? Do you host your code on Google Cloud Engine or Amazon Web Services?
When choosing from the wide array of options, I focus on the following:
Go is our language of choice for our API. It has an easy to learn syntax, the tooling is fantastic, and the statically linked binaries are only marginally slower then native C in performance. Node.js was a close second. However, the cost of performance per CPU cycle is higher than Go.
For our images, we’ve chosen Docker. Docker is dominating the industry as a runtime standard. I feel it significantly narrows the gap between build and operationalization, which is a must for us.
For our hosting, we’ve chosen Kubernetes running in Google Cloud Engine. It’s a reasonably simple sysstem to use as an engineer, and Google makes administering it a breeze.
For persistence we’ve chosen Google Cloud Datastore. We have a reasonably simple data model. We don’t need foreign key enforcement. We don’t want a high cost in administration overhead, nor do we want to deal with multi region fault tolerance in our code. Using a combination of Docker + Kuberentes + Datastore gives us multi region failover, without the need to build any custom systems. This also gives us a low hosting cost overhead, and allows us to scale easily as we expand.