Sunday, 26 July 2009

5S Kaizen in Software Engineering: Part III Seiso

It looks like I'm first up again today, so while Rory's strapped in his high chair shovelling his breakfast in, I'll get on with the 5 Ss.

Today's S is the third - Seiso - which is normally translated to Shine. No matter what your field, we can sum this up with the idea:
"Clean desk at the end of every day"
In a more general sense, this means making everything clean, presentable and ready for immediate use and involves taking shared ownership of and pride in the workspace and assigning duties to maintain this.

In software, we have the concepts of both shared ownership and individual ownership (areas of expertise and responsibility). As with Seiri and Seiton, we must address physical and software resources in the same way:
  1. Return the physical workspace to its rightful state: have some shared ownership of the open areas, but individual ownership of some resources (e.g. library, journals); track the location of all test equipment.
  2. Keep personal software and hardware resources clean and performing optimally: most importantly practice continuous integration; build all configurations regularly (possibly automate); regularly shut-down PCs; regularly cleanup and de-fragment disks; delete test code; delete unused icons and software; possibly re-install OS and software periodically.
  3. Keep the shared software resources clean and tidy: most importantly, continuously re-factor; re-factor and re-organise to break dependencies; remove experimental code; create and enforce a coding standard; fill in time sheets where provided; record project changes and set-backs; maintain project documentation automatically where possible (e.g. from tags in source code, commit messages etc.)
In order to effectively maintain the “cleanliness” of a code base, there needs to be some measures of “dirtiness” that keeps the exercise from being subjective and easy to subvert:
  • Review code (largely subjective, but this is the point where coding standards and best practices are enforced).
  • Measure dependency metrics (see Uncle Bob's excellent Agile Software Development book for an introduction to the sorts of metrics that are useful).
  • Measure unit test code coverage.
  • Automate some standards checking (e.g. copyright statements, line endings, interface comments, spell checking).
  • Static profiling.
  • Dynamic profiling.
Despite what seems to be an industry-wide aversion to maintaining a clean desk, it turns out that we are extremely keen on cleanliness in our shared software workspace and have been developing techniques to maintain this for some time!

Right, we're just over the halfway point. Tomorrow is Seiketsu, or to Standardise.

1 comment: