While I was studying to a test in a Cognitive Psychology class, I figured out that our brain has performance features that we might want to import to our applications.
In short, our brain has this mechanism - "Inhibition of Return" (AKA, IOR). This mechanism refers to the observation that the speed and accuracy with which an object is detected are first briefly enhanced after the object is attended, and then detection speed and accuracy are impaired. This means that when you attend new objects, your response will be quicker than attending already attended objects.
So our brain actually makes us go ahead with a certain flow and it also promises us that it's gonna be quicker, so... why not?
"How does this relate to optimizing software??" you're probably being asking yourselves. Well, most of the time, we can anticipate the usual workflow of our users. Hence, once the user does a certain action and starts the expected flow, we can start preparing stuff for the next expected steps in a background thread. So when the time comes and the user really forwards to the next step, the application will react faster.
This "Inhibition of Return" pattern should be used and developed very wisely. We don't want to consume 100% of the user's CPU after each action, using the excuse that we're preparing the next 200 possible steps in the background. The expected flow should be, in my opinion, a very restrained, tunnel-like flow:
Simple and restrained flow (a flow might be more complex, but we should use the pattern only for specific workflows)
Too complex flow for the pattern
For example, let's say we have a grid with paging support and we know that our users tend to go though the grid pages. After a page is done loading and is presented to the user, we'll start fetching the next records on a background thread.
This pattern also conforms to "The Paradox of the Active User", which concludes "Do NOT design for the idealized rational user, design for the way users actually behave". This strengthens the importance of finding the right workflow that the users really execute.
In conclusion, if it's good enough for our brain, I think that it's good enough for our users! :-)
Reference
All the best,
Shay