In order to win this inevitable battle and fight against COVID-19, we must work together and share our experiences around the world. Join us in the fight against the outbreak through the Global MediXchange for Combating COVID-19 (GMCC) program. Apply now at https://covid-19.alibabacloud.com/
By Yunyue(Zhang Liaoyuan).
With Chinese New Year officially over but many people still at home, we’ve all had to learn to change our daily routines, from just lounging around the house in pajamas to learning how to actually get work done at home.
In response to the new and evolving situation, I wanted to share what I have come to realize while working from home. As an R&D specialist at Alibaba, I’ve learned a lot about what makes for good software R&D collaboration while working remotely. Here I’m going to share what I’ve learned.
Focusing on Needs vs. Focusing on Tasks
For my first point, I want to get the point of why we shouldn’t focus all of our attention of “tasks” instead of the “values” and “needs” that tasks actually relate to.
To understand why we shouldn’t focus on “tasks” alone, it’s important to know what “value” and “needs” are exactly in the software development process. For me, “value” can be understood the value that software development and delivery can bring to your company. Similarly, a “need” can be described as an improvement in the software, something that addresses a need of the business or the end user.
To dig even deeper, “needs” are reflective of user problems and your business objectives. They can also be considered from different aspects. In order to make good software, “needs” must to be addressed in testable and deliverable solutions. This process involves verifying an original hypothesis about your users and your business, and finding a way to create value for your organization.
Now that we understand what “value” and “needs” are, let’s think about what exactly “tasks” are then. As far as I see it, “tasks” are sort of like transactions, but within your various teams. Tasks involve resources like man-hours.
So why should we focus on needs and not tasks? Well, to be a good software developer, you can’t just go through the motions of completing a few tasks. You need to have the necessary perspective to be able to understand the general needs and objectives of your company. Focusing your needs means stepping beyond your team and its tasks to think of how you can add value to your organization.
The need delivery process can be visualized by the lean delivery dashboard.
- Value-driven: Each unit in the flow reflects business needs that represent the value to users.
- Connected: The process is visualized as a value stream from beginning to end. It starts with the presentation of the user’s problem and ends with its resolution.
- Outcome over output: We want to minimize “task output” while maximizing “need outcomes.”
So, to summarize things, dashboards are an important tool as they help us to visualize the fact that all of the tasks we are doing are part of the delivery process. This is important because, at the end of the day, our focus should be on the “needs” and “value” involved in that delivery process, rather than the specific “tasks” we are doing.
Flow Efficiency vs. Resource Efficiency
My second point is related to the difference between “flow efficiency” and “resource efficiency.” The overall product delivery process requires a lot of coordination between several different teams, including the business, as well as the product, development, testing, and O&M teams. If we are to focus on “flow efficiency,” then we would understand “needs” as the units in the overall business or process. “Needs” come from users and then flow back to users. The speed of the flow determines the efficiency of user response and feedback acquisition.
In contrast to this, if we think about things in terms of “resource efficiency,” then we will be focusing in on the efficiency of each individual and human resource in the chain of things. However, a single-minded focus on “resource efficiency” won’t help us improve the overall picture to improve the efficiency at which the entire chain flows.
So, if we take “flow efficiency” as the most important concern in our business, all of the related functional elements in the delivery process must be connected, so that we can break down organizational barriers. In addition, by focusing on flow efficiency, we can also help our organization to expose collaboration issues, such as obstacles that may limit collaboration and pose wait times for the participation of others in the process. These issues are important to consider, as they may be related to collaboration streamlining or our engineering capabilities.
So, to conclude this section, when it comes to the software R&D process, the main problem is not with your “resources,” but rather with unmet needs. That is, it’s important to consider the entire flow or process of how things work, rather than just the resources that are involved within that process. This is something we often struggle with, not being able to see things beyond their meager parts but rather as the entire process and values that they represent.
Focusing on Problems vs. Focusing on Activities
When it comes to collaboration in software projects, the key issues are resolving problems, removing obstacles, and how finding a way to meet needs at every stage of the process. In project collaboration, we need to consider all of the following questions:
- What are the current obstacles we are facing?
- What are the unmet needs that we still need to resolve?
- What are some of the dependencies we may be forgetting?
- What are some interruptions in the value delivery process?
- What are some bottlenecks in the current delivery process?
For these questions, my recommendation is that you follow the 6 + 1 step approach, which can help you to focus on the correct issues during collaboration, rather than distracting yourself with the wrong ones. Consider the figure below.
Of course, it doesn’t make too much sense to focus too much on the minor details. How you go forward with these kinds of activities depends largely on you. So, the purpose of setting up a specific framework or schedule for yourself isn’t to tell you what to do or to limit you, but rather to help you better understand what are your specific “needs.”
Cross-Functional Team vs. Single-Function Teams
Now let’s discuss why cross-functional teams are better than single-function teams. Driven by “needs” and focusing on “flow efficiency” means that, in the collaboration process, we adopt a business-driven integration of all functional elements, including the business, product, development, and testing pieces of the puzzle. This requires cross-functional coordination. Teams with a single “function” tend to form function silos. As a result, each team remains busy, but the overall system collaboration efficiency is low.
We can generally assume that the communication efficiency within a team is always greater than that of different teams interfacing with each other. This makes sense. When everyone’s familiar with each other, they can do things faster together more coordinated with each other. Therefore, based on this, we can conclude that, by establishing a cross-functional team, we can reduce the time needed for waiting during the collaboration process and focus on the final delivery of solutions for our “needs,” rather than the completion of “tasks.” Cross-functional teams can be physical teams.
But, as we all very well know now with more and more people working remotely, that’s now always possible. At Alibaba, we have tried to create physical spaces at our offices for cross-functional teams with one big project room. With everyone working remotely now, messaging platforms can similarly serve as that big project room.
Cloud Code Hosting vs. Internal Network Hosting
Now let’s discuss why you may want to consider using cloud code hosting over internal network hosting at your company.
When code is hosted in the cloud, developers can work anytime and anywhere as long as they have a computer and Wi-Fi connection. This is why having code hosted on the cloud really is the best option, especially now as many of us are working from home.
Based on Git’s distributed version control system, code can be committed even without Internet connections. Then, when a connection is available, the code is uploaded and synchronized to the cloud, improving the efficiency of code collaboration.
One major problem with internal network hosting is that, if your company’s VPN is unstable, remote collaboration performance can fluctuate greatly. And now, given the new and evolving situation we are living in, where people are starting to work home, this approach can lead to several major problems such as employees unable to access necessary resources or your VPN all together going down.
The general mood of code sharing and reuse depends on the complex permission control systems of code platforms. This is, of course, a double-edged sword. The more open a platform is, the higher the risk of code leakage, but the more closed a platform is, the lower its collaboration efficiency. To enable developers to enjoy the benefits of code collaboration, we must pay attention to the following aspects:
- Sensitive information in the code: The leak of sensitive information, such as database passwords, could be devastating to your company’s business.
- Access control: This includes control over commonly used IP addresses, the prompt revocation of permissions for former employees, and the proper setup of code library visibility, among other controls.
- Identifying Abnormal behavior: This includes both post-event audits and advance warning capabilities, such as the detection and warning of suspicious code downloads.
Code Scan vs. Code Review
Now, let’s discuss why you shouldn’t overlook code scans as a tool in your toolkit. Many people often emphasize the importance of reviewing code but ignore the benefits of automated code scans. Reviewing code may be helpful, but it does not necessary directly improve the quality of the code. Rather, it’s more like a kind of “social programming” activity because promotes the sharing of knowledge within the team, among other things.
On the other hand, code scans can help you to automatically check the code quality and take technical measures to promote high code visibility, such as code duplication, complexity, fan-in or fan-out dependency, and domain language recognition. This approach is also much more efficient than manual inspection.
And we have options. We can combine static code scans and protocol scan to quickly identify problems in the code, such as formatting problems, basic syntax errors, and potential memory exceptions. We can also use dynamic inspection to check for memory and performance problems. For example, in C or C++, common tools like Valgrind, llvm-clang, and efence can perform dynamic inspection. For Java developers, Alibaba code specifications provide a good solution. R&D Collaboration code management tools and built-in code security scanning functions can detect most code security issues.
Continuous Release vs. Batch Release
Next, let’s discuss why you should choose continuous release over batch release. “Continuous release” refers to the continuous, fast, and reliable release of software. Continuous release can help developers quickly discover problems. It can also help us discover engineering efficiency problems. To achieve continuous release, you must do the following:
- Establish a unified and standardized release process. Use tools built into the process to prevent the problems and security risks due to excessive human participation.
- Establish an automatic and comprehensive quality assurance system
- As far as possible, use automated deployment methods with no human intervention, such as Docker images, code and configuration separation, and the building of multiple deployments at a time.
Continuous release produces continuous feedback every day. It provides more opportunities for feedback and continuous improvement. This helps you improve release quality and engineering efficiency. With a cloud-based all-in-one code hosting and continuous publishing system, you can quickly discover issues and receive immediate feedback. This makes online collaborative release possible.
In contrast, “batch release” generally results in many problems that occur at the same time. Traditional upgrade methods often use batch release. However, this approach is becoming much less suitable for today’s fast-changing environment.
Automated Regression vs. Manual Verification
Last, let’s discuss why automated regression is a helpful tool. When it comes to continuous releases, the efficiency of continuous release is limited by the efficiency of regression testing. When you use a manual verification method, efficiency completely depends on how fast the personnel can work. When you develop software for multiple platforms and environments, manual verification typically cannot keep up with engineering efficiency. In contrast, automated regression is very efficient and can enable developers to quickly obtain feedback upon every commit, giving them greater confidence and peace of mind.
With automated regression, regression verification for the continuous integration system is automatically triggered when developers commit code. This way, developers receive immediate feedback and can quickly locate and fix bugs, and that they can commit the code again for another round of regression verification.
In this article, I have gone over some of the most common mistakes that may occur during collaboration, providing some useful considerations and methods to remedy these mistakes. I hope that I have inspired you to work better in your collaboration efforts in the future. Working from home isn’t always easy, but if you implement these changes, your team will work even more efficiently. And these methods are not only good for when you’re working from home, they’re also great in the office, too.
While continuing to wage war against the worldwide outbreak, Alibaba Cloud will play its part and will do all it can to help others in their battles with the coronavirus. Learn how we can support your business continuity at https://www.alibabacloud.com/campaign/supports-your-business-anytime