I started working at Doximity as a Software Engineering intern in May of this year. The internship was my first experience working in the Bay Area, and more importantly, my first time working somewhere other than my home country: Canada.

Working in the United States for the first time was an enormous leap for me, with a lot of uncertainty. However, now that the internship is nearing its end, I can confidently say I couldn't be happier to have had this opportunity at Doximity.

How To Measure the Quality of An Internship

1. Mentorship, Growth, and Learning Opportunities

The most important aspect of an internship to me is mentorship and growth. As a third year Software Engineering student, I want to gain as much practical knowledge as I can from my work experiences. I want an internship to teach me industry standards, best practices, and to offer the practicality I find school sometimes lacks with its theoretical focus.

Full-time Mentorship

Starting out at Doximity, I was paired with a full-time mentor from day one. This was awesome because it introduced me to a friendly face right from the get-go, and gave me a resource to ask any questions I had about company values, technologies used, and best practices for said technologies.

Having a mentor in the company helped me to grow as a developer through pair-programming, code review, and discussing technical topics such as database design, object-oriented design patterns, the tradeoffs between these patterns, and agile methodology best practices.

Library Card Not Needed

One of my favorite things about Doximity is the company library. The company has dozens of books (both physical and electronic copies) on various technical and non-technical topics, ranging from web technologies and object oriented design patterns to data science and engineering management.

Eager to take advantage of the wealth of knowledge at my disposal, I asked my mentor for recommendations, and he suggested I read Practical Object-Oriented Design in Ruby: An Agile Primer. This book helped me to become a better object-oriented designer by making me more conscious of the patterns I was using, as well as the trade-offs between various object-oriented design techniques. Furthermore, it taught me practical ways to use the SOLID design principles I learned in a theoretical way during school. After reading through the book, I noticed an immediate difference in the code I wrote and felt it greatly improved my engineering judgment when tackling software design related problems.

nice

Backtracking to my point about mentorship, the biggest plus for me as an intern was discussing the contents of the book with my mentor. This was helpful in solidifying the design techniques and best practices suggested by the book, as well as discerning which aspects of the book to focus on in my daily software development.

2. Work Culture & Work Life Balance

Move fast, ship often

The engineering team at Doximity has a culture of moving fast and shipping often. On average, the engineering team deploys to production around 30 times per day, for dozens of apps and microservices - including this blog!

:shipit:

Me shipping the engineering blog you're currently viewing to production via our #deployments slack channel.

A testament to the speed of how the company progresses is the onboarding process. As a new hire, an engineer is able to ship code to production on their first day.

Working in an agile environment taught me techniques of how to break down larger tasks into smaller, more manageable chunks to make the sum of the parts less daunting and easier to digest - such as breaking complex tasks into smaller stories.

Work From Home Wednesdays

Work From Home Wednesdays are a great way to recharge halfway through the week and focus on work from the comfort of home. It's great because I don't have to commute to work on Wednesdays, which means I can sleep in!

I've taken this opportunity to work from various cafés in San Francisco, Oakland, and Berkeley - which was a nice way to explore the Bay Area during work.

3. Social Culture

The social culture is what I believe separates Doximity from other companies. It's allowed me to form meaningful connections with full-time employees and other interns at the company.

Shack Lunch

Every two weeks, you have the option to opt-in to a 'shack lunch', which randomly assigns teams of six people from various departments for a group lunch.

Shack Lunch

Myself (left), and another intern Jitin (right) at a lunch event

This was a fantastic way to meet and interact with people at the company who I don't normally interact with on a day-to-day basis. Talking to other employees in various roles around the company gave me a better understanding and appreciation for the many different aspects which make a business function.

Events and Games

Doximity had an abundance of games, events, and tournaments during my time here in the summer - including a company-wide shuffleboard tournament and an 'arcade hoops' tournament.

Unfortunately, I bowed out early in both tournaments (I was never a good baller and I consider myself a shuffleboard novice), but I still had a lot of fun. Both tournaments had very inclusive environments, which made me feel very welcome at the company.

Doximity also has an annual summer internship competition where two teams of interns compete against one another. This entailed each team hosting a company-wide event, which was critiqued by a panel of full-time employees. Our team was responsible for organizing the 'Doximity Shuffleboard Tournament Finals,’ where we decorated the 'JBar' (the company bar), served food/drinks, and provided commentary for the evening festivities.

Final Words

Key Takeaways

Good written communication is 🔑 for software engineers

Working on a team with large remote presence helped to make me a better-written communicator.

Most of our communication is done via email, Slack, Pivotal Tracker, and GitHub, so having strong written communication skills is essential to being a successful member of the team.

Agile Principles: Communicate frequently, and deliver often

Agile Manifesto Principles

The principles of agile methodologies, such as early and continuous delivery of software and frequent communication with your stakeholders, helped me realize the importance of having business people and developers working together through the development process.

It's okay to make mistakes: we learn from them

No one’s perfect. Everyone makes mistakes - and that’s okay.

I made a bad assumption for an edge-case when writing a Redis-based locking mechanism for concurrent jobs in our internal deployment tool.

The tests I wrote accounted for the poor assumption in my code and led to some failing sidekiq jobs in the deployment software.

I was concerned this assumption would be a big issue, but we simply reverted my changes so I could fix them, and re-ran the failing deployment jobs.

This experience taught me a valuable lesson: everyone makes mistakes, and it’s part of the learning process. The important thing is to stay calm, keep a level head, and not lose your cool when debugging or devising a solution; it’s a natural part of the software development life cycle.

Conclusion

Working at Doximity has been a phenomenal experience - abundant with numerous opportunities for personal growth as an engineer, and as an individual.

Working at my desk in Doximity HQ

I couldn't be happier to have had my first work experience in the United States at Doximity and will be sad to return to school and say goodbye to all the friends I've made in my four months here.

Andrew Robert McBurney

...

Special thanks goes out to Jey Balachandran, Bruno Miranda, Chris Woodrich, and Priya Gangolly for reading drafts of this blog post, and for giving me their feedback!

Be sure to follow Doximity Engineering @dox_engineering if you'd like to be notified about updates to this blog post.