Design for Productivity
What is productivity #
\(\boxed{\dfrac{desired \space output}{time + resources}}\)
i.e. being more productive means achieving more with less.
Guidelines #
Minimize cognitive load. Invest in UX. Don’t Make Them Think.
Automate menial tasks. Don’t make users do things the system can do for them.
Create tools that empower users to have more control over their domain, and less dependent on other people and technical skills.
Provide safeguards that give users the confidence they will not screw things up, and that their actions will not have unintentional consequences.
Provide emotional safety through a sense of control: keep the user in the loop, provide status updates, reliable estimations and predictions on what’s going to happen next, ability to cancel or undo operations.
Build for the users to fall into the Pit of Success
- Use automation to prevent mistakes and misuse (compilation, static code analysis, test coverage, etc.)
- Self documenting code (good type system, naming conventions, explicit results, single responsibility, dependency declarations)
- Provide Auxiliary documentation:
- Decisions, reasoning - why is it like this?
- References (where you got it from, relevant issues, etc.)
- Usage examples (executable - e.g. tests - where you can)
- Actionable and specific logs and error messages (with context information)