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 humour is a must, as well as the ability to perform under pressure.
Fill that gap!
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.
Choice of platform
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?
What’s important to a startup’s tech
When choosing from the wide array of options, I focus on the following:
- Ease of Development: If software is difficult to write not only will you not enjoy your work, you’re more likely to make mistakes.
- Learning Curve: How hard will it be for a new engineer to learn the language if it’s new to them, as well as how easily can they be productive?
- Tooling: What is the tooling like? Unit and integrate testing, code coverage, and CI/CD are a must for any stack.
- Time to delivery and focus: When creating your software, are you focusing on your primary business, or are you focusing on keeping your platform running? Choosing an operationally simple system is a must to maximize your productivity.
- Budget: What can you afford to host?
What we’ve chosen as our platform
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 than 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 operationalisation, which is a must for us.
For our hosting, we’ve chosen Kubernetes running in Google Cloud Engine. It’s a reasonably simple system 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.