Mise-en-place
This is a French culinary term meaning "everything in its place," and refers to the arrangement of supplies at a cooking station. The idea is that there is an ideal configuration of pots, pans, knife, raw food, etc. for the dishes you are preparing. So rather than thrashing back and forth with lots of wasted movement (Muri, muda?) everything should be set up correctly from the start, saving time and energy.
The term has also been used in more extended way to refer to a state of mind, and the organization of other systems.
According to work-clean-dan-charnas, notable features of good mise-en-place include the following:
- Resources are gathered and brought to the work space so that everything needed is at-hand.
- The space is arranged to maximize effectiveness and minimize wasted effort.
- Actions (cutting, breading, spicing, etc.) are practiced so that they can be performed automatically.
What is good mise-en-place for software engineering?
- Resources at-hand
- Documentation, specifications, mockups, etc. should be loaded and ready to go before coding begins
- Outputs from the programming process should be at-hand. (i.e. a browser window for web development, a terminal for test output, etc.)
- A detailed task list
- Arrangement of space
- Language/framework documentation should be available in the editor/IDE to the extent possible
- Screen real estate should be set up to show the most frequently accessed resources with minimum effort.
- For example, when doing front-end development, I will have one screen dedicated to IDE, another to a browser with dev tools, another to the specs and mockups, and another to the detailed task list.
- Actions should be practiced so they can be performed automatically
- Frequent actions should be done via keyboard shortcuts if possible. e.g. common refactorings like renaming, extract function, etc.
- If there is a frequent action or set of actions that requires multiple predictable steps, then it should be automated with a macro tool like AutoHotkey.
- Tests (unit, integration, end-to-end) should be automated so that we don't waste time performing them manually
- Code formatting should be automated by a tool like Prettier or gofmt