In traditional, function-based organizational structures, there is often an invisible but solid "wall" between business teams (product, operations, marketing, etc.) and technical teams (engineers, QA, DevOps, etc.).
The business team is responsible for "proposing requirements." They think about "what should we do to satisfy users and win the market?"
The technical team is responsible for "implementing requirements." They think about "how should we implement the features proposed by the business, efficiently and stably?"
This division of labor seems clear -- everyone has their own role. But in practice, it often leads to an inefficient and dangerous collaboration model called "requirement feeding." The business team, like feeding food, throws prepared "requirements documents" over the wall to the technical team. The technical team, like a black box machine, silently receives these "inputs," and after a period of "processing," throws a "feature" back over the wall as an "output."
In this process, communication between the two sides is one-way, impoverished, and even filled with misunderstanding and suspicion.
Engineers complain: "The product manager proposed another unrealistic requirement, completely ignoring the implementation difficulty!"
Product managers complain: "How can the engineers be so rigid? I just want to change a bit of copy, and they say they need to change the underlying architecture!"
This kind of "wall" is an efficiency bottleneck in any organization. In a remote collaboration environment, this wall is infinitely heightened and thickened by physical distance and asynchronous communication, eventually becoming an insurmountable "chasm."
When engineers cannot conveniently and informally have "hallway conversations" or "whiteboard discussions" with product managers; when all communication must rely on formal, written documents and meetings -- any deviation in requirements understanding can be amplified and solidified into the final code implementation at a very high cost.
To break down this wall, we cannot rely solely on "better communication tools" or "more frequent meetings." We need a deeper transformation, from "role positioning" to "thinking mode."
Engineers can no longer see themselves merely as "solvers of technical problems." They must step forward, cross that false boundary, and see themselves as "co-solvers of business problems."
This means engineers need to cultivate a capability we call "business empathy." They need to understand, like a product manager, who our users are and what their pain points are. They need to think, like an operations person, about how our product can succeed in the market.
An engineer who only knows technology is a "craftsman." They can lay the bricks assigned to them neatly.
An engineer who understands business is an "architect." They will think about whether we should use these bricks to build a church or a prison.
In this chapter, we will provide a practical guide for engineers to become "business experts." We will explore how to distinguish between business problems and technical problems, how to determine when business confirmation is needed, and why "over-communication" is a necessary "safety redundancy" when crossing the boundary between business and technology.
What Is a Business Problem? What Is a Technical Problem?
To become a "solver of business problems," we first need a basic but crucial ability: distinguishing between "business problems" and "technical problems."
This distinction seems simple, but in daily work, we often confuse the two, thus seeking solutions at the wrong level.
Business problems:
- Definition: Business problems are about "what" (What) and "why" (Why). They are usually directly related to users, markets, revenue, costs, efficiency, etc.
- Core concern: Value. What value can this feature create for the user/company?
- Examples:
- "We found that the new user registration conversion rate has dropped noticeably over the past month." (This is a business problem)
- "We hope to improve the new user registration experience by introducing a 'WeChat One-Click Login' feature, thereby restoring the conversion rate to its previous level." (This is a business-level solution to a business problem)
- "A competitor has launched a 'group buying' feature and is rapidly grabbing our market share." (This is a business problem)
Technical problems:
- Definition: Technical problems are about "how" (How). They are usually directly related to code, architecture, performance, stability, maintainability, etc.
- Core concern: Implementation. What technical solution should we use to implement the business requirements most efficiently and reliably?
- Examples:
- "To implement 'WeChat One-Click Login,' should we build our own integration with the WeChat Open Platform, or use a third-party social login service?" (This is a technical problem)
- "When designing the database for the 'group buying' feature, how should we structure the tables to ensure inventory accuracy under high concurrency?" (This is a technical problem)
- "Our existing user service, due to outdated code and lack of tests, makes every modification painful and prone to causing online incidents." (This is a technical problem, often called "technical debt")
Why Is Distinguishing Between the Two So Important?
Because we can never use a purely technical solution to solve a business problem that has not yet been clearly defined.
Imagine this scenario:
The product manager comes to you and says: "We need to refactor our entire homepage tech stack from Vue to React."
A "craftsman-type" engineer's reaction: They immediately start thinking about how to refactor. Should they use a micro-frontend approach to gradually replace it, or stop all business and refactor all at once? They will start evaluating React's technical advantages and researching related ecosystem libraries. They directly interpret this as a "technical problem."
An "architect-type" engineer's reaction: They first step back and ask a "why": "Why do we need to do this refactoring? What business problem do we expect to solve through this refactoring?"
Through this question, they may discover that behind the product manager's "technical solution" lies a real "business problem":
- Possibility one: "Because we found that the homepage load speed is too slow, leading to a high user bounce rate. I heard React has better performance."
- Possibility two: "Because the new frontend engineers we hired are more familiar with React, and development efficiency with Vue is very low."
- Possibility three: "Because I saw that the competitor's website is built with React and it looks cool."
The same "technical requirement" may have completely different "business motivations" behind it. And different business motivations will lead to completely different, better solutions.
For possibility one (performance issue): Solving a performance problem does not necessarily require refactoring the entire tech stack. Perhaps we only need to do some image optimization, code splitting, and CDN acceleration to achieve most of the effect at a small fraction of the cost.
For possibility two (efficiency issue): Solving the team's efficiency problem might be better addressed by organizing an internal Vue training session, or focusing on hiring candidates familiar with the existing tech stack.
For possibility three (blindly following trends): This is an invalid business motivation. The engineer has a responsibility, using their professional knowledge, to explain to the product manager that technology selection should be based on actual problems, not "feelings."
This example clearly reveals a core principle:
When receiving a requirement, the engineer's first task is not to think about "how to implement," but to "decode" the genuine, worth-solving "business problem" behind the requirement.
How to Cultivate the Ability to "Decode Business Problems"?
Always Ask One More "Why" (The 5 Whys)
Just like the "5 Whys" method we discussed in "blameless postmortems," it is also applicable to requirements analysis. When the product manager tells you "do A," ask like a curious child, persistently digging deeper:
"Why do we want to do A?" -> "Because we want to solve problem B."
"Why does problem B occur?" -> "Because it is caused by reason C."
"Why does reason C exist?" -> ...
Through this layer-by-layer questioning, you can often dig from a surface-level "feature requirement" to a deeper-level "user pain point" or "business bottleneck."
Put Yourself in the "User Story"
A good requirement is usually expressed in the form of a "User Story": "As a <user role>, I want <to perform an action> so that <I can achieve a goal>."
When you see such a description, don't just treat it as text. Do a "role-play" in your mind.
Imagine you are that <user role>.
What scenario are you in right now?
What difficulty are you facing? How are you feeling emotionally?
How will your life be wonderfully transformed after using the feature we are about to develop?
This "empathy" exercise allows you to switch from a cold, functional perspective to a warm, human perspective, to understand the "soul" of the requirement.
Pay Attention to Data, Understand Data
Data is the most objective and powerful bridge connecting technology and business. Engineers should not only care about CPU and memory monitoring data but should also proactively pay attention to and understand "business data."
Proactively learn what the team's "North Star metric" is. (e.g., Daily Active Users, User Retention Rate, Gross Merchandise Volume, etc.)
When developing a new feature, proactively ask the product manager: "After this feature goes live, what data changes do we expect to see? How should we set up tracking and monitoring for this data?"
Regularly check the product's core data reports. Try to understand the relationships between different data points.
When you start thinking in the "language of data," you gain the ability to have conversations with the business team on the same "channel."
Like a "Product Manager," Use and Experience Your Own Product
Don't only use your product in your own development environment. Register a real online account and go through the entire product flow just like a regular user.
Experience for yourself: Is our registration process too cumbersome?
Feel for yourself: Is our page load really a bit slow?
Try for yourself: When the network is poor, does our app crash frequently?
This "first-hand" user experience gives you a much deeper and more intuitive "pain point" than any requirements document. And this pain point is the greatest driving force for you to proactively and creatively solve problems.
Distinguishing between business problems and technical problems is the first step for an engineer to move from "passive execution" to "active creation." It means you no longer see yourself as a "cog" on an assembly line, but as an indispensable "core component" with independent thinking ability in the entire "product creation engine."
How to Determine If an Issue Requires Business Confirmation?
When you start examining your work from the perspective of a "business problem solver," you will find that during development, you encounter many "fork in the road" moments. At these forks, you make choices. And many choices have impacts that go beyond the purely technical and directly touch on user experience and business logic.
In these moments, an immature engineer might make a decision based on their own "technical preference" or "assumption." A mature, business-savvy engineer will immediately recognize: "This is a decision point that requires confirmation from the business side (usually the product manager)."
The core criterion for determining whether an issue requires business confirmation is: Will this decision affect "user-perceivable" behavior or outcomes?
If the answer is yes, then no matter how "trivial" the decision seems technically, you must stop and proactively, clearly seek confirmation from the business side.
Common "Decision Points" That Require Business Confirmation
Handling "Anomalies" and "Edge Cases"
Requirements documents usually only describe the "normal flow" under "sunny day scenarios." But a robust system's complexity, most of it, comes from handling various "anomalies" and "edge cases." How to handle these is often a "business decision," not a "technical decision."
Scenario: You are developing a "user upload avatar" feature. The requirements document says the user can select an image to upload.
Questions you need to ask:
- If the user uploads not an image but a
zipfile, what should we do? Directly report an error, or try to decompress it? (Business decision) - If the uploaded image exceeds the server's 5MB size limit, how should we prompt the user? Show a generic "upload failed," or a friendly "Image is too large! Please choose an image smaller than 5MB"? (Business decision)
- If the network connection is interrupted during upload, what should we do? Let the upload fail, or support "resumable upload"? (This is a technical decision, but it affects user experience, so it needs input from the PM.)
Handling "Ambiguity" and "Undefined" Behavior
Requirements documents are written by humans; they cannot be complete. There will inevitably be unclear or undefined situations.
Scenario: You are developing a "shopping cart" feature for e-commerce. The requirement document says users can add products to the cart.
Questions you need to ask:
- If a product is taken down by the merchant after the user added it to the cart, how should it be displayed on the cart page? Disappear directly, or show "Invalid"? (Business decision)
- If a user adds products without logging in, then logs in on another device, should the previously added products be merged into their account? (Business decision)
- Is there a limit on the number of products in the cart? If so, what is it? How should the user be prompted when the limit is reached? (Business decision)
When "Technical Constraints" Conflict with "Ideal Experience"
Many times, a "perfect" user experience may have enormous technical implementation costs behind it. The engineer's responsibility is not to simply tell the product manager "we can't do it," but to clearly lay out the different technical solutions, along with their respective "costs" and "experience compromises," for the product manager to make a business decision based on "return on investment" (ROI).
Scenario: The product manager wants to implement a "real-time show when the other person is typing..." feature in a social product with millions of users.
Your professional analysis and questioning: "To implement this 'real-time' feature, we would need to use WebSocket persistent connections. This brings two main costs: 1. The server must maintain a massive number of persistent connections, rising by an order of magnitude compared to the steady state; 2. Client battery drain would increase significantly."
"We have two options:
- Option A (Polling): We can query the server for the other person's status every 5 seconds. This option has a low cost, but the experience would have up to 5 seconds of delay.
- Option B (Persistent Connection): We can achieve a perfect real-time experience, but it requires additional server resources and may receive user complaints about 'battery drain.'"
"Given our current business focus, do you think we should pursue this 'extreme' experience (Option B), or accept a 'good enough' experience but invest resources in more core features (Option A)?"
See? Through this approach, you have turned what seemed like a "technical implementation" issue into a "resource allocation" and "priority" business decision. You didn't make the decision for the product manager; you empowered them to make a more informed decision by providing professional input.
How to Conduct a "Professional" Business Confirmation?
When you identify a decision point that requires business confirmation, your communication style also reflects your professionalism. A good business confirmation should follow the "who initiates, who clarifies" principle from Chapter 7.
Choose the Right Communication Channel
For decision points that are not urgent or complex, async communication is the preferred method. The best approach is to ask the question in the corresponding task card's comment section. This ensures the decision process is fully recorded.
For very urgent or extremely complex issues requiring back and forth, consider scheduling a short synchronous meeting. But after the meeting, the conclusions must be documented in writing back in the task card.
Provide "Saturated" Context
Don't just throw out a question. Like a professional "consultant," provide a structured "decision proposal" to your "client" (the product manager).
Clearly describe the problem: "When handling the case of user avatar upload failure, we encountered a decision point."
List the options: "Currently, we have two options:
- Option A: Show a generic 'upload failed' prompt.
- Option B: Show different, friendlier prompts based on the specific reason for failure (e.g., image too large, format not supported)."
Analyze pros and cons: "Option A has a very low implementation cost, about 0.5 person-days. But the user experience is poor. Option B provides a much better user experience, but requires additional frontend and backend development work, about 2 person-days."
Give your technical recommendation: "From a technical standpoint, I personally recommend Option B. Although the cost is slightly higher, this kind of attention to detail in experience has long-term value for improving our product's reputation."
Clearly state what decision you need from them: "@Product Manager, please confirm which option we should go with. Or is there a better Option C we haven't considered?"
Through this structured communication approach, you not only demonstrate your professionalism and rigor but also greatly reduce the decision-making cost for the product manager. You are not "creating trouble" for them; you are "co-creating" with them.
A team's collaboration level is often reflected in how they handle these "boundaries" and "anomalies." An inefficient team generates countless friction, rework, and blame-shifting at these points. An efficient team turns every "business confirmation" into a valuable opportunity to deepen mutual understanding, align shared goals, and jointly refine product details.
Better to Annoy Than to Crash: Information Can Be Redundant, But Avoid Omission
When crossing the boundary between business and technology, if we must choose between "under-communication" and "over-communication," we should unhesitatingly choose the latter.
Better to annoy than to crash.
This is a much-repeated "saying" within our team. Behind it is a profound collaboration philosophy based on hard-won experience.
"Annoy" means you might, by too frequently and too meticulously syncing information and confirming details, make your colleagues (especially product managers) feel a bit "long-winded" or "annoying."
"Crash" means that due to the omission or misunderstanding of a key piece of information, the developed feature ultimately does not meet expectations, or even causes an online incident, resulting in irreparable damage.
"Annoyance" is a temporary, emotional discomfort. A "crash" is a substantive harm to the team's output and user trust. Between two evils, we must choose the lesser.
In the asynchronous environment of remote collaboration, information transmission naturally has delays and losses. We cannot, like in the office, confirm whether the other person really "got" our meaning with a look or a gesture. Therefore, we must deliberately introduce a kind of "safety redundancy" into our communication.
This "redundancy" is not meaningless babble, but a structured "defensive communication" strategy aimed at eliminating information asymmetry. It requires us to proactively, explicitly, and even seemingly "redundantly" confirm and sync at key communication points.
Three Core Practices of "Defensive Communication"
Alignment at Launch: Rephrase the Requirements in Your Own Words
When a task is "pulled" from the "Ready for Dev" column to "In Progress," before you write the first line of code, make sure to complete an important "ritual": in the task card's comment section, rephrase your understanding of the task's goal, scope, and core logic in your own words, fully and clearly.
Example:
"@Product Manager Hi, I'm about to start working on this 'coupon' task. Before I begin, I want to quickly align my understanding with you, to see if there are any deviations:
- Core goal: We want this feature to allow operations to create 'spend 100, get 10 off' coupons, which are automatically applied when users place orders, thereby increasing average order value.
- Main flow:
- Operations can create, edit, and disable coupons in the backend.
- Users can see their claimed coupons list on the 'My' page.
- On the checkout page, the system automatically selects the best available coupon for the user. The user can also manually switch or cancel coupon usage.
- A few key points to confirm:
- Can coupons be stacked with other promotions (e.g., 'buy one get one half off')? Based on the document, my understanding is no.
- If an order that used a coupon is refunded, should the coupon be returned to the user? My understanding is no.
- Please confirm if the above understanding is correct. If no issues, I will proceed with technical design and development based on this understanding."
What is the value of this "rephrasing"?
- Exposes understanding deviation: This is its core value. If your understanding deviates from the product manager's true intent, this "rephrasing" acts like a "mirror," exposing it at the lowest-cost stage (before coding). The PM might reply: "Thanks for the alignment! Everything is correct, but regarding point 3 about refunds, our rule is that if the order is 'fully refunded,' the coupon should be returned." -- See? Through this communication, you have avoided a post-launch "crash."
- Forces you to think: To clearly rephrase, you must force yourself to read and think through every detail of the requirements document completely and systematically, rather than just glancing at it before starting. This process itself deepens understanding and uncovers potential issues.
- Leaves a written "contract": This text, along with the PM's confirmation reply, becomes a clear, traceable "written contract" between you regarding this requirement. In future development and testing, if disagreements arise, you can always return here to find the "starting point of consensus."
Syncing During the Process: Expose "Surprises," Manage "Expectations"
Software development is an exploratory process full of "surprises." We can almost never foresee all problems at the start of a project. During development, you might discover:
- A feature you thought was simple has a much more complex underlying implementation than expected.
- The API of an external dependency does not meet our performance or stability requirements.
- A requirement that initially seemed reasonable, when actually implemented, you find it may lead to some unexpected, poor user experience.
When these "surprises" occur, never try to silently "tough it out" alone. Your responsibility is to transparently and proactively expose these "surprises" and "risks" to all relevant stakeholders (especially the product manager and project manager) at the earliest moment.
Example:
"@Product Manager @Project Manager [Risk Sync] While developing the 'import friends from contacts' feature, I found an issue:
- Problem: The iOS privacy policy requires us to pop up a system-level authorization request before reading the user's contacts. If the user rejects authorization, we cannot get any information. This was not considered in our original requirements document.
- Impact: This means some users who reject authorization will not be able to use this feature. Also, once a user rejects, the app cannot proactively trigger this authorization request again by default.
- Suggestion: I suggest we design a 'fallback' user experience for this case. For example, after the user rejects authorization, we can guide them to manually enable the permission in the system settings. Or, we can provide an alternative option to 'manually enter the friend's phone number.'
- Request: This part of the interaction and product logic needs you to redesign. Also, because of this unexpected situation, the timeline for this task may need to be extended by 2 person-days. Please confirm."
What is the value of this "proactive exposure"?
- Turns "passive" into "active": You are not passively explaining after a project delay or a poor post-launch experience. You are proactively sounding the "alarm" at the first sign of risk, handing the decision back to the business side.
- Shares responsibility: By making the problem transparent, you turn it from "your personal technical challenge" into "a product challenge our team faces together." This is precisely the embodiment of the "shared responsibility" culture.
- Effectively manages expectations: Timely risk sync gives the project manager and product manager enough time to adjust the schedule, manage expectations from above, or find alternative solutions. Nothing breaks a manager more than learning of an "unexpected delay" at the very last moment of a project release.
Demo at Delivery: Seeing Is Believing, Eliminating "Imagination"
After a feature is developed and self-tested, before it is submitted to QA for formal verification, there is another very important but often overlooked step: a brief, asynchronous "feature demo" for your product manager (and designer).
In a remote environment, this "demo" does not necessarily require a synchronous meeting. A screencast video is more efficient and well-received.
You can use tools like Loom or ScreenFlow to record a 5-10 minute short video.
In the video, operate the feature yourself, clearly showing every main flow, every interaction detail, and how you handled those "edge cases."
While recording, narrate with your voice: "Here, I click 'upload,' and then select an image larger than 5MB. As you can see, the page shows a 'file too large' prompt, exactly as we agreed."
Post the video link in the task card's comment section and @mention the relevant people.
What is the value of this "async demo"?
- "A picture is worth a thousand words": No matter how detailed the requirements document is, it cannot replace a "seeing is believing" real experience. A dynamic, interactive demo eliminates the product manager's "imagination" of the feature in their mind and aligns it with the final "reality" in the most direct way.
- UI/UX verification at the "leftmost" stage: Many subtle interaction issues, copy errors, or visual deviations can be detected and corrected at this stage by the PM and designer at the lowest cost. This is far more efficient than waiting for QA to report a bunch of UI-related bugs.
- Builds trust and a sense of achievement: A clear, smooth demo is the best way for you to showcase your work results to the team. It silently signals: "Look, I not only implemented the functionality, but I also deeply understood the business logic and experience details." This greatly enhances the business side's trust and respect for you.
Summary: Become a "Trustworthy" Communicator
At the end of this chapter, we want to reiterate that an engineer's value is never solely reflected in the elegance of their code, but also in their reliability as a "communication node."
In the boundary zone between business and technology, there are many uncertainties, ambiguities, and potential risks. An excellent engineer, like an experienced "mine clearer," carefully navigates this area.
They know that distinguishing between business problems and technical problems is equipping themselves with a reliable "mine detector."
They know that knowing when to seek business confirmation is timely calling the "bomb disposal expert" when a "suspicious mine" is found.
They know that "better to annoy than to crash" is maintaining continuous, redundant, but absolutely necessary communication with headquarters throughout the demining process.
When you consistently practice this professional, rigorous, and proactive approach to cross-boundary communication, you will build the most precious asset in the hearts of your business partners -- trust.
They will know that the requirements handed to you are "safe." They will know that you will not only implement them, but also care for them, nurture them, and together refine them into a great product that truly creates value for users, just as they would.
At that point, you are no longer just an "engineer." You are a "product engineer," a "business expert," a truly trustworthy "partner in value creation."