Work
Aiming to build productivity applications (and libraries) that both users and developers will love, I focused on collaboration algorithms, rendering techniques, editors, distributed systems and software architecture.
Here's a summary of my work so far.
Univer
Univer (opens in a new tab) 🌌 is a framework for building office suites, including documents, spreadsheets and slides. It's highly extensible and can be embedded into other applications. Univer now has been adopted by several companies.
I joined Univer in its very early stage as Teach Lead and Architecture. I designed its architecture, coded lots of core parts, lead its development, supervise the engineering team and support other engineers.
Technical Contributions
Architecture
Univer uses a plugin-based architecture and dependency injection to create a highly extensible architectural foundation.
In Univer, functionalities are registered into the application in the form of plugins, which means that users can choose the plugins they register according to their actual needs, and even develop their own plugins. Some pro features are implemented as close source plugins to serve the company's business model.
Moreover, it maximizes the isomorphism of various systems within Univer. By loading different plugins and injecting different dependencies, Univer can run on desktop and mobile browsers, as well as in web workers or Node.js as a computation engine or a collaborative engine.
Read more about its architecture in the official guide (opens in a new tab).
Collaboration engine
Collaborative editing is crucial to productivity applications. This involves multiple people editing the same document simultaneously. I engineered Univer's collaborative engine from the ground up. This engine leverages a state machine model and operational transformation (OT). It delivers this capability across various document types and supports offline editing. The team has enhanced it with advanced transformation functions, a comprehensive file history feature, and robust performance improvements.
You can read more about the system here: The OT algorithm and Univer's Collaborative Editing Design (opens in a new tab).
RPC & remote computing
For Univer instances deployed in different threads to communicate seamlessly, I designed and implemented the RPC packages. Univer now excels at running its frontend in the browser, while handling calculations in Web Worker, or even in a Node.js process on the Univer server. This significantly boosts performance and enhances user experience. You can read more about this on our official guide (opens in a new tab).
Management Contributions
Team building
I hired the founding front-end engineers and am responsible for technical interviews. I also designed the onboarding process for new engineers.
I regularly have technical training sessions to ensure our engineers are up-to-date with the latest technologies and best practices. 1:1s are conducted monthly to ensure that the team is aligned with the company's goals, and individuals are supported in their career development.
Project management
I play an important role in the project management of Univer, including task assignment, design review, progress tracking, and code review.
My previous work experience includes:
Lark Spreadsheets
At Lark spreadsheets, I was responsible for maintaining features and improving the maintainability of our codebase. Along with our tech leader and some colleagues, I designed a new architecture for Lark spreadsheets and it is partially adopted in our codebase, greatly improved the performance and maintainability of the new features.
I also lead a small group of 5 engineers to ensure our front-end is available and reliable.
redi
redi (opens in a new tab) is a open source dependency injection library. While keeping it simple, I introduces advanced features such as injecting factories, values, and even lazy dependencies based on Promises.
redi now powers Univer and several applications in ByteDance.
WeCom (WeChat for Enterprises) Document
During my tenure, I introduced dependency injection into the project, injecting the appropriate implementations for both desktop and mobile platforms. This change significantly reduced the package sizes on each platform. Additionally, I separated the code for non-essential features that are not required for initial screen rendering and implemented lazy loading for these components. This approach delayed their initialization, further decreasing the overall package size. As a result, I successfully reduced the initialization time for an empty document to under one second.
I also optimized the line-breaking algorithm to accurately handle graphemes, ensuring proper rendering of emojis. Furthermore, I enhanced the algorithm for processing lists by transitioning from full processing to incremental processing that aligns with the typesetting progress. This improvement cut the loading time for documents containing lot of list items (over 30,000+) by over ten seconds.
NG-ZORRO
I actively contributed to the component library community during my internship at Alibaba. NG-ZORRO (opens in a new tab) is an enterprise-class UI components based on Ant Design and Angular. I was responsible for developing and maintaining 20+ components.
, CC BY-NC 4.0 © Wenzhao.