Anson HEUNG, a Year 5 student of Dual Degree Program in Technology & Management (T&M-DDP) has recently completed his software engineer internship at Bowtie, Hong Kong’s first virtual insurer, and would like to share his rewarding journey with you.
My name is Anson, a student from The Hong Kong University of Science and Technology majoring in Computer Science and General Business Management.
This summer, I had the great opportunity to join Bowtie as a software engineer intern. I had a really awesome three-month journey, and I think it’s worth a share.
Bowtie caught my attention when I encountered their eye-catching “Debug Insurance” ad campaign a year ago. I was very impressed by their “someone to help, nobody to sell” slogan, and their ability to deliver a pure virtual insurance experience without insurance brokers.
After a dive into Bowtie’s website, I felt excited by its mission to revolutionize the insurance industry with digital technology and make insurance great again. When I saw their software engineering intern job post, I knew this is a golden opportunity for me to bring a social impact with my coding skills.
I was lucky to get an offer after a few rounds of interviews, and here began my three-month journey of being a software engineer intern at Bowtie.
Upon joining the engineering team, my supervisors introduced me to the concept of T-shaped skills, which is a metaphor for what makes an employee valuable. Being an aspiring front-end engineer, here’s how each stroke in the letter “T” means:
I think this is an outstanding metaphor to describe a great software engineer. A well-rounded developer is not only a coding expert with deep domain knowledge but also a strong team player who collaborates smoothly with other engineers and stakeholders.
I’m grateful that my internship greatly helped me to develop my T-skills. Let me share more about it in terms of both “vertical” and “horizontal” strokes of the letter “T”.
Our company uses TypeScript React to create our customer portal and admin website. I gained a lot of insights into how to structure a large-scale web app to make it maintainable and extensible. With code reviews and pair programming sessions, I learned plenty of best practices on how to write clean and future-proof code.
I took the initiative to develop an internal component library called BOWkit with the aim of integrating into the customer portal. My task was to implement new components from scratch based on our design system specification created in Figma.
One interesting component that I developed is called “Stepper”. We use Storybook to develop BOWkit and generate documentation. Despite how innocent and simple it looks, it’s a sophisticated task to design a good component API. The main challenge is to maintain a simplistic API for common use cases while allowing room to handle complex interaction logic.
For instance, one use case requires the user to be able to visit previously completed steps by clicking the step label. “Should we encapsulate this complex interaction logic within the Stepper component?” With this question in mind, the API went through few rounds of iteration. After consulting with senior developers, I decided to lift up the handling of interaction logic to the consumer of this component because this interaction logic is too use case specific to be encapsulated and Stepper should be a “dumb” component (i.e., it’s purely presentational) to make it more reusable.
At the end, this component took my two weeks of time from scratch to finish. While it may seem a lot of time is spent for something so minor, the effort of iterating the component API design is well justified.
Back to the T-shaped skills I mentioned earlier. This internship also helped me develop my horizontal stroke — cross-disciplinary skills.
When I first joined, the back-end is like a black box that works magically. Midway through the intern, I got a taste of back-end development with Django REST framework. I worked on deprecating old fields in an API endpoint, as well as changing the schema of a field. My colleagues gave me insightful advice on performing safe migrations, and I got to appreciate the meticulous planning behind each migration to minimize service disruption.
Collaboration with colleagues with different technical backgrounds is certainly not an easy task. For instance, I was tasked to add new features to the customer portal’s claim application page, and I needed to collaborate with one back-end engineer and one designer.
To align everyone, my supervisor advised me to write both functional and technical specifications. The difference is that a functional specification describes what the feature should do (e.g., “Users can view XXX”), while a technical specification describes how to implement it.
With these specifications, designers quickly understood what requirements their design should satisfy and the back-end engineer could work on the API with my desired schema. The collaboration went smoothly and I got my feature done on time.
Other than developing my T-shaped skills, this internship helped me cultivate a good software engineer mindset. That mindset includes:
I am very thankful that I can be part of Bowtie with this internship. My colleagues are incredibly nice and helpful, and I really enjoy the fun and autonomous startup culture.
(The above article is edited with editorial changes. Please read the full article here.)