Could IX Flows be a key to smoother design/dev handoffs?

As UX Designers, we put care and critical thought in our projects. Every interaction is planted with a specific purpose for the user. This is why it makes it that much more painful for us when the final developed interface does not align with our original vision.

It’s easy to blame the developer, but I’d argue that the onus is on us to improve documentation in the designer/developer handoff. It’s not that the developer is incompetent or that she lacks common sense. When the design comps lack a clear explanation of what happens when X occurs, the developer has to… well, try to make it up as they go. It would kill momentum to stop development, send an email to the designer to ask about a certain interaction, wait, respond to clarify her question, wait, then finally get an answer.

We, as interaction designers, have to explain the behavior of the interface… but how? I searched for various ways to bridge this communication gap. I tried creating user flows, annotated wireframes, and logic trees… but they all fell short of conveying the ideas in my head.

I then started developing Interaction (IX) Flows.

Where the idea for IX Flows camefrom

Dan Saffer’s “Microinteractions”

Dan Saffer’s “Microinteractions” book has to be one of the best books I’ve read on interaction design yet. Though short, it is with great information. He breaks down microinteractions into 4 elements: the trigger, feedback, rules, and loops/modes. To [over]simplify:

Triggers
: the user-initiated or system-initiated action that starts the microinteraction

Rules
: the capabilities and constraints in the microinteraction; what can and cannot be done in a microinteraction

Feedback
: the visual cues that tell the user what is happening

Loops
: the repeatability and lifecycle of a microinteraction

Modes
: the different versions or states of an element

Nielsen and Norman Group: Wireflows

I also just happened to run across this
article on Nielsen and Norman on Wireflows
, which argued for the fusion of user/task flows and wireframes. While they show processes and relationships in a simple way, user flows don’t show how the visual elements provide entry points into each page or how they facilitate the user’s goals. Wireframes are great for laying out those visual elements, but by themselves, they are not very descriptive of the relationship or flow between pages.

The wireflow idea was a great solution that shows both the flow and the layouts but there was a gap between how I envisioned the page to versus how the developer would interpret it. The details were still not there.

I looked back on the framework from Dan Saffer’s book and thought:
why not combine these two awesome approaches?
Why not define the triggers/rules/feedback/loops/modes
in
the wireflow?

The IXFlow

In this example, I compiled wireframes of the Instagram app. I figured that most readers would be familiar with it and can follow along this example with the app. First, I will show the entire Interaction Flow and then break down the different elements that make up the document:

Why put together an IXFlow?

The thoroughness of the IX Flow can be intimidating, but communicating these interactions has many benefits:

The different parts of an IXFlow

This document consists of 3 layers on the Adobe Illustrator file. The locked layers include the background color(s) and the title and reference panel. We also have separate layers for the linked screen images and the boxes and arrows.

The Reference Panel

This provides the types of gestures involved on this app and the symbols to represent those gestures, definitions for terms used when describing the interactions, and a legend that defines the flow lines, microinteraction-related symbols, and decision nodes.

Wireframes

These were created in Sketch and then dragged onto this Adobe Illustrator file as a linked image. It’s not imperative that you use Sketch or even Illustrator, use what you are comfortable with. I have also done IX Flows for fully designed mockups, too. The key here is to show the visual layout of the actual screens so you can depict and define the interactions of those specific elements. The great thing about linking them on the AI file is that if you revise the screens and override the file in the folder they are linked from, those screens will update on the AI file automatically!

Arrows, Lines, and Containers

These represent sequences and relationships. You define them in the Reference panel and above is an example of those tools in action.

Specifically, this is a container with the microinteraction details:

How long does thistake?

Without the basic concept and the assets, my first run through this took a week for a single app. However, as I work on more, I have been able to whittle down my time to completion to just 5 hours. Copy and pasting the details for similar interactions, mass-editing the lines, and doing initial sketching of how to lay out the flow helped cut down the time it takes to compile the IX Flow. The main challenge in your first attempt will be to switch to the logical, meticulous side of your brain when it comes to writing out the feedback, rules, and modes. The effort, however, is well worth it and will make you a stronger interaction designer moving forward.

An addedbonus

The additional benefit of compiling an IX Flow for the UX Designer is that this also helps us audit the UX of the interface. Despite multiple rounds of approvals on the mobile app wireframes and design comps, compiling this IX Flow was like running a fine-tooth comb through it. While writing the rules for an element, I sometimes discovered that an interaction or flow really did not make any sense at all. Or it was actually quite confusing or not necessary. I was able to run back to my UX team to discuss and resolve the issue before it ever went to development.

Try ityourself

Want to give it a go? Download my.ai template to start!

This is something I still want to improve so I would love to get feedback and see what you’ve created. And if you are a developer, I welcome any suggestions about how to make this document even more useful. You can comment,
DM me
, or contact me through
email
.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.

Fig. 5

FOXA2-DS-S regulates FOXA2 expression.
a
Screenshot from the Dalliance genome browser [
50
] showing the FOXA2 locus with tracks displaying coverage data for ChIP-Seq experiments for Pol2, FOXA1, FOXA2, HNF4A, HNF6 and CEBPA. The ChIP-Seq tracks were produced by the ENCODE project on HepG2 cells.
b
Real time PCR data showing the expression of and in Huh7 cells upon knock-down. Si1 and si2 FOXA2-DS-S indicate two different, non-overlapping siRNAs designed against . The data are expressed relative to the expression of the control transfected with scrambled siRNAs; the indicate the standard error of the mean across three replicate experiments.
c
Venn diagram showing the number of significantly differentially expressed genes (adjusted value < 0.05 and log2 fold change > or < 1.25) in the microarray experiment on Huh7 knock-down of or .
d
Heatmap showing microarray data upon knock-down of or in Huh7 cells. The colour scale indicates normalised intensities (z-score). The heatmap contains all genes that were significantly altered (adjusted < 0.05) upon knoc- down of either or . The scatter plots in the lower part of the panel show GO enrichment data for genes that were significantly down-regulated () or up-regulated () in either siFOXA2 or siFOXA-DS-S

Microarray analysis of the global transcriptional effects of
FOXA2-DS-S
or
FOXA2
knock-down showed a large overlap in the repertoire of affected genes (Fig.
Sale Best Store To Get Outlet Wide Range Of Pale Blue Rib Racer Back Crop Top Pretty Little Thing xGllwU3
). This suggests that the major target for
FOXA2-DS-S
is the
FOXA2
gene, although additional direct targets may yet be identified. These findings were recently independently supported by the
cis
-regulation of
FOXA2
in differentiating definitive endoderm cells by
FOXA2-DS-S
(also knownas
DEANR1
, or ‘
definitive endoderm-associated lncRNA1
’), indicating that this lncRNA regulates
FOXA2
in different endoderm-derived tissues [
51
].

Note this doesn’t delete the related objects – it just disassociates them.

Just like
remove()
,
clear()
is only available on
ForeignKey
s where
null=True
and it also accepts the
bulk
keyword argument.

Replace the set of related objects:

This method accepts a
clear
argument to control how to perform the operation. If
False
(the default), the elements missing from the new set are removed using
remove()
and only the new ones are added. If
clear=True
, the
clear()
method is called instead and the whole set is added at once.

Note that since
set()
is a compound operation, it is subject to race conditions. For instance, new objects may be added to the database in between the call to
clear()
and the call to
add()
.

Note that
add()
,
create()
,
remove()
,
clear()
, and
set()
all apply database changes immediately for all types of related fields. In other words, there is no need to call
save()
on either end of the relationship.