My Software Engineer Internship at Bowtie
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. 🤩
🎀 Why Bowtie?
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. 🚀
🌲 T-shaped Skills
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:
- Vertical (
|): Depth of expertise in one discipline
– i.e., Front-end coding skills, deep understanding of front-end technology
- Horizontal (
—): Breadth of cross-disciplinary skills
– i.e., Back-end skills, communication and collaboration skills, creativity
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”. 🙌
Let’s begin with the vertical stroke — front-end development skills. 🖥️
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.
Showcase — Component Library
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”.
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
- 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. 👍
🛠️ Cross-Disciplinary Skills
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. 🚀
🔑 Key Takeaways
Other than developing my T-shaped skills, this internship helped me cultivate a good software engineer mindset. That mindset includes:
- Uphold the highest standards. Learning from the feedback I received from code reviews, I understood the importance of upholding the highest standard to make the codebase reliable, maintainable, and well-documented.
- Aim for simplicity. “An idiot admires complexity, a genius admires simplicity”. I learned this the hard way when I was implementing our component library. I shot myself in the foot when I first designed a confusing and over-engineered solution to accommodate edge use cases. Soon I realized the best solution is to keep it simple and minimalistic.
- Open to continuous learning. When I first joined the company, I was intimidated by how many things I don’t know, whether technical or business domain related. Knowing there’s a long road ahead of me, I learned to stay humble as a continuous learner rather than feeling discouraged.
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 🙌. If you’re looking for an intern, apply now!