Play
Designing what software feels like.
Prototypes were good at showing where an interface went next. We wanted designers to control what happened in between.
pull this up
The transition wasn’t the interaction. Your finger was.
- question
- How do you give designers control over native behaviour without asking them to become engineers?
- role
- Senior Product Designer / Design Engineer, working across product design, interaction design and implementation.
- team
- Part of a six-person product team.
- period
- August 2022 – October 2023
- focus
- A four-month product cycle focused on the interaction system, native gesture behavior, motion and physics, interaction authoring, and device testing.
- status
- Shipped on Mac and iPhone. Play later received an Apple Design Award for Innovation in 2025; the team joined Apple in 2026.
a prototype could be correct and still feel wrong
Every designer who has handed off a prototype knows it. It looks right, it clicks through, engineering builds it, and the thing that ships feels different. The screens were correct. What was missing was never in the picture.
The two sheets below end at the exact same pixels. Press play on the left and try to grab it while it moves. Then do whatever you like to the right one.
animation describes what an interface does.
interaction describes what happens when the user interferes.
the user owns the timeline
Happy paths are easy to animate. Interaction starts when the user changes their mind: halfway through a gesture, halfway through a settle, before the last one has finished. Nothing should ask them to wait.
Try to break it. Drag the sheet. Release it. Grab it before it settles. Reverse it. Flick it from halfway. The surface answers immediately because running state is still manipulable state.
- phase
- at rest · closed
- velocity
- 0 px/s
- position
- 0% open
- the spring hands over the moment a finger arrives. there is no queue.
the missing material
The missing material was physics.
A timeline knows two things: where it starts and where it ends. A finger brings position, velocity, direction, resistance and the option to stop. Native interfaces are built out of those, and a designer working in screens had no way to touch any of them.
Four surfaces, one variable each. Each one is something Play let a designer decide instead of inherit.
position says where the finger is. velocity says where it meant to go.
drag past either end. it keeps answering, at a diminishing rate, then lets go.
flick it. it keeps going. touch it and it stops, exactly where it is.
response 0.42 s · damping 0.86
the last line is the part designers never had to see first. the product question was how to translate it into words a designer would choose between.
behaviour needed a grammar
Physics says how something moves. It does not say when, what started it, which state we are in, what happens if a condition is not met, or what comes next. That is the point where Play stopped being a motion problem and became a product-design problem.
An interaction in Play is a trigger, an action, and the state the object ends in. The finger fires the trigger; the action decides the state; the spring decides the route. Drag the sheet and the sentence lights up in the order it happens.
- whenPan · while panning0 px0 px/s
- ifdistance past 30 % of the travelwaiting
- thenSet Stateclosed
- withSpring · responsive · interruptible
what the system knows
- touch location
- translation
- velocity
- gesture state
- scroll offset
- keyboard frame
- spring response
- state transition
what the designer means
- follow my finger
- feel heavier
- settle quickly
- let me interrupt it
- snap here
- move with the keyboard
- bounce at the edge
- open when I mean open
the designer works with the sentence. the person holding the phone gets the behaviour. the translation between them was the product.
power didn’t have to mean permanent complexity
A bottom drawer that feels right is a trigger with two phases, a threshold, a release rule, two states and a spring. A designer who wants a bottom drawer wants a bottom drawer. The engine has to hold all of it; the interface does not have to show all of it.
Good tools do not remove power. They decide when you need to see it. Show the logic and the card opens into its own structure; the choices you made physically travel into their places in the system.
- trigger
- Pan
- spring
- Responsive
- release
- Nearest state
- triggervertical, on the sheet
- while panningtranslatefollow the finger; rubber-band past the ends
- endedevaluate position + velocity → nearest state, or flick direction
- actionSet StateExpanded or Collapsed
- withSpring response 0.42 s · damping 0.86 · interruptible
- edgekeyboardthe sheet moves with the keyboard frame
the complexity has not gone anywhere. it has been put where it is needed, and away when it is not.
you couldn’t design touch without touching it
A canvas on a Mac shows layout, hierarchy, type and colour at a comfortable size, under a cursor that is one pixel wide. It cannot show what a thumb can reach, what a finger covers, how fast a flick really is, or how a spring feels when the whole device is in your hand. Play ran the prototype on the phone, with the platform’s own gestures, springs, scroll and haptics.
That is why everything here is something you can touch, not something you watch. On a phone, your device is the device.
the canvas can tell you
- layout
- hierarchy
- type and colour
- every state, side by side
only the device can tell you
- what a thumb reaches
- what a finger hides
- how fast a flick is
- what a spring weighs
- where a target is too small
- what the keyboard pushes
- what a haptic says
feedback is not only visual. on the device, a settle can be felt as well as seen.
SIX PEOPLE. FOUR MONTHS. ONE INTERACTION SYSTEM.
Play existed before this cycle and kept going after it. The question for these four months was never how much six people could build. It was which part of the interaction system had to be true first. A design tool could grow in almost any direction, and most of those directions already existed, and existed well, in tools designers were not going to leave.
I worked across product design, interaction design and implementation within Play's six-person product team, focusing on how native mobile behavior could become something designers could author directly.
So the cycle did not widen the product. It deepened one loop in it. Cut the universe down and see what is left.
everything a design tool could be
- import
- start from the design work that already exists. nobody redraws a screen to give it behaviour.
- interact
- turn visual states into behaviour: a trigger, an action, a spring.
- preview
- experience it where it will live, on the phone, with the platform doing the physics.
- share
- put that behaviour in someone else’s hand, so the argument is felt rather than described.
our users already knew the tricks
The audience was professional designers. They clock an easing curve from across the room and have an opinion about scroll inertia. The editor could be beautiful and the product would still fail if the output felt wrong, because the output was the only thing their own users would ever touch.
So craft meant precision, not ornament: the invisible decisions that are only noticed when they are wrong. This is what they would have caught, and what the tool had to get right by default.
- fake easing
- a curve that decelerates the way a timeline decides, not the way a finger let go.
- lag
- any gap between the finger moving and the surface moving. Designers feel 16 ms.
- happy-path animation
- a transition that only works if you never interrupt it.
- awkward defaults
- a spring that bounces when nobody asked, a threshold at the wrong distance.
- unnecessary panels
- an inspector that shows every variable because the engine has it.
- unloved edges
- the import flow, the empty state, the settings screen. The parts a demo never reaches.
More animation is not better interaction. A frequent action should be quiet and immediate; a rare one can afford to explain itself. Giving designers a powerful engine did not mean encouraging them to animate everything.
what happened
The four-month cycle's scope held: import a design, give it behaviour, preview it natively, share it. Wider authoring came after the loop had survived daily use.
After my time the product kept moving in the direction the model implied: prefabs that packaged whole behaviours as one drag, variables and conditions for logic, App Clips so a prototype could be handed to anyone with an iPhone, and export straight into Xcode.
Grown through word of mouth inside the design community. The signals suggested people weren't only trying Play; a meaningful share were coming back.
Share of the measured user cohort that returned to Play during the fourth week after first use.
Awarded to Play by the platform the tool was built on.
In 2026 the team behind Play joined Apple; the standalone apps were retired that spring. Apple had spent years lowering the barrier to building for its platforms from the engineering side. Play approached the same problem from the design side, speaking the platform's language at the level of behavior.
what changed for me
I went in thinking prototyping was about communicating an intended outcome: here is the screen, here is the next screen, here is how it should get there.
I came out thinking about the space between intention and response. While the finger is still down. When the direction changes. When the velocity changes. When someone interrupts the thing they started, or changes their mind halfway through. That is where an interface feels right or wrong, and it is the part a picture cannot hold.
We did not need to make every part of the design process better. We needed to make one missing part meaningfully better, and put it in someone's hand.
Screens were not enough. Timelines were not enough. Behaviour depended on input, state, physics and context, and Play made that something a designer could author, test, and hand to someone else.
feel it
Author a behaviour. Then use it.
Start from a pattern, change how it releases, how it springs, whether it can be interrupted. Then press Preview: the controls step back and the phone is all that is left.
- set the spring to soft, flick the drawer, grab it on the way
- turn interruption off and try the same thing
- switch to the elastic header, pull past the top, let go
- flick the card toward C from A, then try to catch it
bottom drawer · pan up to open
start from
behaviour
- when
- Pan
- direction
- Vertical
- release
- spring
- interruptible
- trigger on the surface, both phases
- while panningtranslate1:1, rubber-band past the ends
- endedevaluateposition and velocity → Nearest state
- actionSet Stateor coast, for the header
- withSpringResponsive · interruptible: Yes
