Why complex systems need more than pretty wireframes
Here is a scenario that happens more often than we would like to admit.
I was designing a booking system for the Porsche Experience Center. My wireframes looked great in the stakeholder review. I showed three clean screens.
- Booking with items listed, total shows $500.
- User removes an item.
- Updated total shows $350.
Everyone nodded. Everyone approved. Meeting done.
Then developers started building it. When items get removed, does the total recalculate instantly or on update? What happens to payments already made? If the customer paid $500 and removed $150 of items, is that a refund or a credit? If they paid with two cards, which card gets the money back? And when staff and customer open the same booking at the same moment, which total is the truth?
My beautifully annotated Figma file went silent.
My wireframes were like three photos of a car: parked, driving, parked somewhere else. They did not show how the car started, what route it took, or what happens if two people try to drive it at once.
Static screens show outcomes, not behavior. And behavior is where systems break.
Why everyone approved broken screens
The stakeholders in that meeting were not careless. They were doing mental math we should never have asked them to do: remember screen A while looking at screen C, imagine the calculation in between, track the edge cases, and hold all of it while discussing five other features. We were asking them to mentally simulate a computer system.
Think about learning to ride a bike. You can look at photos of someone riding and think, I understand this. Until you feel the balance and the tip, you do not.
That is why projects that looked perfect in design reviews generate so many change requests in development. Nobody in the room was validating logic. They were validating layout.
Where simple features get complex
Try designing pickup time slots for a restaurant. Sounds like a dropdown of times. To build it you need different hours per day, prep time that varies with order size, minimum gaps between slots, a last allowable pickup before closing, and the awkward cases at open and close.
Now actually write out every valid Tuesday slot when the kitchen closes at 9 PM and orders take 45 minutes. Feels tedious? That is the point. Our brains recognize patterns well and run computations badly. Wireframes of complex systems ask stakeholders to run computations.
From slideshow to sandbox
After that painful build, I tried something different on the next complex feature. I built two interactive prototypes with Figma Make.
The first matched the Porsche design system and looked production ready. The second, an invoice sandbox, was intentionally ugly. Stakeholders could add and remove items, watch totals recalculate, see what happened to existing payments, and try to break the edge cases themselves instead of imagining them.
The difference was dramatic. Instead of nodding at screens, stakeholders were using the system. They found issues I had missed and asked better questions. Once everyone could feel how the logic worked and trusted it, the visual design conversations became easy.
Five rules for prototypes that help
Understand your system first. Before touching any tool, write down what the product does, how users move through it, what choices change their path, and what should never happen. If you cannot explain it in plain language, you are not ready to build it.
Be explicit about everything. AI tools will not figure out what you mean. State what screens exist, how users reach them, what moves them between screens, and what calculations happen when.
Build in phases. For the Porsche corporate invoicing logic I cut the work into seven phases, from booking context through agenda, pro forma invoices, revisions, sequencing, tax and deposits, to payments and refunds. One phase at a time.
Test each phase until you cannot break it. Click everything twice, do things in the wrong order, hunt for surprises, check against the logic document. Fix everything before moving on.
Update, do not rebuild. Small, specific change requests keep a prototype stable. Rebuilding from scratch creates chaos.
This prototype is built in defined phases.
Implement only Phase 1: entry and booking context.
Existing screens (do not modify, do not add):
Enquiry List · Enquiry Detail · Create Booking
Behavior:
Enquiry List -> select -> Enquiry Detail
Enquiry Detail -> create booking -> Booking Overview
A booking must exist before anything else proceeds
Constraints:
No logic from later phases. No calculations.
No temporary states. No assumed future behavior.
Validation:
Every screen reachable, only via explicit actions.
Repeating the flow behaves the same every time.What changed for the team
- Wireframes approved in minutes
- Gaps discovered during the build
- Repeated rounds of redesign
- Launches slip by weeks
- Reviews take longer, on purpose
- Stakeholders try to break the logic
- Fewer developer questions
- Launches stay on schedule
The upfront prototype time saved us weeks of development. But the bigger change was in how we thought: from making screens to designing behavior, from looking correct to working correctly, from explaining in meetings to letting people try it.
If you design marketing sites and simple forms, wireframes still work great. But if things change state, calculations happen, several people touch the same data, timing matters, and refunds and cancellations are normal Tuesdays, then wireframes alone are not enough. You are not designing screens. You are designing behavior, and behavior cannot be validated by looking.
That meeting where everyone approved my wireframes felt great. It was a false positive. These days, when stakeholders approve my designs quickly, I worry. When they spend the session trying to break my prototype and asking hard questions, I relax.