Sunday, March 1, 2009

Stuck between a rock and a hard place

Steve Smith (blog) asked me what I would do in a particular situation, and I said I would give my advice.

That is indeed a rough situation. Let me see if I understand the facts correctly before I say what I would do
  • Small business owner/developer decides to move his team to .Net using C#.
  • His team is unskilled in writing maintainable systems on this platform.
  • He has to do this switch ASAP using the team he has.
  • He only has money for a few hours of your coaching time 'here and there' to get his team and product onto the .Net platform.
  • He's a friend of yours
Short answer: Run Away. In my experience, there be dragons, and this isn't going to turn out well for anyone.

But, that last point is a stinker. He's a friend, so here is a longer answer.

This sounds familiar. I'm sure that a lot of the people who read your blog and mine have seen this situation. Most of them have probably seen the outcome, too: a system that will very rapidly get to the point of where changes take too long to implement, resulting in the entire system needing to be rewritten. This isn't accepting 'technical debt,' this is accepting 'technical bankruptcy.' In fact, to quote a well-known movie: "You keep using that word. I do not think it means what you think it means." I'd recommend explaining to them what technical debt is truly about (Ward Cunningham has a great explanation here. He coined the phrase, so his word should lend support to your recommendation. Hint: it doesn't mean "bad code, because we don't have the skills to write it better."

Well, this developer/business owner obviously has put himself in a severely limiting position based on most likely some bad choices. Let me outline a couple of the ones that I've seen before that sound like they might align with this situation.

1) Waiting until the last minute to make significant technology changes.
From the urgency in your post, I'm assuming that the switch to the .net platform needs to be done 'ASAP (yesterday, ideally).' So, a developer with '20+ years of experience' decides that it is best to wait until he is forced to move to a modern development environment with his application. The current platform is no longer shipped. Was this a sudden occurrence?
Solution: If your company depends on this product, make sure you keep your eyes on the future of it.

2) Assuming that you (and your team) can just 'pick up' a new technology.
Learning a new technology, especially a new programming paradigm, takes time and practice. I have met very few people who can jump to a new technology and be successful writing business critical applications.
Solution: You need to give yourself and your team enough time to achieve a reasonable level of proficiency in the target platform. This is done by looking forward to where the industry is going, figuring out a plan for where you need to go. Once the plan is in place, begin training your team. The time to bring a coach in is not when you are under the gun and the ship is sinking, but, rather, when you have time to train correctly. Sadly, in our industry, the former is far too common, and the latter is too rare.

3) Expecting that a few hours of coaching 'here and there' will be enough to bring the team forward.
Introducing new concepts to a team in the midst of a rushed product often leads to a less maintainable system than if the team continued with their original approach. SOLID concepts and their applications are often confusing to people when they are first introduced to them. This confusion often leads to misapplication of the techniques.
Solution: Get through the death march with the understanding that code written will need to be re-written. And, please, do not call this 'technical debt.' Call this throwaway code to counter bad decisions. Again, point them to Ward's video to explain what 'technical debt' really means.

But, those are just pointing out the bad mistakes. That's just one aspect of really helping. Since this is a friend, we want to help moving forward.

Since they only have a few hours of coaching, I'd highly recommend putting together a set of focused practices that will allow the team to more rapidly build their skills in the necessary techniques. Some of us in the Software Craftsmanship movement are starting to organize regular Code Retreats that focus on practice. These might be beneficial for your client. Other people are doing similar things.

Another idea: Rather than only talk to (or briefly code with) them about concepts, take the few hours that you have and prepare a set of exercises that they can use to hone their skills. I'm working on a set in Ruby, but you could probably port them to C# with a small amount of little effort.

The important thing is to give them structured forms of focused practice that will allow them to practice, outside of project work, the techniques that make up these concepts.

But, in all honesty, I truly believe they are setting themselves up for failure, and the best thing you can do is help them as much as possible with the realization that, when and if it fails, it will be not because of agile, not because of craftsmanship, but because of poor choices and lack of planning.

Friday, February 27, 2009

Talk with Dave Hoover

Dave Hoover is an owner of Obtiva. Obtiva is a great craftsman workshop in the Chicago area that focuses on delivering true value for the customers, building software and relationships that are intended to last long-term.

Dave is also a co-author of Apprenticeship Patterns, a (currently) online book containing advice on being an apprentice in the software industry. He's not only an author about apprenticeships, as Obtiva also has an apprenticeship program for their entry-level developers.

I was very excited to get in to Obtiva for several reasons: I only had the opportunity to spend an afternoon there in December (interview with Dave from then); Obtiva is taking part in a Journeyman Exchange program with 8th Light starting April 6; Obtiva is an example of a successful software development shop that emphasis the techniques and practices that I espouse.

In this conversation, we talk about the Journeyman Exchange program, as well as the value and feasability of holding true to your techniques and practices in the 'real world' and still deliver true business value.


