Interview with Daniel Jih of Amplitude Analytics

AC3
AC3 Blog
Published in
10 min readJul 12, 2016
Daniel Jih in his Stanford graduation robes

Daniel Jih is a software engineer based in San Francisco, CA. He has held several engineering-focused positions at both software behemoths like Tripadvisor as well as at startups and at MIT’s Lincoln Laboratory in defense research. He is now working at SF-based Amplitude Analytics where he focuses on managing the startups SDKs and integrations

How did you first learn about programming?
I first learned of programming back in middle school and high school when I tried to make my own website. Back then people made websites on Geocities and Angelfire for their own hobbies or online communities. I made my own site about the Final Fantasy RPGs, and so I dabbled in a little HTML, Javascript, and CSS. It ended up being a lot harder than I expected, and I lacked the motivation to finish the site.

I didn’t really get into programming until I took a few classes in college. I majored in EE, but I had the opportunity to take two CS classes: Data Structures and Algorithms. In those classes I learned how to use the terminal, compile my code, what runtime complexity was, etc. What drew me in, though, was how logical the data structure designs were. For certain applications one type is well-suited, for other use cases maybe another one is a better choice. You learn about all of the design considerations, trade-offs and limitations, and it’s really fascinating. These two classes are really the required classes that anyone planning to be a software engineer should take.

What made you ultimately decide to pursue it as a profession?
As I mentioned I studied Electrical Engineering in college. After graduation I worked at a defense research laboratory, doing rapid prototyping and writing MATLAB scripts to analyze data. After a while I realized the defense industry wasn’t a good fit for me. Some of my coworkers had been working on the same project for six years. There was a lot of bureaucracy and a lot of processes in place that made the pace feel kind of slow, which makes sense given the nature of the work, but it just wasn’t for me.

After a year I began looking for a new job. It just so happened that at that time a highschool classmate, who was a tech recruiter, reached out and offered to connect me with several software companies. To prepare for the interviews, I reviewed what I had learned from my Data Structures and Algorithm classes, as well as read the book, Cracking the Coding Interview, and that was basically enough to cover 85–90% of the material on entry level software interviews.

Cover of “Cracking The Coding Interview” — an influential book for Dan

I eventually got an offer from Tripadvisor, which I immediately accepted. I will say there’s definitely a desire to work at a highly visible company. I went from working at a place where I couldn’t tell my friends what I was working on, to a company whose services are used by millions of people around the world. There were also a lot of employee perks that weren’t really common in other industries.

What were some of the biggest hurdles you faced early on?
There is definitely a steep learning curve at your first software job or internship, even more so for me since I didn’t have a formal CS background like most of my coworkers. But even with a CS degree though, you may find that you have to learn a lot of things on the job because you simply just don’t learn them in any of your classes. For example things like deploying code, writing automated tests, using a version control system, having other people review your code, and working with databases beyond just writing simple insert and select statements. One of the most painful parts of ramping up was learning the code base. It does get a lot better though, as you gain more experience. If you move to a different company, you might recognize similarities and patterns that help you ramp up faster.

Who or what has had the biggest impact on how you program?
I think the single biggest impact was the code reviews I had at Tripadvisor. The first few months were pretty brutal. I had never written production code before, and I had never followed any coding style guidelines. There were two senior engineers on my team that would just rip apart my pull requests. I would say it was just as painful for them as it was for me. But at the same time though, I really learned a lot both from the code reviews as well as from my coworkers. I learned good programming style, many good design patterns, and in general just a lot of good programming practices. I highly recommend that software engineers and CS students have at least one job or internship at a large software company with rigorous engineering practices so that they can internalize these practices for themselves. These are also things that you don’t really learn in school.

I actually went back to school to get my masters in CS at Stanford, thinking that it would help build up my CS background, but in hindsight that might not have been necessary. It was the experience that I gained from my first software job that helped me excel in my current role at a startup called Amplitude.

What are some important lessons you’ve learned through projects or products you’ve worked on?
I actually had a friend of a friend contact me out of the blue regarding a start up opportunity in Hong Kong. Basically they were trying deliver healthy meals every day to workers in office buildings in Hong Kong. Due to their busy work schedules, these people do not have time to sit down and have a proper healthy meal, often grabbing quick bites and fast food from places nearby that weren’t very healthy. Their idea was not unlike Doordash or Spoonrocket, although they were going to hire their own chef with their own kitchen and ingredients, and manage everything from food prep to delivery. They needed someone to create a website for them to allow customers to view the daily menu, make and modify orders, as well as an internal system for them to manage the menu and delivery schedules. They offered to let me be their CTO if I would do this for them, and I would get a percentage of the revenue after they reached profitability.

Screenshot from Healthy HK Foods project

