Interning at ByteDance – My Reflections
Reflections on my 6 months internship at ByteDance
Written on: 29 Nov 2023
Reflections on my 6 months internship at ByteDanceWritten on: 29 Nov 2023
Yesterday marked the conclusion of my internship journey with ByteDance, a rewarding six-month experience as an intern in the role of a Cloud Infrastructure Software Engineer. During this internship, I had the privilege of being a part of the core team responsible for migrating a significant portion of ByteDance's business products from their internal cloud infrastructure to the public cloud. This experience provided me with invaluable insights into ByteDance's cloud architecture, infrastructure, and the complexities associated with large-scale migration projects. Moreover, I had the opportunity to learn from exceptionally talented individuals and gain insights into the development of distributed storage and message queue systems at scale.
In this blog post, I won't delve into the technical details of my work but will instead focus on sharing my reflections on the internship journey. I'll discuss the lessons I've acquired, the challenges I've encountered, and the aspects of the experience that I found particularly enjoyable.
These days, there are many online resources on some of the daily habits of a great engineer. I've tried to adopt some of these habits and I've found them to be really useful. Here are some of my favourites:
At the beginning of my internship, I often found myself going through numerous code iterations and making minor adjustments to my pull requests more frequently than I'd prefer. This tendency largely stemmed from not having a comprehensive grasp of the problem's context. Several factors contributed to this situation, including inadequate documentation, language barriers (since many of my colleagues were primarily Chinese speakers), and, most crucially, a limited understanding of the business use case behind my tasks. Having a thorough understanding of the complete context surrounding my work was instrumental in making informed decisions right from the start and proactively avoiding potential pitfalls. Ever since the beginning, I've gotten much better at clarifying the problem and have seen huge improvements in my rate of meaningful contributions. Indeed, a moment of clarity is worth countless hours of debugging and making adjustments to the code.
Everyone acknowledges the significance of thorough documentation, but I'd like to emphasize the practice of documenting daily tasks and thoughts. At ByteDance, we have a super app called Lark, and I particularly enjoy using its Docs feature, which closely resembles Notion. My routine involves creating a fresh weekly document at the beginning of each week, wherein I diligently record my daily tasks. This document also serves as a handy notepad where I can jot down crucial information for future reference. One great feature of Docs is its support for code blocks, making it exceptionally convenient for quickly capturing code snippets.
I adopted a weekly time granularity for my document as I usually reference the things that I've noted down within the week. Using a daily document would involve too much switching between documents.
The act of documenting my daily tasks not only liberates me from the burden of remembering what I need to accomplish but also grants me a sense of control over my life. Before I adopted this habit, I often found myself forgetting the tasks I completed the previous day, and entire weeks would blur together. There were instances when I introduced 5-10 new features or bug fixes in a week, yet it felt as though I had achieved very little. With the aid of a weekly document, I can effortlessly review my accomplishments and make improvements to my work style to be more efficient the following week.
Bonus: you can also add your supervisor to your weekly document and they can easily see what you've been working on. It also helps with your 1-on-1s and performance reviews.
At ByteDance, our lunch breaks are quite generous. During this period, some individuals will try to catch a quick nap, while others opt for a refreshing walk. Then there's a particularly inspiring group of individuals who invest their lunch breaks in staying informed about the latest technologies and current events. What sets them apart is their dedication to going the extra mile – they not only keep up with the news but also delve into white papers to grasp the fundamentals and mathematical foundations of these technologies. This latter group serves as a profound source of inspiration, and motivates me to keep up with my daily readings, podcasts and newsletters.
Personally, I spent my time going a short walk with my friends to get coffee. During this time, we discuss a diverse range of topics: from technical discussions to current events to personal life. I find this to be a great balance.
Post lunch coffee run with my friends
While it's undeniably crucial to focus on the technical aspects of my job, I've come to appreciate the significance of prioritizing my physical well-being. I've noticed that in weeks where I engage in less physical activity than usual, I tend to experience increased fatigue and diminished overall happiness at work. This, in turn, affects my ability to sleep, leading to a vicious cycle of reduced exercise and disrupted sleep patterns. Another valuable practice I've adopted is taking regular breaks throughout the workday. Taking a moment to stand up and walk around the office not only prevents my leg muscles from becoming stiff but also provides my brain with a brief respite from constant cognitive demands. All in all, by proactively caring for my health, I've not only enhanced my performance at work but also cultivated a greater sense of happiness and well-being.
In my view, the role of a team player stands out as perhaps the most crucial aspect of being an exceptional engineer. While your technical skills may not be top-notch right from the start, possessing the right mindset and attitude can take you a long way. To be a team player means excelling in effective communication with your teammates, practicing patience when others make mistakes or trigger frustration, and, above all, maintaining humility and a willingness to learn from your peers. Every problem should be seen as an opportunity for personal growth and development – seize it as a chance to engage with your teammates, fostering improvements that benefit the entire team. With this mindset, you'll naturally be able to develop your technical skills and become a better engineer eventually.
In summary, my experience at ByteDance has been truly enjoyable. I've had the privilege of encountering incredibly inspiring individuals who have not only motivated me but also imparted valuable knowledge. I'll certainly miss the friends I've made during my time there, and I look forward to the possibility of reuniting with them in the future. If you've found this reflection piece helpful, please consider sharing it with your friends and colleagues. Until next time!
– Josh