This is the latest in our "Inside the Stack" series. This week, we hear from Benny Wong, Co-Founder & CTO of Timehop. Benny and his team are hiring engineers and product designers.
Describe Timehop in 2-3 sentences.
Timehop is your personal digital time capsule. We pull in your data from Facebook, Twitter, Instagram, iPhoto and other services and show you your memories from years past – kind of like a personal “This Day in History”. Our goal is to create a service that collects your history, captures your present, and makes it useful, meaningful, and accessible for you.
What are your primary programming languages?
Our main language on the backend is now Go. A year ago, we were mostly a Rails shop. Since then we’ve grown our daily active users about 17x. As you can imagine, a lot of things stopped working well and we needed to rewrite some systems to handle the growth. We tried a few languages and Go was the hands down winner for us. The main reasons we chose Go were for its incredible performance, sane concurrency constructs, and type safety.
On the mobile app side, we have both iOS and Android. They’re both built natively: Objective-C on the iOS side, and Java on the Android side. Of note, both apps embrace functional reactive methodologies with ReactiveCocoa on iOS and RxJava on Android. It’s a mind bending experience to learn it, but eventually leads to a much cleaner and extensible app.
What are your primary web frameworks?
We’ve built a lightweight framework for timehop specific stuff (like authentication, API versioning, etc), but for the most part, we only use the Go standard HTTP library and gorilla mux for our API. In general, we’ve found the Go standard library to be an amazing set of tools.
We don’t have much of a web presence as most of our traffic comes through our API, but for what we do have we use Rails.
What are your primary databases?
We use PostgreSQL, Redis, and DynamoDB. PostgreSQL is tried and true; Redis is amazingly fast and simple to use. But DynamoDB is our work horse.
DynamoDB is an amazing product and I can’t imagine scaling without it. Our largest table in DynamoDB is pushing 63 TB and our average range query is about ~5ms. We chose Dynamo because it fit our workload perfectly. We are write heavy with a constant flow of writes as users sign up and we fetch their data. We are read light-ish as we currently look at only 1/365th of our data set on a given day. The ability to independently scale storage, read performance, and write performance was exactly what we needed.
Which DevOps tools do you use?
We use Cloudformation and Chef heavily. When we begin scaling we were a small and nimble team with no dedicated ops team so we tried to pick established tools with a solid community. We didn’t have much time to experiment or build a ton of tools, especially since we were focused on shipping a fast, fun, and stable app to our users. We just hired a DevOps engineer so this may change!
Which part of your stack are you most excited about?
It’s hard not to be excited about almost every part of our stack. When millions of users are using your app, every little feature and detail becomes hugely important. What’s exciting to me right now isn’t actually part of our stack per se – it’s our open source contributions. We’re built on open source technologies and really value contributing back to them. We’ve built a whole bunch of technology that can help other companies and we plan on open sourcing a lot more soon! Keep an eye on http://garage.timehop.com – it’s getting a facelift and a whole bunch more projects on the way!
Thanks to Benny and the whole Timehop crew for the great post. Visit timehop.com to download their iPhone and Android apps.