At that time I thought it was a great opportunity for me to test my skills and maybe get a great position out of it. I spent all of my winter break at Stanford working on a prototype, from some slightly vague design descriptions. I whipped up a quick Heroku instance running Node JS, Express, and a PostgreSQL database. For the front end I had a simple bootstrap template as a place holder. The page was dynamic, with the menu changing depending on the time of day and the ordering windows. I had a fully functional admin page to manage the menu, and even allow them to upload their own food images to an S3 bucket and automatically pull them into the menu. And in Hong Kong people speak English and Chinese, so the website allows for both.

I felt pretty accomplished that I managed to get all that up and running by myself, sort of like a validation of my full stack abilities. I did learn a lesson though, when the company and the cofounders basically vanished overnight. My guess is they never got the funding they needed, or they couldn’t get the logistics to work out. That is just the nature of start ups, although I was foolish and didn’t properly evaluate the opportunity before diving straight in. Thinking back now there were a lot of red flags, such as lack of proper funding, no contract to sign, and the fact that I had never even seen or met the cofounders or team members. As you become a programmer you may receive dubious offers yourself, from people with a great startup idea that just need a technical person to implement everything for them. Always be skeptical, and always do your research. I actually thought the food delivery idea was a really good idea, since at that time Doordash was gaining traction, and there wasn’t an equivalent in Hong Kong. But even if the idea is good, you need a proper team that can execute on it.

How has you focus or outlook evolved over time?
I started off working at Tripadvisor and Yelp, both large companies with large engineering teams (over 200+ person each). They’re both great places to learn good coding practices, but they’ve also been around for a long time, and have enormous code bases and large systems. For the most part I was updating or making small improvements to various pieces of the systems. They were obviously very necessary updates, but I felt like I was working on code that someone else wrote several years ago, and didn’t feel any particular sense of ownership of the codebase. It could also be that at that time I wasn’t a very experienced engineer, so maybe they delegated those projects to the more experienced engineers.

Screenshot of Menu Management from HK Healthy Foods Project

After I graduated from Stanford last summer, I started working at a startup called Amplitude. When I was applying for jobs I explicitly looked at small startups, because if you’re on a small engineering team there’s a good chance you will get to work on a lot of different things and learn a lot. When I interviewed at Amplitude, I learned that the small team of 5 engineers wrote their own proprietary column store system since the existing database systems like Mysql and PostgreSQL weren’t fast enough for their use case, and I was very impressed. Each engineer owns an entire piece of system and wears a lot of hats. This is probably true for a lot of software startups. At Amplitude I manage all of our open source SDK libraries, as well as a lot of the third party integrations and various backend components. Working at a startup is definitely a great way to to learn a lot and really grow as an engineer.

What are you most excited about learning next?
I’ve always wanted to learn how to develop and publish an app. I maintain Amplitude’s Android and Objective-C SDKs so I have a good feel for the languages and the platforms, but I’ve never developed an actual app. In my free time I’ve been following the Stanford iOS app development course, which is free on iTunes University, and dabbling in Swift.

What kind of changes do you see coming to the discipline or industry in the next 5 years?
I think it will get easier and easier to enter the programming discipline. You don’t necessarily need a 4 year CS degree to be a programmer. I myself have a somewhat non-traditional background. We’re seeing more and more code academy and boot camp style classes designed to help people enter and jump start into the industry, as well as lots of free online courses. If you have a computer and you are self motivated, it’s very possible to teach yourself and become proficient. I also think some of fields that will become really big in the next 5 years are self-driving cars, AI in general, and virtual reality, lots of exciting development in those areas.

If you could go back and give yourself some advice when you first began programming what would that be?
It’s okay if you don’t know what you want to study or what you are passionate about when you start college. I think students are under pressure to pick a major and stick with it. At 18 or 19 you’re supposed to know what you want to do for the rest of your life, and that can be really hard. If you end up not liking it, it’s not the end of the world. If you acknowledge that you don’t like it, then you can at least switch to something else.

Along those same lines, have more diverse internships. Internships in general are sort of an opportunity to try out different things, maybe it’s working at different size companies, or maybe it’s trying out different fields and disciplines. Each company’s code base might be in a different language, which can help expand your resume. Not only is it a good opportunity to learn a lot of new things, but you will find that different companies have different cultures. You might not like some, and you might like another so much you want to return full time after you graduate. I made the mistake of doing pretty much the same thing all 4 summers in college, not really trying out different things, and I kind of consider that a wasted opportunity.

Screenshot from Dan’s Github account

Additional Info:

What programming languages or technologies are you experienced in?
Java, C++, C, Objective-C, Python, Javascript, SQL, Map-reduce, HTML, CSS

Your preferred language?
Python

Do you contribute to any open source code / libraries?
I maintain and update all of Amplitude’s opensource repositories (SDK libraries, demo apps, partner integrations). If you look at Amplitude’s public repositories, I pretty much own or have updated all of them at some point: https://github.com/amplitude

Github handle: @djih

Personal Project: http://www.danieljih.com/

Coding Blog is brought to you by Hacksaw Academy a fully interactive platform divided into bite size programming tutorials.

--

--

AC3
AC3 Blog

Token powering the world’s first platform to directly earn and purchase from innovative companies.