I don’t remember exactly how I ended up there, but after following a discussion on a possible Refactoring browser implementation for Ruby over at Murphee’s, Lean Manufacturing grabbed my attention. Besides Just-in-Time production, there is another big aspect of it that I hadn’t paid much attention to before: Muda, or the reduction of waste.
Waste, in the Toyota Production System, can come from seven different sources: overproduction, waiting, transporting, inappropriate processing, unnecessary inventory or motion, and defects. They can all be mapped to the software development domain quite easily, and most have a direct link to agile methodology practices, even if in some cases you have to stretch your imagination a bit. Not to wonder, as most of software development processes were directly inspired by production line practices - not necessarily in the conveyor belt sense, but more as in “I have (resources, ideas) and would like to make (manufactured products, software) out of them. What is the most efficient, effective and sustainable way to do so?”
There are two things we can waste while developing software: time (and its little brother, money) and brainpower (and its big brother, talent). Interestingly, flushing one down the toilet also brings the other with it: a project stuck in endless meetings or in fixing production issues is wasting both its people’s time and brainpower, and I find it fascinating and saddening at the same time how often I see projects that are up to here in both problems: a production issue is found, meetings are held for days or weeks, but nothing gets actually done to fix the problem and avoid it happening again. During those meetings, there’s lots of talk about changing the architecture, platform, getting more programmers and tools, or my favourite, “just rewriting the whole damn thing.” And rewriting a significant part of your system, as anyone who watched Netscape die can tell, doesn’t work.
Still, why is this behaviour so common, and why aren’t we working on bringing refactoring support for purportedly extremely productive languages like Ruby like there is no tomorrow, as to avoid repeating the mistake of rebuilding things instead of beating them into shape?

Tiago Silveira | 12-Dec-05 at 9:19 pm | Permalink
Hi, I think you’ll have fun reading this:
http://www.slowleadership.org/2005/12/hurry-up-and-wait.html
I think waiting is the biggest waste in software development. And worse, time and brainpower are not saved: they are consumed in unproductive, sometimes unimportant tasks.
ade | 13-Dec-05 at 12:07 am | Permalink
Carlos,
Some of us have had refactoring support in Python for years. Take a look at: http://bicyclerepair.sourceforge.net/
Admittedly there hasn’t been a release for some time but I and many people in python land have easy access to: extract method, extract function, extract local variable, inline local variable. BRM does support other refactorings but those 4 are the ones I hooked up to my current favourite python text editor: Pype ( http://pype.sourceforge.net/ ).
There’s also a pretty decent refactoring browser available for Ruby: http://www.kmc.gr.jp/proj/rrb/index-en.html
I think the really interesting question is why there’s so little interest in improving the existing refactoring tools for languages like Python and Ruby. Why is it no-one seems interested in doing the hard work of putting together a development environment as polished as Intellij? People are too busy following the herd and building yet another web application framework rather than taking on a research-level challenge like refactoring.
–ade
Tetsuo | 13-Jan-06 at 1:14 pm | Permalink
Maybe because it’s harder to do refactoring tools for dynamic typed languages, compared to static typed ones?
http://c2.com/cgi-bin/wiki?DynamicTypesEaseRefactoring