Find the loss behind the request for software

A customer asks for a portal. It is tempting to start with screens and a stack, but the portal might serve documents, repeat orders, delivery updates or support deflection. Each purpose needs different data and integrations. Until we pick the problem, an estimate is mostly guesswork.

Suppose a shop receives 2000 orders each month and 600 questions about status. At four minutes per question, that is 40 hours of support work. Even removing half saves roughly 20 hours a month in this category. The calculation helps compare cost with potential value; it does not prove customers will stop calling.

Portal logins are not enough to measure the result. Someone can open the page, fail to find an answer and call anyway. We need a metric tied to the original problem: status questions per 100 orders and the support time they take.

A business request often starts with a symptom: overloaded support, errors or slow reporting. Several causes can produce it. Information may be unavailable, late or difficult to find. A portal only addresses some of these cases, so we first review actual conversations instead of treating the requested interface as a diagnosis.

We agree on the primary result with the people evaluating it. Support cares about workload, sales about repeat orders and finance about servicing costs. If each expects a different outcome, requirements conflict. We pick the first release's main result and record useful secondary effects separately.

Saved time does not automatically become saved money. Twenty freed hours might absorb growth without hiring, improve responses or remain unused. We ask what the business will do with that capacity. Multiplying hours by salary produces an attractive return calculation, but it does not establish that the change actually creates that value.

We include ongoing work too: integrations change, data needs checking and portal questions reach support. If three hundred new questions replace three hundred removed ones, the apparent benefit disappears. A useful estimate considers the new process's possible support load alongside the original problem.

Sometimes a smaller test is sufficient. A protected status page for one order category can show whether self-service information reduces questions. If people distrust the data, registration and ten extra sections will not resolve it. That experiment helps choose the implementation size before a large commitment.

Trace the current process before designing screens

Follow a real order with a customer, support agent and operations team. Where does the status originate? Who updates it? Why does support know more than the customer? If the answer lives in a private warehouse conversation, a new screen will not make the information accurate.

Include partial shipment, cancellation, returns and carrier delays. For each event identify the source of truth, update delay and person who can correct a mistake. The first useful change may be internal status management, with the portal following later.

A simple map is enough to hold the shared context: step, participant, data and trouble spot. We do not need a book of documentation. We need the business and engineering team to agree on what actually happens between payment and delivery.

We examine completed orders with different outcomes: normal delivery, a return and one stuck between warehouse and carrier. Actual timestamps and messages matter. Official procedure can describe a sequence employees no longer follow. The goal is to design for real work rather than automate an idealized flow nobody uses.

Every field gets a source. Who owns the address, amount and shipment confirmation? If two systems can change a value, we need precedence and a conflict rule. Taking the last event received is not enough: arrival order does not necessarily match the order of real changes.

Manual corrections need rules. A support agent changes a status after a call, then nightly synchronization restores the old one. An edit button alone cannot solve that. We decide whether the correction is authoritative, whether it propagates back and how the next automated update interacts with it.

Permissions follow actions as well as pages. Support might see an order but not alter its amount; a manager might approve a refund without gaining unrestricted history access. Real employee tasks reveal these distinctions. Otherwise a broad administrator role becomes a convenient bypass for every unresolved requirement.

At the end, unresolved details remain visible: unknown carrier delay, unverified API access and disputed status meanings are risks. Each gets a next step, such as measuring, obtaining an example or agreeing on a rule. That keeps uncertainty from disappearing inside a supposedly complete estimate.

Turn business needs into system requirements

"Update the status quickly" leaves incompatible interpretations. In this example, agree that the portal reflects an accounting-system change within two minutes. If updates stop for ten minutes, it shows the last update time rather than implying current information.

Specify access and transitions. Customers see their own orders; support access follows a work role; changing an email does not automatically transfer another person's history. Define permitted states and who may change them. These rules shape data and validation more than button placement.

An acceptance example contains the starting state, action and expected outcome. A cancelled order must not return to "processing" when an old event arrives again. That example exposes the need to handle event order before implementation begins.

A requirement includes the normal outcome and the acceptable boundary. For status updates, two minutes is incomplete without behavior after that limit. Showing the last status with its age may be acceptable. Promising delivery today from yesterday's data is a different guarantee, even if the same text field can display both.

We group examples by conditions: ordinary action, duplicate, late event, lost access and dependency failure. We do not need every theoretically possible case. We need the cases that change the business outcome or already occur in the current workflow. They expose decisions hidden by broad adjectives.

Timing needs a start point. Does the two-minute limit begin at a warehouse action, a record in the accounting system or receipt by our service? Those points can differ considerably. If we own only the final stage, the metric and promise should show it before customers complain.

We define correction after bad data. Customers need a reporting path, employees a check, and the system a record of changes. Hiding an old value is insufficient when it already triggered a notification or another operation. The requirement must address consequences as well as the display.

Each acceptance rule gets a practical check: who supplies input data, where the event is reproduced and what confirms the result. Otherwise a demo becomes a dispute over interpretation. Concrete examples let business participants validate meaning and developers validate behavior without relying on a shared feeling that the feature looks correct.

Compare options against the actual constraints

Polling an API may be adequate for a small workload. Webhooks can reduce delay, but require handling repeats and missing deliveries. Direct database access may be unavailable or couple the portal to another system's private schema.

