Thanks for putting it together Doug!
I would start by removing the following principles...
"We drive our development with tests" (UncleBob)
I could be persuaded (by Uncle Bob) to change my mind on this, but I
don't see how this relates to Craftsmanship. It feels too low-level.
"We keep projects from spinning in circles" (Doug)
This really doesn't tell anyone anything. No approach could disagree
with this and therefore I don't think it's carrying its own weight.
"We don't wait for complete definition before beginning" (UncleBob)
"We never allow ourselves to be blocked" (UncleBob)
Again, these feel too low-level. I'd prefer that we not redefine XP as
Software Craftsmanship.
There are others that I'd want to refine and reword. But I'll start
with the above.
Best,
--Dave
I would start by removing the following principles...
"We drive our development with tests" (UncleBob)
I could be persuaded (by Uncle Bob) to change my mind on this, but I
don't see how this relates to Craftsmanship. It feels too low-level.
"We keep projects from spinning in circles" (Doug)
This really doesn't tell anyone anything. No approach could disagree
with this and therefore I don't think it's carrying its own weight.
"We don't wait for complete definition before beginning" (UncleBob)
"We never allow ourselves to be blocked" (UncleBob)
Again, these feel too low-level. I'd prefer that we not redefine XP as
Software Craftsmanship.
There are others that I'd want to refine and reword. But I'll start
with the above.
Best,
--Dave
On Wed, Mar 11, 2009 at 7:40 PM, Doug <do...@8thlight.com> wrote:
>
personally, i think that's overkill.
sincerely.
> Is it?
I think a real Craftsman would know about the need to balance things,
and that sometimes "ship it!" really does outweigh "but what about
those 5 low-priority open bugs?".
> It doesn't mean that the software is bug free, but enhances the value
> of testing.
Apologies, I'm not yet catching on to what you mean by that. (1)
Presumably we all know you prove software of any real size to be 100%
bug-free (and one would have to define 'bug' even so), so I assume
that isn't relevant. (2) "Requiring 0 known defects enhances the value
of testing" doesn't make sense to me, I don't see the causality there.
If anything, I'd just /avoid/ testing so I can say there are 0 known
defects?!
sincerely.
Why not? What if the job is to move that pos product more towards
something less stinky? Is that beneath a Craftsman?
sincerely.
Cheers!
Carl
I'd say it means that a craftsman will make sure that he fixes those 2000 known bugs before releasing...
On the other hand it would be possible that a company just hired a
team of craftsmen to solve their terrible pain with their software, in
which case I would say that a staged approach should (and possibly
would) be taken.
I'm just not sure if that carries enough distinction in this day and
age. Nearly every community focused on a technology or process would
be able to agree to that principle. I believe we need to look for our
unique principles, the principles that set us apart.
> One last thing I'm missing:
> We regularly reflect upon our practices and projects and identify areas of
> improvement to delight the customers in our next projects.
I think that's too close to the last agile principle on:
http://agilemanifesto.org/principles.html
Keep 'em coming, tho!
I tend to lean toward exposing that decision to the business owner,
though it's a judgment call. Reducing the defect count to 0 can mean
huge delays in releases that could kill the business. In most cases,
though, the principle is about being rigorous and holding ourselves to
a high standard. I don't have a good principle, though, to describe
what I'm getting at. Arg.
good point.
> I tend to lean toward exposing that decision to the business owner,
> though it's a judgment call. Reducing the defect count to 0 can mean
> huge delays in releases that could kill the business. In most cases,
> though, the principle is about being rigorous and holding ourselves to
> a high standard. I don't have a good principle, though, to describe
> what I'm getting at. Arg.
something like "O God give me the strength to change the things I can
and to accept things that I can't and otherwise go talk with BizDev."
:-)
- We are skill-centric rather than process-centric. For us it is more
important to be highly skilled than to be using the 'right' process.
This has consequences. Gawande asked "Is medicine a craft or an
industry? If medicine is a craft, then you focus on teaching
obstetricians to acquire a set of artisanal skills[...] You do
research to find new techniques. You accept that things will not
always work out in everyone's hands Better (page 192). It suggests
that no process or tool is going to make us all equally successful.
Even though we can all improve there will always be discrepancies in
our skill levels.
To be honest it seems quite silly. Nobody intentionally introduces
bug. Not even the crappy programmers.
In the end *when* issues are found in the system it is really up to
the customer to figure out which ones need to be addressed before the
next release. If you have the release often mentality then you most
certainly release with known issues.
--
David
blog: http://www.traceback.org
twitter: http://twitter.com/dstanek
What if we are working side by side with our stakeholders in an agile
way? We are in the middle of a sprint and a bug is discovered. They
have the option to have us fix the bug or continue on our current
stories. At the end of the sprint we may still release if the customer
wants to.
Yes, this is a great question. And this sort of approach is why I like
the phrase "as intended" because it reflects the ambiguity of this
problem while still pointing us in the right direction. I agree with
Carl Hume's suggestion:
"As an aspiring craftsman, I can prove everything I write works as intended."
This is flexible enough that it handles rigorously specified cases, as
well as deeply collaboratively cases. In one case the intention has
been documented, in the other case the intention is found through
interaction. In either case, a craftsman has a responsibility to
ensure that the customer's intentions were fulfilled by the system.
To be honest it seems quite silly. Nobody intentionally introduces
On Thu, Mar 12, 2009 at 5:02 PM, Carl Hume <carl...@gmail.com> wrote:
>
> How does "we do not introduce any known defects into the system" sound?
>
bug. Not even the crappy programmers.
In the end *when* issues are found in the system it is really up to
the customer to figure out which ones need to be addressed before the
next release. If you have the release often mentality then you most
certainly release with known issues.
I believe we need to mention something under The Craftsman's Product
(well-crafted software) regarding defects. Specifically McBreens book
says something like, and I don't have my copy with me, a Craftsman
delivers with 0 known defects. I realize that 0 known defects is
pretty controversial, so let me explain a little as to why I think
it's important.
On a product I worked on about a lifetime ago, there was a "quality"
policy. That policy was "New code must have 0 showstoppers or high
defects, existing code must have 0 show stoppers." Now when I left
that company the system they shipped had around 2000 open defects, but
it was okay because they were medium and low! Well except for the
high ones that the customer was used too!
So obviously that level of suck is not acceptable to a craftsman, but
where do we draw the line. Is 5 defects okay? 200? 8%? In my
opinion, and McBreen's as well, the only truly acceptable answer is 0.
So I would add, to the Craftsman's Product,
We allow 0 known defects.
I've softened the language on that several times, and that just allows
weaseling. This isn't the same as perfect code. We are human, and we
will release > 0 unknown defects, but releasing code with bugs you
know exist is irresponsible.
Exactly my point. So saying 0 bugs isn't correct. We certainly should
aim at producing the best possible product with the least amount of
defects. In the end 0 is not always necessary.
While I can't control how many bugs are in the system at any one time,
after all, bugs are usually unknown, I can control my behavior. By
that I mean, I can choose to always seek out and find new tools,
practices, habits, etc.. that are known to reduce bugs and integrate
them into my tool set.
--
Curtis Cooley
curtis...@gmail.com
===============
Once a programmer had a problem. He thought he could solve it with a
regular expression. Now he has two problems.
In the end *when* issues are found in the system it is really up to
the customer to figure out which ones need to be addressed before the
next release. If you have the release often mentality then you most
certainly release with known issues.
Well said. I think that's a great point and is a more distinctive
practice of craftsmanship than focusing on bug counts.
+1 for "Sign Your Work"
Best,
Dave Hoover
//obtiva: Agility applied. Software delivered.
On Thu, Mar 12, 2009 at 14:56, Dave Hoover <dave....@gmail.com> wrote:
>
> "We don't wait for complete definition before beginning" (UncleBob)
> "We never allow ourselves to be blocked" (UncleBob)
> Again, these feel too low-level. I'd prefer that we not redefine XP as
> Software Craftsmanship.
I don't know that I have seen "We never allow ourselves to be blocked"
in any of the more process-centric principle sets.
It's one I've invented for myself, and it made me happy to see it
spelled out. I think it's crucial, but maybe not for the craftsmanship
movement... Though I think it's the mark of a strong professional to
take matters into their own hands rather than becoming victims of the
environment.
Dunno. I kinda like it :-)
- Kim
Craftsmen,
In another consensus building effort, I've tried to gather up all the
principles that have been batted around lately.
Where possible, I've indicated the origin of the principle to the best
of my knowledge. I've pulled many directly out of McBreen's book.
Some of those we haven't really discussed yet. Those credited to
UncleBob are from his "Craftsmanship and Ethics" talk. Other credits
are from list activity.
Feel free to add to the page, but please don't delete (yet).
http://groups.google.com/group/software_craftsmanship/web/principles-of-software-craftsmanship
The Craftsman
We follow our chosen practices deliberately, to ensure quality in our
work" (Summit / BenRady)
We adopt development processes to suit our own unique abilities and
talents (McBreen, 35)
We are skill-centric rather than process-centric. (Ade)
We are generalists (McBreen, 21)
We achieve technical and design excellence through continuous and
deliberate learning and practice. (Enrique)
We build our reputations on delivered quality (McBreen, 37)
We desire to remain Software Craftsmen and write code for our entire
careers(McBreen, 73)
We respect master craftsmen as the key to Software Craftsmanship
(McBreen, 85)
The Craftsman's Product (well-crafted software)
We write code that is easy to read, understand and modify.(Summit)
We believe the code is also an end, not just a means.(Summit)
We treat software like capital (McBreen, 155)
We build in quality to the software we create. (McBreen, 41)
We sign our work (McBreen, 52)
We put predicable and forgiving user interfaces on our software
(McBreen, 163)
We design software for testing and maintenance (McBreen, 155, 165)
We value long lived technologies and languages and are wary of
proprietary tools (McBreen, 87)
We drive our development with tests (UncleBob)
The Craftsman's Rhythm (steadily adding value)
We say no to prevent doing harm to our craft and our projects
(Summit)
We keep projects from spinning in circles(Doug)
We value quality over feature set of delivery data (McBreen, 64)
We build long-lived application and support them throughout their
life (McBreen, 65, 80)
We deliver what our customers really need, not just what they ask for
(McBreen, 83)
We automate every task possible (especially testing) (McBreen, 63)
We don't wait for complete definition before beginning (UncleBob)
We never allow ourselves to be blocked (UncleBob)
The Craftsman's Community (a community of professionals)
We work in a community with other craftsmen (Summit)
Our livelihoods and reputations are interdependent (Doug)
We will help other craftsmen in their journey (Summit)
We can point to the people who influenced us and who we influenced
(Summit)
We take on Apprentices and put them in an environment where they can
learn our craft for themselves (McBreen, 97)
We recommend other craftsmen, hanging our own reputation on their
performance. (McBreen, 38)
We accept that different craftsmen are better suited for one kind of
job over another (Jim Highsmith via McBreen, 65)
The Craftsman's Customer (productive partnerships)
We are proud of our work and the manner of our work (Summit)
We take responsibility for the code we write (Summit)
We are proud of our portfolio of successful projects (Summit)
We take our customer's needs as seriously as they do (UncleBob)
We build Trust and respect with our customers (McBreen, 54)
We build long term relationships with customers (McBreen, 65)
We desire demanding users (McBreen, 147)
We consistently exceed and raise our customer's expectations of
quality software (Hoover)
A specialist is not a craftsman. If someone is amazingly good at
low-resources programming and has no other significantly developed
development skills, *and* is not attempting to improve any other
skills, then that person does not fit the definition of a craftsman.
And that's OK. We need specialists. And we need craftsman. Being a
specialist is a great and necessary thing.
For example, last week I hired a local database specialist to come
pair with me for 4 hours so that he could advise me on next steps for
MySQL optimizations for http://madmimi.com. He has crazy deep
knowledge of database design, optimization, and maintenance. That is a
very good thing for our industry to have people like that. And he is a
database specialist, not a craftsman.
On 17 Mar 2009, at 12:52, Olof Bjarnason <olof.bj...@gmail.com>
wrote:
Good point.
However this group is about _software_ craftsmanship. There's nothing
wrong with being a specialist. It is an admirable and necessary role.
There's also nothing wrong with software craftsmen who choose to spend
some portion of their career building up expertise in some niche.
However if you want to build and maintain systems that deliver
business value you need more than an assortment of specialists. You
need people who can take responsibility for the entire system by
leveraging the expert contributions of others rather than becoming
ivory tower architects.
Good point. And well said.
+1
This was all very good feedback. I've incorporated it into the doc on
the google group.
I'm not sure if the categories will remain or not. For now I find
them helpful for the sake of breaking down such a big list.
Doug
Thanks for your comment, Phillip. I don't follow the postings here
with a magnifying glass, so I have missed some of the
religious-sounding language you mention. Can you quote an example or
two to help me out?
--
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