25 How to Improve the R& D Efficiency of Organizations and Individuals

25 How to Improve the R&D Efficiency of Organizations and Individuals #

Through the study of the “High-Quality Development” module, I believe you are confident in creating a high-quality application. However, people often say “improve quality and efficiency” and always like to connect quality and efficiency together. We all hope to speed up our teams while ensuring quality.

Especially in today’s intensely competitive mobile internet industry, rapid trial and error has become increasingly important, and agile development is being advocated by more and more teams. Sometimes, in order to improve efficiency, we are even willing to sacrifice some performance and choose to repay these “debts” at the right time.

In the “High-Quality Development” module, I focus on how to do “quality inspections” for each step of application delivery. Today, let’s embark on a new journey together and re-examine the entire process of application delivery from the perspective of organizational and individual research and development efficiency.

R&D Efficiency for Organizations #

1. What is R&D Efficiency?

Before discussing how to optimize R&D efficiency for organizations, let’s first consider what R&D efficiency is.

In our usual development process, we start with an idea for a product requirement and transform it into a functional release. This process involves product, design, development, and testing, and often includes frontend, backend, or algorithm teams.

The delivery of a product involves many processes and personnel. Although designers can quickly provide designs and developers can work efficiently, this does not necessarily mean that R&D efficiency is also high. R&D efficiency is responsible for the speed and quality of the final product delivery. In the article “How to Measure R&D Efficiency”, R&D efficiency is defined as the ability of an organization to continuously deliver value quickly.

In the article, the author further breaks down R&D efficiency into flow efficiency, resource efficiency, and quality, and proposes five metrics for measuring R&D efficiency.

For client development, is it enough to ensure that requirements are implemented on time and with quality? Many companies, despite working “996” (meaning working from 9 am to 9 pm, 6 days a week), still find their delivery speed and quality unsatisfactory: product teams complain about low development efficiency, developers complain about unclear requirements, testers complain about poor development quality, and developers complain that testers cannot find problems, and so on.

Why is this happening? Although I am not an expert in R&D efficiency, based on my many years of work experience, I can offer two personal insights into this topic:

  • Improving efficiency is everyone’s responsibility. Although large companies like BAT (Baidu, Alibaba, Tencent) may have dedicated R&D efficiency departments, improving efficiency should not solely depend on these departments or be seen as the leader’s responsibility. It is something that every person in the organization should be thinking about. For example, Tmall sets a target of “211”: a 2-week delivery cycle, a 1-week development cycle, and 1-hour time for release. Every team member should strive for this common goal and review the problems encountered and suggestions for improvement in each release iteration.

  • Improving efficiency is not limited to writing Android code. Although we are Android developers, our work should not be limited to writing Android code. The key is to solve the requirements and scenarios. Whether it’s an APM system, a large-scale networking platform, a big data platform, or improvements in the requirements process or enhancing communication and trust between product, development, and testing teams, anything that helps improve efficiency is worth trying. Once we have developed this holistic mindset, it will greatly benefit us if we decide to switch to backend, frontend, or even product roles in the future.

WeChat introduced Google’s OKR performance evaluation system very early on. I remember that in 2017, the Android team set three goals: “quality,” “efficiency,” and “influence.”

Then, more than 30 developers on the Android team created their own work plans around these three goals. For example, regarding “efficiency,” some people developed a UI library or animation library, others created monitoring tools, others worked on improving compile speeds, others created a web on-duty page, and others optimized the requirement review process… In this way, everyone can brainstorm together, think together, and discuss together to work towards the common goals of the organization. This is also why even though there aren’t many WeChat developers, their combat effectiveness is among the best in the industry.

2. Application Delivery Process

Earlier, I defined the meaning of development efficiency and its five criteria from the perspective of the entire organization. I also shared my thoughts on improving development efficiency based on my experience at WeChat. Perhaps most students still feel that the product delivery process, such as product and UI design, is something that developers cannot control. So now, I will focus on how to improve efficiency from the perspective of the development process.

As I mentioned in the introduction of the column, “How to Build High-Quality Applications”, an application goes through several stages: development, compilation and Continuous Integration (CI), testing, gray release, and publishing. Now, let’s look at what issues need to be addressed in each stage from the perspective of efficiency.

  • Development Stage: The development stage aims to complete as many requirements as possible in the shortest time while ensuring the quality of development, so as to avoid excessive rework later. What should be considered when choosing the project’s architecture? For example, should we use native development or cross-platform solutions like Web, React Native, or Flutter? How can we improve the capabilities of team members and the maturity of tools and frameworks? What are some techniques to improve team productivity?

  • Compilation and CI Stage: The compilation and CI stage aims to identify and optimize coding issues in the development stage and quickly build the final product. What efforts have been made by Google’s Gradle and Facebook’s Buck to improve compilation speed? Why is Flutter’s hot reload so fast? What are the principles and differences between AspectJ, ASM, and ReDex as three types of instrumentation methods? What are the special features of Tencent’s RDM and Alibaba’s Motianlun in terms of compilation and build platforms?

  • Testing Stage: The testing stage aims to identify quality issues in the delivery process. Testing is indeed challenging and comes with high costs for automated testing, and it is not easy to control the quality of the release. So, how can we increase test coverage for more scenarios? How should we approach Monkey testing, performance testing, and UI testing? How do Tencent’s RDM and Ant Group’s Huoban enable everyone to participate in testing? What are the outstanding features of NetEase’s Airtest testing framework?

  • Gray Release and Publishing Stage: Gray release is for verifying the effectiveness of the product. Publishing is not simply about releasing the package; we need to take responsibility for our own products. So, how can we evaluate product data accurately and quickly? How do platforms like Toutiao and Kwai accomplish precision operations and A/B testing? How should we solve difficult online issues? And how can we diagnose and analyze complex and ever-changing network problems?

