How does the ShakerPhilosophy apply to software development?
Does it? Is it helpful?
See: ShakerQuote
I see strong parallels between the Shaker philosophy and other principles I've learned and used in software engineering, such as "DoOneThingWell" (many Unix commands follow this principle) and "elegant" designs or code. I personally find simple, clear, focused, well-crafted, and elegant solutions (whether in software or anything else) to be wonderful.
Sure, if you apply the Shaker approach to a drastic degree, you leave out a lot of cool stuff because it isn't "necessary." You can get unhappy results by applying any single principle to the exclusion of all other considerations. But I think we usually err on the side of too complex, too much.
I'd like to see the emergence of more software craftsmanship - "Go see Susan, she makes the best Sensor classes around..." or "You need a good sort? Get one of Doug's, they're the best..." Some software people should be allowed, even encouraged, to spend more than a few fleeting weeks or months on a given problem space, to linger and experiment and refine some generally useful tools, classes, techniques. Perhaps we've gone too far in expecting IT professionals to be generalists and jacks-of-all-trades...
-- AndyMoore
Though it may be useful to draw a distinction between having objects that do one thing well, and people who do one thing well. People aren't objects.
Then what are they? The often utilized class hierarchy Person, Employee, Manager? These are not objects?
Why is it we know at all anything about the Shakers? Doesn't it have something to do with their approach to meaningful, useful, practical stuff. Just how much of the Stuff in your house fits this category? Only about 25% or so in mine. We could all probably be better off with shedding some of the 75%.
To put a positive sense here, Amen.
An example or two for BenKovitz to illustrate the principle:
I wouldn't have minded so much if the actual CD burning part had been well done at the time (after all, I didn't have to install those extras), but it still had lots of obvious areas of neglect.
So think about the Stake-holders. You can't get them to really give you their "usefulness" criterion, but you can get them to show you how they like to work, tools they like to use, and value propositions they associate with use.
That said, the danger here is that, by focusing on what is necessary, you ignore opportunities for positive change and lateral thought. Doing that you can design yourself right out of the market. As ever, there are tradeoffs to make.
Cf. http://www.chinapage.org/gnl.html#11
-- PeterMerel
Sounds kind of like DoTheSimplestThingThatCouldPossiblyWork maybe?
Gee, I knew some of the XP practices were tried and true, but I had no idea any of them were *this* old! -- PaulChisholm
Look, it's really simple. The quote is simply a sweeping generalization, and as we all know, generalizations are ALWAYS wrong (even this one).
-- Graeme Defty
To the Shakers, it was philosophy: reducing nonessential work gains time for worship. They did essential chores as simply and efficiently as they could (DTSTTCPW) and no more (YAGNI). The beauty that resulted is what we recognize today. -- ChrisFay
AndyMoore, I agree with your sentiments re: SoftwareCraftsmanship. I believe OpenSource, more than any other model, leads directly to this. (Also see: NotInventedHere.) -- TobyThain
(From Yahoo group ExtremeProgramming thread: http://tech.groups.yahoo.com/group/extremeprogramming/message/147894 )
I find myself inspired by Shaker philosophy:
"Don't make something unless it is both necessary and useful" = YAGNI.
"beautiful" = code quality. Code quality IS NOT gold plating. Gold plating is adding unnecessary functionality and/or generality.
"simplicity" = Do the simplest thing that could possibly work.
IE: Iterative development. Always ready to release. "Truck Number" issues resolved.
-- JeffGrigg