Review My Journey at Junyi Academy

Introduction

cover image

Junyi Academy, a non-profit organization, is often regarded as the Taiwanese equivalent of Khan Academy. Before joining Junyi Academy, I learned that their codebase was disorganized and that they lacked developers with expertise in frontend development. As a result, they needed someone to lead the frontend team, which at the time consisted of two frontend engineers and two interns.

Upon joining Junyi Academy as the frontend lead, I identified two major problems. The first issue came to light after attending several meetings hosted by various teams, during which I noticed a troubling disconnect between the engineering team and other departments. Non-engineering team members expressed that engineers appeared to prioritize new technology while neglecting their needs.

The second problem was the codebase, which had been forked from Khan Academy in 2013. Since then, engineers had developed the website using a diverse array of libraries, including Bootstrap, Jinja2, Handlebars, Backbone, jQuery, and React. Some of these libraries even had multiple versions. This situation led to poor scalability, consistency, maintainability, and performance, ..., just to name a few. Compounding the issue, delivering a simple feature could take months, and once released, a multitude of defects would require our attention and subsequent fixes.

Although I was eager to address the codebase issues immediately, I opted to tackle the first problem first, fearing that the relationship between teams could deteriorate further. I devoted considerable effort to explaining my plans and their importance to members from other departments. Simultaneously, I collected their needs and sought ways to make impactful improvements with minimal effort. Fortunately, I discovered a solution that reduced the time needed for creating question banks by 90%, which was crucial since we are a website providing free educational resources.

Having bought some time for myself and the engineering team, I turned my attention to improving the engineering aspects. I organized internal study groups and workshops to discuss and make key technical decisions, such as frontend architecture, coding guidelines, library selection, testing strategies, and more. Most importantly, I devised a plan to migrate our large-scale, monolithic legacy application. A complete rewrite was unrealistic, so I applied a Strangler Pattern by dividing the product into smaller functional pieces and routing. This approach allowed us to keep the monolithic system alive while gradually redirecting users to newly refactored pieces.

After easing tensions between teams and devising a migration plan, I decided not to execute the migration immediately. Instead, I chose to prioritize delivering a few new features, which would allow us to validate our approaches and demonstrate the value of our efforts to other teams. Our new methods not only enabled us to deliver new features 300% faster, but also reduced defects by 80%. I conducted a survey within the frontend team, and the results showed that all members were more satisfied with our new approaches, experiencing an average threefold increase in development efficiency. With this positive feedback, I knew it was the right time to initiate our migration plan.

In my last few months at Junyi Academy, I launched a volunteer program that attracted over thirty applications. I started with four volunteers who committed to over 20 hours a month. Thanks to our coding guidelines and the existing code we wrote for the few features mentioned earlier, onboarding them was a smooth process. Within three months, they had helped us migrate about 12% of the legacy code. I look forward to seeing this project grow into a thriving community that benefits even more children.

In conclusion, my experience at Junyi Academy taught me the importance of addressing both interpersonal and technical challenges in order to create a more efficient and collaborative work environment. By fostering open communication and implementing effective strategies, we were able to improve both the development process and the overall product. I am confident that the progress we made will continue to benefit the academy, its volunteers, and most importantly, the children who rely on our educational resources.