I’m guessing that for a lot of developers out there the idea of software craftsmanship sounds fantastic and that they’d love to be able to do it but everyday they are facing deadlines to deliver software to a client and as such are under pressure to “just do it” rather than taking the care they would wish to.
I firmly believe that software development is a craft, whilst it has engineering principles it can at the same time be very close to art, much like a master carpenter who when creating furniture has specific techniques for creating different parts of that piece of furniture but what they produce when it is all put together is often viewed as a form of artwork.
What a master carpenter has though is usually time to exercise his skills to enable him to produce the best “product” that he can, people can see and appreciate what it is he is producing and therefore the time it takes to create it is better understood by the customer as they can see what has gone into the finished product.
Software, on the other hand, is viewed completely differently.
How did we get here?
When it comes to software how often have you heard the phrase “but its only a web page!” and here lies the problem. Software by its very nature is intangible and the customer is only likely to see whatever they interact with they don’t see all the hard work that has gone into the creation of the “product”.
Yes you the developer have sweated blood & tears to craft the software to meet your exacting standards meaning its tested, clean code that adheres to SOLID principles to ensure that not only you but those that come after you will be able to easily maintain and evolve the code base and you have delivered it on time as promised.
The issue is that because the client doesn’t see or appreciate this they don’t care. What they care about is delivery of features/stories/tasks and what they want is more of these delivered, if possible, yesterday because time is money and in the current financial climate there isn’t a lot of it around.
And the issue is?
At Agile 2011 Jeff Sutherland was quoted as saying “the iron triangle is a relic of the 20th century” and when it comes to larger enterprise development I would hope he is right, it is often far easier with internal “customers” to be able to educate them to flex the scope and ensure you deliver value to the business, but, as I mentioned in this post then in my opinion if you are working for a small software house, or dealing with external clients, the iron triangle is very much alive and you are expected to meet it.
Without the support of your management you face the very real prospect of software craftsmanship been seen as a luxury that you cannot afford, and any time taken away from delivering software the “customer” wants is not acceptable.
I can hear the howls of derision already “you need craftsmanship skills to reduce the number of bugs”, “what happens when the code changes”, etc. and I don’t disagree but I know of more than one developer that has had been told they have to deliver by <x> and the only way they feel it can be done is simply by cranking out the code and worry about the bugs afterwards. On top of this I’d hazard a guess the number of developers I know in this situation outnumber the developers who are able to exercise there craftsmanship skills by a large number.
How do we solve this?
For the most part this isn’t a developer problem it is a management problem, developers want to follow craftsmanship practices but it is the management that feel it isn’t a productive use of time.
Unfortunately the bottom line is money, and if the company you work for is focused on fixed term, fixed price contracts trying to move to using more craftsmanship practices will not be easy. It is usually these environments that use waterfall type methodologies and expect developers to hit the deadlines they are given and it may simply not be possible to change the culture of the company to a more craftsmanship oriented one.
To help you try and transition towards the right sort of environment where craftsmanship is valued you need to be showing people the value in what you want to do and to do that its about:
- Education, of taking your managers and/or customers and showing them that through the use of craftsmanship skills the overall cost of software drops
- Showing managers/customers all that is produced, they don’t have to understand it just be able to appreciate that it “isn’t just a web page”
- Involving managers/customers in the creation process to help them feel like they are part of what is being produced not just a recipient.
- Helping managers/customers to get the most value from the software so that they feel that their money is being well spent
Unsurprisingly agile methodologies value these things and place them at the core of what you are doing, if you are working in an agile environment and you aren’t doing this then may I humbly suggest you aren’t in fact agile, but that’s a post for another day.