Have you ever needed to do some minor home repairs, and couldn’t find all your tools or all the materials and supplies you needed? Some items were where they belonged and others weren’t?
Or you wanted to cook a meal, and you couldn’t find all the utensils or all the ingredients, because not everything had been put back in its proper place after the last use?
When developing software, have you ever been in a situation where it was hard to find everything you needed? You know there was a list of standard identifiers for county-level taxing authorities somewhere. Was it on SharePoint? The team wiki? A shared network drive? What about this odd-looking branch in the version control system? Is it important, or was it an experiment that can be deleted? Do you have to merge it or can you ignore it? And why hasn’t the network admin assigned to your project returned your calls or emails? You can’t promote your code to the QA environment until you get the appropriate rights granted to the application’s test user id!
Whether you’re puttering around the house, working on your car, cooking a meal, doing the laundry, or writing software, everything is easier when the items you need are at hand and in their proper places.
People working in manufacturing operations learned that lesson long ago. A basic idea in lean manufacturing is 5S; a set of guidelines for keeping a work space orderly, so that people don’t waste a lot of time looking for tools and materials.
Motion is one of the Seven Lean Wastes; it refers to unnecessary motion on the part of workers to walk around or to find tools or parts during a manufacturing process. The analogue for software teams is unnecessary “motion” to look for things in multiple places, whether physical or electronic.
The five S’s in 5S stand for five words:
- seiri, often translated as sort, means to dispose of any items that are not necessary to the work to be done.
- seiton, often translated as set in order, means to arrange necessary items so they can be found and used easily whenever they are needed.
- seiso means to clean or to organize the work area, to help maintain order as well as to ensure worker safety. Cleanliness is also treated as an inspection criterion. A clean work area is more likely than a dirty one to be well-organized and usable.
- seiketsu, often translated as standardize, means to create and follow a set of regular procedures to keep the work area orderly and clean.
- shitsuke, often translated as sustain, means to stay on top of things once you’ve gotten everything organized. Don’t let the situation deteriorate again.
Software development differs from manufacturing in a couple of key ways. First, it isn’t a repetitive process to produce copies of the same widget again and again, each one starting from raw materials. It’s a creative activity to produce a unique solution, one-of-a-kind. And yet, software development does involve some repeating patterns of work.
Secondly, a software development team has “work spaces” in both the physical and the virtual realms. Manufacturing operations don’t have virtual spaces. 5S originally came about as a way to organize cells in a lean manufacturing setup, so that workers wouldn’t spend 40% or more of their time walking five steps this way and five steps that way every time they needed to use a particular tool.
The repeating patterns of work, and the fact we often need access to common information, shared software artifacts, tools, and environments, mean that 5S lends itself very nicely to software development work. And it turns out to be easy to apply 5S to virtual spaces as well as physical ones.
Physical Work Space
Whether in a team room or in individual work spaces, we can save ourselves a lot of time and frustration by making sure the things we use frequently are easy to find. Some examples:
- List of phone numbers
- List of chargeback codes
- Batteries for wireless mice and keyboards
- Remote control for the overhead projector
- Keys to the supply cabinet
- Supplies for process visualization (sticky notes, etc.)
- Whiteboard markers and erasers
- Cables, chargers, and similar items
You get the idea.
Virtual Work Space
Software teams can also apply 5S to their virtual work spaces and virtual tools, such as:
- Version control system (delete temporary branches that aren’t needed)
- Source code (remediate technical debt)
- Test code (remove meaningless tests; organize test cases by functional area, not by test subject)
- Build scripts / configuration files (delete unused configuration settings and steps)
- Deployment scripts (delete unused steps)
- Environment provisioning scripts (delete unused steps, replace obsolete versions)
- Servers (clear out unused directories, defragment disks)
- Documentation (delete or update obsolete information; keep information organized logically; add indexing feature, if missing)
- Backlog (no need to keep “dead” backlog items forever)
- Development environments (clear out unused directories, uninstall unused software)
- Test environments (ensure test environments are identical to production environments)
- Staging environments (ensure staging environments are identical to production environments)
- Reports / statistics / metrics (remove obsolete or unused data from reports and logs)
- Backups (keep backups in sync with current configuration; test restore procedures regularly)
- Recovery (test recovery procedures regularly)
One of the simplest and most impactful things you can do is to establish and adhere to consistent naming conventions. This is not included in the list above because it applies to every item in the list. Consistent names make it easier for people to locate information and artifacts they need, easier to identify the purpose of any given artifact, and easier for people to know what to name new things they create. As a result, it also facilitates automation of any and all repetitive tasks, whether it’s automated testing, automated deployment, automated monitoring of production environments, creating reusable templates or boilerplate code, or anything else you can think of to automate.