Due to the previous post about moderation issues here, I missed a comment that Mark Nijhof made which I think is important, so I want to repost his comment and my response, and then add to it.
Mark said:
“In my definition a Software Craftsman finds delivering value the biggest reason to deliver quality, because he knows that stuff will change and these changes will be easier to deal with in quality deliverables (not just code). The continues learning is because he knows that in order to succeed in the above taks he needs to know his options and needs to practice his skills. And finally it is about more then just yourself it is also about those arround you, if they improve than what you build together will be of higher quality and thus will you deliver more value.
And yes in order to deliver value _now_ you may want to reduce quality, just know and explain the consequences as in the end business decides where the real value lies. And they can only make an informed decision if you inform them properly.”
I responded:
"
I don't disagree with anything you've said in terms of how you define "Software Craftsman", but I question whether the manifesto definition is the same.
Last night, we had an informal end-of-year gathering at a local bar for the Chicago Alt.NET group (which was highly enjoyable) and two things related to this stand out.
1) I made a comment about how having a good Project Manager can make all the difference in having a project succeed and one person (essentially) questioned whether "good Project Manager" was an oxymoron.
2) I have to say I agree with at least the gist of a point that Scott Bellware makes, and made it at the gathering, that the success of a software development project has almost *nothing* to do with the actual writing of code. Developers (and I include myself in this group) like to tout improved coding techniques and whatnot, but the success of software development projects really centers around ease of migration, production maintainability, etc. Some in the group agreed with this, others did not. Needless to say, the people who agreed with me were right...LOL.
Anyway, if you look at the manifesto itself, there is a lot about "well-crafted software" but unless you read into "steadily adding value" what you correctly talk about, individual self-proclaimed craftsmen often seem oblivious to point 2).
And JVR's comment about getting rid of management simply ignores the obvious real-world fact of point 1).
This is why I am so against the manifesto. It's a movement that works against improving software development because it seems entirely focused on what I understand Bellware to be saying about 'local optimization' and completely ignoring how this can be harmful.
It *seems* idiotic to question a movement that wants to increase software craftsmanship, and I'm well aware of that. How the hell can anyone be against writing better code? But, the manifesto encourages what I believe to be tendencies that lead to bad results.”
Adding on to this….
The value of project management
Everyone has worked with bad project managers, but when you work with a good one, you understand their value.
For instance, at one of the clients that I work with, we have a mix of Java, .NET, WCF, WebLogic, SQL Server, Oracle, numerous 3rd party vended apps and God knows what else. For better and worse, different groups within the client have ownership of the various different pieces. A really good project manager manages the communication between the various groups in a seamless way that allows the developer to do their job (writing code, amongst other things) without having to deal with all that communication.
When working on my own projects where I have absolute control over everything, it is fantastic to not have to rely on other groups. But this is the exception, not the norm. A really good project manager is crucial here.
The caricature of the project manager who provides no value exists because we all have had to work with someone like that. Thus, the question of whether “good Project Manager” is an oxymoron.
Local Optimization
I hate it, as a developer, when I am restricted from using the tools that I like to use. So, for one of the clients I work with, I can’t use Rhino Mocks, or NHibernate, or AutoMapper, etc. etc. etc.
As a developer, this sucks. I have to use NMock2 and hand-rolled data access and hand-rolled mapping, etc. etc. etc. Blows chunks.
But, to be honest, I can work around it, and so can any so-called software craftsman if they get off their high horse and do what they should be doing in the first place, writing high quality code within the constraints of the context in which they work. If I can do it, anyone can do it, e.g., if you are forced to hand-roll data access code, you can write that code well. You might hate it because your inner geek wants to use NHibernate 3.0, but whatever.
In terms of delivering quality, maintainable code, it is possible to do this with, e.g. hand-rolled data access code. Will it be as high quality as, e.g. what you can do with NHibernate 3? Probably not. But deal with it.
Summary
The software craftsmanship manifesto encourages local optimization, which prevents successful software development projects. Be a craftsman, reject the manifesto.