The unit of Jiny

Any step in the user journey where you want to give an instruction to the user, is called a Stage. In the question: 'When to trigger the instruction?', that 'when' is the stage i.e the context. Every stage carries an instruction with it.

For example:

Stage: Email/mobile text field

How to define Stage: Use Identifiers

A Stage is defined using certain UI elements present on screen. These UI elements are used by Jiny SDK to identify the Stage, hence called Identifiers. Every Stage has a unique set of Identifiers.

Just as we humans understand a context on screen through certain UI elements present on screen (eg. 'search bar' for home page, or 'Buy Now' button for product page), similarly, Jiny also uses the same UI elements as identifiers to identify the stage.

Whenever these Identifier are detected to be present on screen by Jiny SDK, it Identifies the corresponding Stage and generates the corresponding instruction.

For example, the above Stage has following Identifiers:

Identifiers: 'Email/Mobile' text field + 'Continue' Button

The Identifiers are detected by Jiny SDK through their meta-data. Hence, if the properties of an identifier changes, it can be used as a different identifier, hence a different stage. For example, if a text field is 'Focused' (Selected), it'll be used as a different identifier than the 'Unfocused' text field. For example:

Different Identifiers: 'Unfocused text field' Vs 'Focused text field'


Once a Stage is identified, Jiny gives an Instruction which has usually two components:


Every stage has an audio instruction called Voice. It tells the user what action she is required to take at that stage. Jiny can speak any language based on user-preference. The Voice can be digitally synthesised or manually recorded. The Voice is typically in the following form:

'To do this...Tap here'

For example:


When the instruction says Tap here, an animated visual indicator appears on top of the action button. It's called the Pointer. Just like Identifiers for stage, we define an identifier for every Pointer as well. For example, the 'Email text field' is used as Pointer Identifier in this case:

Pointer Identifier

The on screen location of the button is computed dynamically. So, even if the user scrolls the page, the pointer is always linked to the identifier and moves with it and also works seamlessly across devices with different dimensions and resolutions.