“Always choose a place where you can optimize for learning,” said Serkan Kutan, CTO of Zocdoc, after telling us about his own career trajectory in the first week of our internship. “And I can tell you,” he added, “our internship program will provide such an environment.” Reflecting on these words at the end of the summer, I found that Zocdoc delivered on that promise and so much more.
Welcome to Zocdoc, a New York City startup dedicated to improving the healthcare experience for everyone.
Zocdoc will soon celebrate its 10th anniversary, but the company has never abandoned its allegiance to the idea of being a startup. Zocdoc is scaling and moving faster than ever – especially on the tech side where it has adopted new technologies like React, Scala and AWS. I was excited to join Zocdoc at another inflection point in its growth trajectory.
Over the course of our time here, all the interns took full ownership of their projects from initial commit to production. Work done over the course of the internship culminated in presentations in front of the entire technology team.
Of course, our work was accompanied by an array of fun events – from participating in a three-day technology-wide Hackathon to boating around Manhattan with Serkan, along with OIiver Kharraz, Zocdoc’s CEO.
If there is one thing to take away from this post, it’s that Zocdoc cares deeply about its interns. They really do.
On the first day, I showed up at the lobby where I met the five other interns in my class. From my knowledge, Zocdoc’s internship class is much smaller than those of other companies of a similar size.
This small size, I believe, allowed Zocdoc to invest so many resources on each intern.
The first week consisted of training. In the mornings, we learned about Zocdoc’s business operations, and in the afternoons, we delved into technical training. Materials covered during training ranged from familiar subjects like Git to technologies I had always aspired to learn, such as AWS and functional programming in Scala.
Sessions also went into engineering practices like Continuous Integration that I had never encountered in school. I remember asking myself during one of these sessions, “What in Turing’s name is dependency injection?”
Well, just as studying art history doesn’t make one a better artist, learning computer science theory in the classroom doesn’t necessarily make one a better software engineer.
In theory, practice and theory are the same. In practice, they are not. Good engineering practices are needed to bridge the gap between theory and practice, and Zocdoc was an exceptional training ground.
At the end of the first week, engineering managers pitched their team’s projects to us. Each project opened up different learning opportunities – machine learning, AWS stacks, frontend development in React/Redux, backend development in Scala and cross-platform app development using Electron, just to name a few.
Since there were only six of us, there were more teams than interns. This meant that each and every one of us was able to be matched with a team that best fit our interests and goals.
My personal goal at the beginning of the internship was to gain experience in full-stack development. I was happy to have been placed into my first choice, the Booking team. In the end, my repository would consist of 40% frontend built with React/Redux, 40% backend with AWS Lambda, 20% DevOps with Ansible and AWS CloudFormation.
A healthy dose of autonomy is important, but it can be overwhelming to dive into a giant codebase as an unseasoned engineer.
Fortunately, our mentors were ready to help.
At Zocdoc, every intern is assigned to work closely with one or two members from their team. My mentor, Jin, guided my day-to-day work, and my engineering manager, John, gave me a high-level overview of Zocdoc’s business and engineering architecture.
I learned that if you write bad code, nothing bad happens immediately, but soon tech debt starts to pile up. So code reviews on our pull requests were important to enforce the quality of our codebase. David Heinemeier Hansson, the creator of Ruby on Rails, said that in order to write good code, “First, make it work. Then, make it right. Finally, make it beautiful.” Once you got an LGTM 👍 from your team after multiple iterations, you were good to go.
When your code fails to pass a test in the CI server, other engineers can see you’ve failed the build in the engineering chat room. The moral of the story is that if you’re visibly breaking something, you are already making a significant contribution as an intern… Ooof, that’s not right. What I meant to say is that Zocdoc moves fast and your impact is immediately reflected.
None of our code was left buried in a sandbox. In the last week of the internship, interns had the opportunity to give presentations and demos to an audience of the entire engineering team in the company.
Tech Talks, Hackathon Demos, ZocTalk
Learning doesn’t end there.
Interspersed between regular work hours were weekly tech talks and demos, where engineers presented what they had been working on. In one tech talk, we heard from engineers who made the first move toward functional programming in Scala. In another talk, we learned how the DevOps team has been migrating our stack to AWS.
On Fridays were ZocTalks, which provided an open forum for presentations about where the company is heading. This was a chance for everyone to freely ask questions to the leadership team.
Zocdoc Hackathon is a semiannual event where the technology team goes on a retreat. This year, we went to a beautiful country house in rural Connecticut. There, we chilled by the swimming pool, took dips in the hot tub, flew a drone over the mansion, cooked food on a barbecue, played board games, and, of course, engaged in the craft of our trade – hacking.
For the interns, it was more than just a hackathon because it gave us an opportunity to get to know other people in the company early into our internship.
Intern events were great opportunities for interns to not only let loose but also get know the human side of the engineers with whom we trained during the first week of internship.
One of my most treasured memories this summer was sailing around Manhattan with Oliver and Serkan.
We began the day with a ride in Oliver’s Tesla. Then from a marina in Brooklyn, we sailed out to the ocean. Hours of tubing later, we ended the day over beer at the Liberty Landing Marina in Jersey City.
Many thanks to Oliver and Serkan, who took a whole day out of their schedule for the six of us. We were thrilled to get a chance to learn about Zocdoc directly from the very people who built and grew the company.
Did I mention that Zocdoc really invests in its interns?
Learning From People
One advice that I received from everyone was, “Ask a lot of questions.” In the rough-and-tumble of debugging, some problems can be solved easily by asking the right question to the right person.
This, of course, is easier said than done. People say there are no stupid questions, but I think there can be lazy questions – questions asked before doing any research on your own. For me, asking questions also involved a nuanced sensibility for context because, as a believer of deep work, I didn’t want to interrupt anyone in their flow zone.
Before the internship, I didn’t really get why Paul Graham held “relentless resourcefulness” as a prime virtue. During the internship, however, I ran into few occasions when I was shadowboxing with some problems for too long. Then I realized that trying to reach a solution without asking questions is a hopeless non-solution.
Fortunately at Zocdoc, learning happens across teams – everyone was so supportive when I went to other teams’ offices to ask for help or sent a cold chat message even though we’d never met in person. Even the mentors of other interns came over to help me out when I was struggling with problems they had encountered before.
When I first saw Zocdoc’s video on the website, one phrase was seared in my memory:
Zocdoc is not only solving interesting engineering challenges but also tackling some of the knottiest issues in the healthcare industry. This makes the task doubly important and rewarding.
Before the beginning of the internship, Serkan told me to take a look at the Twelve-Factor App. When I first read it, I understood practically nothing. Re-opening the link while writing this post, it was a pleasant surprise to see how much of it I now understood because I actually implemented them myself through the course of the internship at Zocdoc.
Through this internship, we learned to move up and down different levels of abstraction – from architecting our projects to writing crisp Git commit messages. I came to see that the word “app” is a grossly understated abstraction, which wraps the vastly engineered system behind it in a small icon.
The process of learning looks like the fractal coastline where infinitely more details emerge as you inch closer. Thanks to Zocdoc, I was able to cruise along this coastline with great mentorship and support.
About the Author
Sheon Han was a software engineering intern in Zocdoc’s 2017 Technology Intern Class. He will be returning to Zocdoc upon graduation. He studies computer science and philosophy at Princeton University.
When he’s not reading or coding, you can find him adding gratuitous footnotes to the world on his blog.