The System That Was Waiting on Photos

When the technology is ready and the project still won’t move, the problem isn’t the build.

Share

When the technology is ready and the project still won’t move, the problem isn’t the build.


The Shopify store was built. The pages were structured, the layout decisions had been made, the product sections were in place. All of it was technically ready to move.

And then it stopped.

Not because of Shopify. Not because anything I built was unfinished. The store was waiting — for product photos that hadn’t arrived, for feedback on a section that was later removed anyway, for a decision about what should happen next. Weeks passed. The technology sat idle. The system had no problem. The pipeline was empty.

I’ve thought about that project more than once since then. Not with frustration — the frustration metabolized a long time ago. What stayed was the question underneath it: why do smart, well-intentioned people consistently underestimate where a project actually stalls?


The Part Everyone Assumes Is Hard

When someone hires a developer to build a website — or a Shopify store, or a web app — they usually carry a mental model of where the difficulty lives. The technology. The design decisions. The build process itself. These things feel like the hard part because they’re unfamiliar.

For the builder, they’re often the easy part. Or at least the predictable part. The code either works or it doesn’t. The layout either holds or it breaks. Problems in the build are identifiable and solvable.

The less visible difficulty is the decision cycle of the client.

Feedback that doesn’t come back. Images that exist somewhere but haven’t been delivered. A revision requested, completed, then reversed when a stakeholder upstream changed their mind. These things don’t show up on a project timeline as risks. They show up as silence, and then as delay.


What the Pattern Actually Looks Like

In the Shopify project, the pattern looked like this: I’d complete a section and request feedback. No response. A few weeks later, images for the requested section arrived — but by then the decision had changed, and the section was cut. Product images for hundreds of items were needed to populate the catalog. Three arrived near the end.

None of this was sabotage. It wasn’t bad faith. It was a client managing a business while also trying to manage a build — two systems running simultaneously, one of which wasn’t their area of expertise.

The technology was never the bottleneck. The inputs were.

Every project runs on inputs and outputs. The outputs — completed pages, functional sections, a store ready to launch — depend entirely on the inputs arriving: feedback, content, images, decisions. When inputs slow down, output stops. Not because the builder failed. Because the pipeline went dry.

This looks like a communication problem. It feels like a motivation problem. In reality, it’s a systems problem.


Decision Throughput Is the Real Speed Limit

Freelancers often assume they control project pace. They set timelines. They deliver on schedule. They track their hours.

But the actual speed of most projects isn’t set by the builder. It’s set by how quickly the client can decide things and supply what the build requires.

This is what I’d call decision throughput — the rate at which necessary choices get made and information gets passed forward. When throughput is high, projects move. When it drops, sections get rebuilt, completed work gets undone, timelines stretch, and both sides accumulate frustration without a clear cause.

The builder feels stalled. The client feels the project is taking too long. Neither is wrong. The system is just missing its inputs.

The mistake is assuming that more effort on the builder’s end solves it. It doesn’t. You can’t write code against photos that don’t exist.


What Durable Project Systems Do Differently

This isn’t an argument against clients. It’s an argument for structure.

Strong project systems make dependencies explicit before the build starts — not as a legal formality, but as a shared map of how the work actually moves. Content due dates. Image delivery schedules. Revision limits with clear ownership of the next step. A named decision-maker for sections that involve multiple stakeholders.

These structures don’t eliminate delays entirely. Life doesn’t cooperate with project timelines. But they do something more useful: they make the system visible. When a delay happens, both sides can identify where in the pipeline it is. That’s a very different conversation than the ambient tension of a project that’s just… slow.

Naming the dependency removes the ambiguity. The work is paused because the images haven’t arrived — not because something is wrong, not because anyone is failing, but because the system is waiting on a specific, identifiable input. That changes the conversation. It preserves the working relationship.


Where Real-World Systems Succeed or Fail

Shopify worked. The platform did exactly what it was supposed to do. The design tools worked. The code worked. The structure I built was sound.

What stalled the project wasn’t technology. It was the human coordination system surrounding the build — the informal, mostly unspoken agreement about who was responsible for what, and when.

Most real-world systems succeed or fail at exactly that layer. Not the infrastructure. Not the tools. The handoffs.

Every project has a technical system and a coordination system. Builders tend to be very good at the first one and underprepared for the second. The second one is where projects actually live.

Design the handoffs as deliberately as you design the build.

Make dependencies visible before they become delays.

That isn’t extra work. It’s the work — the part that determines whether the technology ever gets to do its job at all.


Melanie Brown is the founder of Bluedobie Developing, a rural Kentucky-based SaaS and web development company. She writes the Bluedobie Dialogues series about systems thinking, sustainable business architecture, and what durability actually looks like in practice.