Brief Response to Corey on Software Craftsmanship
Date Published: 24 February 2009
Hey Corey, thanks for the well thought out comments. Let me consider my response and most likely post it on my blog, but while I’m writing here I’d like to describe a very real scenario I’m faced with right now that plays into my thinking on this subject.
I am providing some coaching to a small business owner and software developer. This shop has been around for about 18 years and has a shipping product written in a legacy (as in, no longer shipping) platform. He has chosen to move it and his team to the C# and .NET platforms, and wants my assistance getting there.
My personal experience has led me down the path of TDD, XP, Lean Development, and writing SOLID (a la Uncle Bob) code. I very much prefer to work in this environment. However, in working with this client, who has only the budget for a few hours of time here and there, I know it will be a very long time (at this pace) before this team can get to any kind of proficiency with this environement. They’re very much data-first, two-tier, forms developers. And due to the pressure from the current economy, they need to ship some new things ASAP (yesterday, ideally).
If it matters, this client is also a friend of a friend, and one who has placed their trust in me to help them make the best decisions for their business in terms of how to move forward.
Now, it literally pains me to choose what I consider to be less-than-ideal coding practices or frameworks as being the best way forward *for this client* but I believe that the reality is that that is what is called for. They need to ship product now. Their skills are what they are. They don’t know unit testing. They don’t know agile. They know data modeling and forms dev. And they don’t have the budget for me to train the whole team properly or for my team (who does have these skills) to do it for them.
So, I can stand on principle and leave them high and dry. That’s a valid option and perhaps one the Amish craftsman might adopt if their friend asked them for advice but didn’t have the time to invest to properly learn all the master’s skills before the job needed done (and the friend needed to do it themselves despite their own admitted lack of the master’s skill).
Alternately, I can view my role as being larger than just a coder, but as an asset to the client’s business, and as such I can try and help choose the path that leads to the business’ short term success (e.g. shipping new product). That’s what is being asked of me by this client, and I don’t think it’s dishonorable of me to do right by the business even if it means using tools that I personally would be less productive with.
And the client does acknowledge they have a long road ahead and is eager to learn. But they can only invest so much time and money in learning now – they still have to produce something in the very short term.
How would you respond in this situation, Corey?
Steve is an experienced software architect and trainer, focusing on code quality and Domain-Driven Design with .NET.