hmmm. i continue to not understand how people can claim such things. i
mean, i can see it as "hey, we're saying that we would like to do our
best" but isn't it the fact that any non-dirt-simple program is
provably not remotely realistically provably defect-free?
sincerely.
things like "we strive to write defect-free code" is ok to me, it says
there is a reach which sure might go beyond our grasp but what else is
a reach for kinda thing.
which, depending on how one reads things as they are now, might be
what it is saying :-) so maybe i'm just worried that the wording could
be read (by people like me?) as over-promising.
and, ja, i agree that metrics/measurement are required tools for
keeping such promises.
sincerely.
It sounds like for you that striving to write defect-free code means
rigorously testing it. I think that these Ethics are not trying to
prescribe too much, and instead leave room for the different
approaches to accomplish what the ethics propose. I would assume that
most of us would use an approach like Extreme Programming to
accomplish a lot of what is proposed in the Practice ethic, but that
is not the only way.
>
>> Agreed that a plain "defect-free" can't... work.
I disagree. The code we release should be defect-free. That doesn't
mean it is perfect every step of the way, but we treat every release
as an end and not just a means. There are no known defects in our
system. From experience, I know this can work.
I recently posted a blog about the ethics of software defects here:
http://blog.8thlight.com/articles/2009/4/8/ethical-approach-to-software-bugs
We Economize
We consider it our responsibility
to keep the cost of every feature reasonable;
therefore, we
build only what we need to deliver the current feature and
design in a way that prepares us for any feature you might choose next
I don't know whether that's too agile-sounding and therefore moves
away from the general craftsmanship message, but it points to our
commitment to supporting our customer and his business.
--
J. B. (Joe) Rainsberger :: http://www.jbrains.ca
Diaspar Software Services :: http://www.diasparsoftware.com
Author, JUnit Recipes
2005 Gordon Pask Award for contribution to Agile practice
Register for Agile 2009 at http://www.agileregistration.org
The Netscape people coined a phrase for this a long time back. When a
product had no known defects, they said it had "zarro boogs".
http://en.wikipedia.org/wiki/Zarro_boogs#Zarro_Boogs
Peter
> We Care
> We consider it our responsibility
> to gain the trust of the businesses we serve;
> therefore, we
> take our customer's problems as seriously as they do and
> stake our reputation on the quality of the work we produce.
Trust is an end not a means, and you can not make someone trust you.
As a craftsman it is my job to understand the problem, not to take it seriously.
> We Practice
> We consider it our responsibility
> to write code that is defect-free, proven, readable, understandable and malleable;
> therefore, we
> follow our chosen practices meticulously even under pressure and
> practice our techniques regularly.
Defect free is impossible unless the software is trivial or you are lucky.
You can't write proven code, it is time that proves it.
One man's defect is another man's feature. Is a defect an undesirable
behavior, a failure to meet a requirement, or an unexpected program
termination?
> We Learn
> We consider it our responsibility
> to hone our craft in pursuit of mastery;
> therefore, we
> continuously explore new technologies and
> read and study the work of other craftsmen.
Do you mean new technologies or new techniques?
> We Share
> We consider it our responsibility
> to perpetuate the craft of Software;
> therefore, we
> enlist apprentices to learn it and
> actively engage other craftsmen in dialogue and practice.
Having an apprentice is not a sign of craftsmanship.
Teaching is not a sign of craftsmanship.
Consistency is a sign of craftsmanshup.
Deliberate design is a sign of crafsmanship.
Reliability is a sign of craftsmanship.
- Rob
+1
> - If our manager/customer tells us to stop wasting time in practices,
> that we have determined to be necessary to maintain high quality, we
> will not stop those practices.
-1
I kinda agree, but don't think it should be included.
> - We do not believe that the quality of all systems will inevitably
> deteriorate over time
-1
Systems don't deteriorate by themselves. They are enhanced sloppily,
outlive their usefulness, or outlive their platform.
I prefer "reliable", without a time limit.
> - Legacy code is code without tests. We do not write legacy code which
> will be difficult for others to change when we have gone.
-1
Too specific. Tests do not imply readability, and not all tests can be
automated. Sometimes documentation is needed.
> - We are all the time trying to learn new...We will do it on our own free
> time, because we are proud of our craft...and we like learning new things.
+1
I would also like to add:
- We mean to develop software consistently and purposefully. Our software
is designed intentionally, drawing on our experience, as opposed to
designing software by accident.
- We develop reliable software. By reliable, we mean that we have taken steps
to ensure that the software is resistant to failure and defects. We employ
our knowledge of reliable design and testing to achieve this.
- We develop maintainable software. By maintainable, we mean that our
software is structured logically so that it may be easily read and extended
by other craftsman, avoiding obfuscation and undue complexity. We
employ our knowledge of patterns and practical experience to achieve this.
- As Software Craftsman we differentiate ourselves from Software Academics in
that we are practitioners first, teachers second. The Craft must be
practiced in order to master it, and we acknowledge that no about of
schooling can replace real world experience.
- As Software Craftsman we differentiate ourselves from initiates and
apprentices in that we have a history of developing masterful software.
Although others may strive to be consistent, or to deliver maintainable
software, as Software Craftsman we have already acheived this.
Rob
As the complexity and the age of your system increases doesn't the
(opportunity) cost of maintaining zero bugs increase accordingly?
If you have bugs in systems or tools that you depend upon do you
include those in your bug count? What do you have to change or give up
in order to stay at zero bugs?
What if you rely on the behavior of the bugs and can't fix them?
The Java language has a lot of known bugs that can't be fixed because
it will break existing code.
I don't believe that can be absolutes. You can't commit to doing
anything other than what makes the most sense based on your
experience.
Rob
In the interest of full disclosure - this project at times didn't have a 0 known defects policy, and we were just spending so much time in churn that we took the poison pill, and fixed all the defects. Customer satisfaction and velocity immediately increased. It was painful, but nobody said this was easy.
Will do.
> effectively defeats my original goal. I think it means we've missed the point somewhat :-)
I don't believe it was entirely clear as the what the goal was other
than defining an ethic statement. And I think there were problems
with what you had.
> 1. We adopt a symbol as the name for what we're doing and stop talking
> about "craftsmanship". I propose the "okay" sign made with the fingers.
Uh... please no.
> 2. Around the symbol should be the slogan "We care. We learn. We
> PRACTICE. We share.
I can agree with that. I just didn't agree with your elaboration in
the original piece.
> People are also still getting very bogged down in the language.
> "Craftsman", "Artisan", "Master", "Apprentice" etc etc.
I think names are important. I think Craftsman is more appropriate
than Artisan. And the other two are merely levels, something which is
very hard to define with any measure of success.
> Beyond that, everyone can find their own path to mastery.
I think I came to this list looking for the path, or at least potential paths.
> Of course, I'm only partially joking, and you're all free to do as you please
I was kinda hoping for more than that. I was looking for a cool club
logo that I could put on the back of a biker's jacket, or maybe a
declaration of who we are and why we are doing this.
Rob
Best check first whether that symbol doesn't have a conflicting
meaning in, say, Indian or Chinese culture.
>
> 2. Around the symbol should be the slogan "We care. We learn. We
> PRACTICE. We share." Practice is our USP, so it should be highlighted
> in some way.
+1
>
> 3. Our movement only needs one rule: The first rule of software
> craftsmanship is that you do not talk about software craftsmanship
Naw.
-----
Brian Marick, independent consultant
Mostly on agile methods with a testing slant
www.exampler.com, www.exampler.com/blog, www.twitter.com/marick