Product Engineering
Why Orbit UMD Has a Demo Mode
2026-03-15 · 6 min
Building a real demo path forced cleaner data boundaries, smoother walkthroughs, and better feedback from faculty and staff.
Product Engineering
2026-03-15 · 6 min
Building a real demo path forced cleaner data boundaries, smoother walkthroughs, and better feedback from faculty and staff.
When people hear "demo mode," they often assume it is a cosmetic layer duct-taped onto a real product for a conference pitch. In practice, a good demo mode is one of the most useful product decisions you can make early in development. It forces you to define the happiest path, clarify state transitions, and make system intent legible to new users quickly.
Orbit UMD started as a planning tool for UMD students. The core problem was that course sequencing, requirement tracking, and four-year planning were spread across Testudo, department advisor spreadsheets, and informal group chats. Students had to mentally stitch these together every semester.
Early in development, we needed to present the tool to faculty and staff who had not used it. The authentication flow required a UMD account, and getting test accounts set up for every walkthrough was friction we kept running into. More importantly, the walkthroughs kept going wrong because the test data was messy and the transitions between views were hard to explain mid-demo.
We decided to build explicit demo mode as a first-class feature. A ?demo=true query parameter swaps the authenticated user context with a fixed fixture student: a declared major, realistic completed coursework, and a partially-built four-year plan. Every screen in the app reads from this fixture data instead of Supabase.
The act of building demo mode surfaced three architecture problems we had not noticed in regular development.
State isolation. Some components were reaching around the data layer and pulling from global state that was not parameterized for demo fixture injection. Making demo mode work cleanly required formalizing the data contract between the planning engine and the UI layer. This turned out to be a real improvement, not a workaround.
Undefined transitions. During the demo walkthrough, the moment a user completes requirement tracking and tries to open the four-year planner, there was a loading flicker. In normal development we had accepted this as a known visual artifact. In a demo context, that flicker derailed the whole narrative. Fixing it for demo mode fixed it for real users too.
Feature surface ambiguity. Features that were awkward to explain in a demo walkthrough were almost always the same features where implementation intent was vague. If I could not describe what a button did in one sentence, the button's behavior was probably not fully specified. Demo mode gave us a forcing function.
Beyond the architecture benefits, demo mode fundamentally changed how we communicated with non-technical stakeholders.
Before demo mode, faculty walkthroughs required setup time, a working internet connection, and real student data that was often too sensitive to use candidly. After, a faculty member could load the tool on any device, click through the fixture student's journey, and understand what the tool did in a few minutes without any auth friction.
This changed the quality of feedback we got. Instead of "I can't really tell what it does," we started getting "why does it not show course conflicts here" and "can the plan builder show prerequisite chains." Those are useful product questions. Better input produces better decisions.
Demo mode is worth building when you have stakeholders who are not in the system daily, when your auth flow is opinionated, or when you need to give a consistent walkthrough across multiple presentations. It is not worth the maintenance overhead when the product is simple enough that any logged-in state communicates the point, or when the audience can log in themselves.
The overhead is real: fixture data needs to be maintained, demo mode paths need to be tested separately from the main application, and demo mode cannot diverge so far from real behavior that it misleads. But the return is also real. When you can hand someone a link and have them understand your product quickly, you have built something communicable. That clarity is worth engineering for.