This site is a work in progress. Last updated January 2023.
Note: there is more about consistency in the page on Interface Design.
If there are similar workflows already in existence in the app or in common usage elsewhere, make sure you stick to established workflows, that way there's little / nothing new for a user to learn before trying the new workflow. That said, if you have an innovative approach that is a clear improvement on the status-quo - a product differentiator, you should obviously feel free to deviate; just don't do it without reason it results in needless bottlenecks for users.
If it's relevant to the workflow it should be readily available to the user, so check if all the required components are obvious, or are revealed as the user proceeds along the workflow. An example of failing at this would be to have two controls that are often used together be buried in separate hierarchies that need digging out.
A user should know that the workflow succeeded or failed. If it failed, you should try to say why, and for bonus points, tell them what they did wrong. For a gold star, fix what they did wrong automatically and complete the workflow for them.
Make it safe to experiment, and/ or go wrong. At the most basic level you should support undo for everything. In essence it should be easy for users to try something, change their mind, and then backtrack in order to try something else. When users can work like this, they will trust your app more.
Use tooltips, inline help, and hints to let users know what something does, or what they can do next. For example notice how hotkeys are (optionally) listed in the bottom left of the viewport to indicate to users what secondary actions they can perform.