Think about the last time you ordered food online.

You pick a restaurant, add a few things to your cart, enter your address, choose a payment option and click Place Order.

A few seconds later, you see:

Order Confirmed.

From your point of view, it was one click. Behind that click, though, several different pieces of software have to communicate with each other, make decisions, process information and eventually bring a result back to your screen.

Let's take that one everyday action and unpack what is actually happening.

So, what happens after you click?

You click “Place Order”
The app sends your order request
The backend receives the request
The backend starts checking the order
Is the restaurant available? Are the items available? Is the delivery information valid? Can payment be processed?
Payment is requested
You approve the payment, if required
Payment result comes back
The order is created and saved
Restaurant is notified Confirmation is sent to the app
Your screen shows “Order Confirmed”

A simplified view: in a real application, some checks may happen in parallel, while others have to wait for a result before they can continue. The exact sequence depends on how the product has been designed.

Before we go further, let's decode that flow.

There are a few terms in the diagram that you'll hear constantly in technology projects. Let's make them concrete using our food-order example.

The app

This is the part you interact with. The food delivery app on your phone is the frontend.

When you choose a restaurant, add food to your cart or tap Place Order, you're interacting with this part of the system.

The backend

The backend is the part running behind the scenes. It receives information from the app and performs the work needed to process the request.

You don't see the backend on your screen. When you click Place Order, the app needs somewhere to send that request. The backend is one of the places involved in handling it.

The system

When we say the system, we're usually talking about the different software components working together to deliver a particular function.

For our food-order example, that could include the app, backend services, payment services, databases, the restaurant's order system and other supporting services.

API

An API is a way for two pieces of software to communicate with each other.

The food delivery app needs to send your order information to the backend. It can do that through an API.

You can think of the API as the agreed way of asking another software component to do something or provide information.

The app needs to know what information to send, where to send it and what kind of response it can expect back.

Database

A database is where information can be stored and retrieved.

Once your order has been created, information about that order needs to be stored somewhere so it can be retrieved later — for example, to show your order history or update the order status.

Response

The communication doesn't stop when the app sends the request. Something eventually comes back. That's the response.

For example, the backend may return information telling the app that the order was successfully created. The app can then use that information to show:

Order Confirmed.

So the journey is really more like:

RequestProcessingResponse

And that simple pattern appears in many things we use every day.

Now let's look at this like a PM.

This is where a simple button starts becoming a much bigger delivery problem.

Imagine someone gives you a requirement:

“We need a Place Order button.”

At first, that sounds pretty straightforward.

But as a PM, you'd probably start asking a few questions.

What exactly should happen when the user clicks it?

Suddenly, “Build a Place Order button” isn't a very complete requirement anymore.

The button is only the visible part of the feature.

What's happening behind the screen?

Think about everything that needs to happen for that button to actually work.

Those responsibilities may sit with different technical components or even different teams.

This is where a PM starts looking beyond the individual task.

Instead of asking only:

“Is the Place Order feature ready?”

you start asking:

“What all has to be ready for the customer journey to work?”

And who is actually building all this?

A feature like this may involve several teams.

Frontend team

Builds what the customer sees and interacts with.

Backend team

Builds the services that process the order.

Payment / integration team

Handles communication with the payment provider or payment system.

QA team

Tests whether the feature behaves correctly, including what happens when things go wrong.

DevOps / Cloud team

May be involved in infrastructure, deployment, environments, monitoring and operational readiness.

There may be other teams too, depending on the product.

The PM's job isn't to personally build each of these pieces. It's to understand enough about the overall flow to see how the pieces fit together.

What can happen in parallel?

This is another important part of technical delivery.

Not every activity has to wait for the previous one to finish.

While the backend team is building the order-processing logic, the frontend team can work on the Place Order experience. QA can prepare test scenarios. Infrastructure work can happen alongside development.

But there are still points where teams need to agree.

For example, the frontend needs to know how it should communicate with the backend.

What information does it send? What does the backend expect? What does the response look like? What happens if the request fails?

That agreement becomes important because teams may be working in parallel.

This is where understanding something as simple as an API becomes useful for a PM.

Useful PM questions

“Have the frontend and backend teams agreed on the request and response?”

“Can these two teams continue working independently, or is there a dependency between them?”

What happens when something goes wrong?

Let's say you click Place Order.

The payment goes through.

But the order isn't created.

What does the customer see?

And more importantly, what happened behind the scenes?

This could involve several different systems. Maybe the payment service says successful, but the order service doesn't receive the expected response. Maybe the order was actually created, but the app didn't receive the confirmation. Maybe the restaurant system wasn't updated.

From the customer's perspective, they may simply see:

Something went wrong.

From a delivery perspective, there are several questions to answer:

The PM question:

“Where in the request flow is the failure occurring?”

Now think about scale.

Imagine the same food delivery application when it is relatively small. Maybe a few hundred people are placing orders at a particular time.

Now imagine a major sale, a festival, a cricket match ending, or a popular restaurant promotion. Suddenly, thousands of people may be placing orders around the same time.

The flow hasn't changed from the customer's perspective. They still click Place Order.

But the system now has to handle much more traffic.

That raises a different set of questions:

Again, the PM doesn't need to design the scaling architecture. But understanding the flow makes it possible to have a meaningful conversation about the risks.

And this is where “done” gets interesting.

Imagine the frontend team says:

“Place Order is done.”

The backend team says:

“Order API is done.”

The payment team says:

“Payment integration is done.”

QA says:

“Testing is complete.”

Does that automatically mean the feature is ready for customers?

Not necessarily.

You still need to ask:

That's the difference between tracking individual deliverables and understanding end-to-end delivery.

The PM mental model

Let's go back to where we started.

You clicked:

Place Order.

What looked like one action actually involved:

A user experienceA requestMultiple software componentsData moving between those componentsChecks and decisionsExternal dependencies such as paymentData being storedOther systems being updatedA response coming backA result shown to the user

And around all of that are:

Teams. Dependencies. Parallel work. Risks. Failure scenarios. Testing. Operational readiness.

That's the part I find particularly useful for a PM to understand.

When someone says:

“The payment integration is done, but we're blocked on the order service.”

you should be able to ask:

“What is the dependency between the two?”

When someone says:

“The API is ready.”

you can ask:

“Has the frontend integrated with it, and have we tested the end-to-end flow?”

When someone says:

“Development is complete.”

you can ask:

“What still needs to happen before a customer can actually use this?”

Those questions come from understanding the flow.

One button. A lot of thinking.

The next time you click Place Order, you probably won't see any of this.

You'll just see:

Order Confirmed.

But behind that confirmation is a chain of software components, decisions, dependencies and teams working together.

And that's the shift this series will explore.

You start with a feature that looks simple on the surface. Then you learn to see the technical flow underneath it — and eventually, the delivery questions that come with it.

The question changes from:

“Is this task complete?”

to:

“What has to be true for the whole thing to actually work?”

What Are Microservices — and Why Does Your App Need Them?

From one customer experience to many services working underneath it.

Read the next article →    Back to Writing