Of course, to improve efficiency in this process, we can use some useful third-party tools, such as Gerrit for code review, Jenkins for continuous integration, and Coverity for code auditing.

These tools not only automate a large amount of manual work but also facilitate better collaboration within the team. For example, visualizing the flow of requirements and scheduling can greatly reduce the communication barriers between project management, R&D, and testing teams. In this regard, Alibaba’s AONE and Tencent’s TPAD have done a great job.

Project management, requirement management, code hosting, build/deployment, testing platforms… these are the commonly used tools. Platforms like Alibaba’s YunXiao provide a one-stop solution, from requirement initiation to branch management, code review, and testing and release. In the past, these tools were the culmination of years of work in the development efficiency departments of major companies and were generally not made available to the public. However, thanks to the advent of the cloud era and the TOB era, they are now willing to package them as products for us to use.

Of course, each project may have its own special circumstances, and these tools may not fully meet our needs. We can choose suitable services based on our own situation or develop our own tools.

Personal Research and Development Efficiency #

As individuals who are part of an organization, our improvement in efficiency can also have a positive impact on the organization. Especially for small teams or independent developers, an individual may represent the whole team.

There are many books dedicated to discussing the improvement of personal efficiency and time management. Below, I will share two insights based on some negative observations I have made.

1. Thinking

One of the things young people should avoid is software that provides short-term pleasure. They steal your time without you realizing it, erode your willpower, and destroy your courage to move forward.

With the increasing amount of information we come across, more and more people find it difficult to maintain focus on tasks. During work, we often wish to browse through apps like TikTok, Toutiao (a news app), WeChat, or play games like Honor of Kings, consequently breaking our time into fragmented pieces.

You attended meetings all day and received new requirements, but what about your code?

There might be some people who don’t browse TikTok or Toutiao, but they still get bombarded with various emails, Dingtalk (a communication app), and meetings during work hours. To tackle this problem, my approach is to reserve at least one hour of uninterrupted time in the morning and afternoon, during which I don’t check emails, Dingtalk, or attend meetings. Of course, sometimes it is inevitable to be brought back to “reality” directly by the boss.

I often encounter team members facing similar challenges, and the end result could be a person who appears to be busy working “996” (working from 9am to 9pm, 6 days a week), but their output is not high, and personal growth is not significant.

Every day, we need to have a period of time to truly focus on our work, and periodically review our work to identify areas where we can improve. Are there any tasks that we or our team members are repeating poorly and inefficiently and can be optimized?

2. Methods

Regarding methods, I will only discuss two points that are frequently encountered by students.

  • Approach to tasks. I have seen some developers who love to use the binary search method to troubleshoot problems. When a tester reports a bug, they are proficient in using Git commands, and spend one to two hours generating dozens of test packages, tirelessly trying various approaches. Of course, I have used the binary search method as well. When I had no clue, it was indeed helpful to try something as a last resort. However, before resorting to this “big gun,” we should at least think for ourselves and attempt to attack the bug head-on.

  • Approach to asking questions. In WeChat and QQ (a social media platform) groups, it is common to see some students asking a question that could have been easily answered with a quick Google search. Then, they spend an hour chatting in the group, but still don’t get any answers. When I was working on the Tinker open source project, sometimes I was asked questions by users that left me feeling less enthusiastic. The fact is that asking questions reflects technical and professional qualities. Before asking a question, we need to put in our own effort and thinking. Here, I recommend reading “The Art of Asking Questions”.

Summary #

“Every day I examine myself three times” Whether it is the efficiency of organizational development or personal work efficiency, we need to learn to review and reflect regularly, evolve rapidly, iterate quickly, and strive to do better in the future.

What problems have you encountered in terms of work and study efficiency? Do you have any good methods and suggestions for improving work and study efficiency? Feel free to leave a comment and share with me and other classmates.

Feel free to click “Invite a Friend to Read” and share today’s content with your friends, inviting them to study together. I have also prepared a generous “Study Boost Package” for students who think deeply and actively share. Looking forward to learning and progressing with you!