Talk with Dave Hoover (February 2009) from Corey Haines on Vimeo.

Sunday, February 22, 2009

Sponsor - Anthony Eden

Anthony Eden was entirely the reason that I was able to make it down to Florida on tour. A short time before Acts As Conference, he contacted me about coming down and doing some "How I Got Started In Programming" interviews. After talking to him briefly, I mentioned that I would be interested in turning it into a 2-week tour, as well. He did a fantastic job of finding a few people who were willing to cover my travel expenses, as well as some incidentals while I was down there. Not only did he find sponsors, contribute to the expenses, but he also hosted me for 2 days, where I got to pair with Matt Williams for an afternoon, as well as a full day with Anthony. I captured some of his thoughts in a journeyman tour video, which I posted a little while ago.

I want to say how much I appreciate people like Anthony. Without community support from people like him, the ideas behind journeyman tours, as well as Software Craftsmanship in general, would have a much more difficult getting out there. So, thanks, Anthony!

Talk With Stephen Caudill

While down at Hashrocket, I had the extreme pleasure to pair for a couple days with Stephen Caudill. During that time, we wrote some great code, had some great conversations about craftsmanship (drink! watch the video, and you'll understand), as well as getting me a lot more comfortable in vim.

At the end of my stay there, Stephen sat down with me and had a great conversation. And, yes, that's the sound of a ping-pong game in the background.

Enjoy!


Talk with Stephen Caudill from Corey Haines on Vimeo.

Tuesday, February 17, 2009

Talk with Anthony Eden

Anthony Eden (blog) has played a very important part in my Florida tour. Not only was he the third stop, but he also was both the primary organizer of the tour and a major sponsor. He contacted me a couple weeks ago to come down to Acts As Conference to record people for the "How I Got Started In Programming" interviews. After talking a bit with him, it became clear that it would be possible to not just come down for the conference, but also spend two weeks pairing with people down here. I spent 2 days with Anthony, pairing with both him and Matt Williams.

Anthony works for a small company that is developing the chi.mp website. This is a very interesting take on aggregating your digital life and brand into a single place. The company is a domain registrar for the .mp domain, which means that you, when you sign up, you are given your own domain (mine is coreyhaines.mp) that you use as a main window to the rest of your digital life (facebook, twitter, rss feeds, etc). The really cool thing about chi.mp is that, unlike some of the other aggregators, this is intended to combine everything about you, not about the people in your community.

I'll be posting another entry regarding his sponsorship and coordination efforts, but I want to take a moment to really express my gratitude to Anthony. He got in touch with the conference, as well as a couple other people who put their resources together to bring me down here. So, thanks a lot, Anthony, it is through the belief and support of people like you that this idea is really able to survive.

Anthony has seen a lot of startups come and go, and he has fantastic insight into some of the reasons why they fail. He definitely cares about writing a great system, and we talked about the ideals present there both on and off video. This video contains some very great thoughts on the subjects.

Enjoy!


Talk with Anthony Eden from Corey Haines on Vimeo.

Friday, February 13, 2009

Talk with Greg Pederson

My second host on the Florida tour was Greg Pederson. He is an independent software developer (NSight Development) in Orlando, doing Ruby on Rails. He has an interesting story, because he spent about 10 years doing support for cell networks before moving over into software development a few years ago. I had a great time working with him, and we had a great conversation about what it is like to move from one area of the technology world to another: what is common and what is different.

Greg had contacted me about a month ago to possibly come down to Florida and work with everyone down there, but I didn't have a good way down, yet. Once the avenues opened up, I made sure to contact him again. I'm glad I did, as we had a really fun time doing some refactoring. As people who know me have heard, I consider refactoring the reward for actually writing production code. :) I only spent one day with Greg, but I know that I got a bunch out of working and talking to him; I like to think he did, too. :)

Enjoy!


Talk with Greg Pederson from Corey Haines on Vimeo.

Thursday, February 12, 2009

Conversation with Mike Blake

My Florida tour started with a couple days at Acts As Conference, where I was able to get a few great "How I Got Started In Programming" interviews. After that, though, the pair-programming tour started with Mike Blake, owner of AppTrain Software. He was kind enough to host me for two days, and we spent the time exploring RSpec, talking about the joy of coding, and working on a site that he had revived for our time together. We spent the first day retro-fitting some specs onto the codebase, while the second day was introducing him to resource_controller and reworking the application.

Along with hosting me, Mike was super supportive by contributing significantly to cover expenses while down here in sunny Florida. Mike's "How I Got Started In Programming" interview will be before too long, but we also sat down for a great talk about software development, looking at development as fun, and the relationship between music and coding.

Mike is also an active member of the local arts community in the Orlando area, working with and supporting the music and art scene.

I really enjoyed the time I got to spend with Mike, and I continue to be flattered by the support I get from local community members along my tour.

Enjoy our talk!


Talk with Mike Blake from Corey Haines on Vimeo.