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.
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.
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!
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.
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.
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.
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
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.
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
Be sure to follow Doximity Engineering @dox_engineering if you'd like to be notified about updates to this blog post.