A queue can help us survive recipient downtime, smooth a burst or retry processing independently. Once we add it, we also need rules: where the current status lives, how we detect stuck work and what the UI shows before processing finishes. These decisions are part of the feature, not cleanup for later.

Polling every minute does not guarantee an update within a minute. The upstream API can be slow or a run can be missed. We need a time budget, a changes cursor and continuation after failure. The choice is assessed across the full path, not just by its configured interval.

A webhook is not automatically a complete journal. The provider may repeat an event or stop retrying. We check IDs, versions, history and reconciliation access. Fast events combined with periodic reconciliation can prevent a missed delivery from leaving an order permanently stale, provided the comparison has clear rules.

We keep the external format separate from our domain model. A provider field called status with five values does not necessarily match the portal's promises. The integration translates incoming data, handles unknown values explicitly and follows the agreed internal rules instead of passing the provider's implementation details straight through.

We compare the proposal with a simpler alternative. What becomes faster or harder, what access is needed and who supports it? A periodic job can be better for low volume; strict freshness and larger workloads change that balance. The comparison makes operational cost part of the decision.

We identify costly decisions early. A UI field is easy to change. Order identifiers, data ownership and retry semantics affect the whole integration. Time spent checking those boundaries before broad implementation prevents convenient local choices from becoming a system whose parts disagree.

Deliver the risky path before secondary screens

The most useful first slice often starts with the integration. We take one order category from the source system to the portal, then test an update, a duplicate and a failure. Ten finished screens will not rescue a broken data path. The interface can be simple at this point, but the data must take the real route.

Plan gradual access, disabling the feature and helping customers during failure. Stale data is a visible application state, not only a log entry. Include people who operate the process in acceptance; they know which apparently minor exceptions stop daily work.

The first slice uses real formats and access. Mock JSON helps build a screen but does not check API quotas, pagination or missing records. If production-like access is unavailable, we record that the integration risk remains. A successful mock demonstration cannot establish readiness of the external path.

We include visibility into the data flow: changes received and applied, processing delay and unmatched orders. Those signals belong in the launch plan. Without them, an empty portal leaves the team unable to distinguish a broken import from a customer who legitimately has no orders.

Rollout boundaries should contain mistakes. We begin with one company or order category and then expand. If access is enabled per account, disabling should work through the same controlled mechanism rather than require an urgent deployment. This provides time to inspect actual data before everyone depends on it.

We define how support continues manually when the portal fails and where it finds current information. The new feature should not remove the only working path before it is proven. The temporary fallback needs an agreed process too, or employees will invent incompatible workarounds during the first incident.

The demo includes stale status, missing orders, access failure and duplicate events, not only a happy screen. Business owners can then accept actual system behavior. Expensive expectation gaps often live precisely in the states a polished presentation avoids. Showing them makes acceptance more useful than a tour of completed screens.

Verify usefulness separately from correct implementation

Measure status questions per 100 orders, support effort and the share of portal users who still call. Comparing raw call counts can mislead when order volume, season or promotions change.

Where possible, we roll out to comparable groups. Otherwise we record other changes and talk to customers. The portal may pass every test while call volume stays the same. Then we investigate what is missing: accuracy, detail or a trusted way to get help. Shipping closes tickets; the business impact is checked afterwards.

The observation period covers a normal order cycle. A week-long delivery cannot show reduced status calls the day after release. That early measurement captures visits rather than the intended effect. We account for the delay before making post-launch promises or deciding the experiment has failed.

Customer segments can reveal who benefits. Large businesses may use the portal daily while small customers still prefer a monthly call. An aggregate metric hides the difference. The next change may focus on the intended segment rather than try to force everyone into the same behavior.

We check neighboring outcomes. Fewer calls may mean better self-service, or that customers could not find a contact and gave up. Repeat requests, delayed orders and feedback help distinguish those explanations. Improving the primary number is not worthwhile if it harms another essential part of the experience.

We separate implementation defects from a wrong solution. If statuses violate the agreed timing, fix synchronization. If the data is correct but customers need an arrival forecast, the information is incomplete. If the business cannot produce that forecast, another screen will not create it.

After the check, we record what changed and why work should continue. New features address observed causes instead of simply resuming the original wish list. The path from business problem to code continues beyond deployment: the team returns to the initial loss and chooses the next step using new evidence.

Planning the first portal release

For our shop, the first outcome is fewer status questions per 100 orders. We collect support data and actual orders first. The accounting system owns the current status, while carrier updates sometimes arrive later. The portal promise accounts for that delay rather than invent a forecast the business cannot supply.

The first release shows one order category and data age. Sources, transitions and access are agreed. Its first slice tests updates, duplicates, old events and missing information. UI states match backend states. We avoid finishing every screen before proving the integration path with the most risk.

Rollout starts with a small group. The team sees synchronization delay, unmatched orders and processing outcomes. Support has a fallback and knows how to report trouble. The feature can be disabled through a controlled path. Acceptance includes employees who operate orders rather than only the person who commissioned development.

After a complete delivery cycle, we compare the primary metric and neighboring effects. If correct statuses do not reduce calls, recent conversations reveal missing forecasts or shipment details. The next change follows that cause. Business impact remains the center after launch, while completed tickets remain evidence of delivery rather than evidence of value.

Back to articles