Saturday, November 14, 2009

Meetup in Chicago with Venkat Subramaniam

Meetup In Chicago on 11/14/2009, 7pm at Penny's Noodle House

Come hang out with Venkat Subramaniam, me and anyone else that comes. Fun stuff!

We'll be meeting at Penny's Noodle House in Wicker Park (1542 N. Damen) between 6.30 and 7pm. We'll have great conversation over dinner, then, depending on the mood, head out to greener pastures for a night of geeking out.

Note: It is BYOB, so make sure to bring what you'd like to drink. Don't worry, after dinner we can hit some local bars.

If you are coming, feel free to send me an @ reply on twitter (@coreyhaines) or an email ( But, if you don't, that's cool, come anyway.

Friday, November 6, 2009

New Katacast

I've posted another kata at This is driving the solution to marking a guess in the codebreaker game.

Sunday, November 1, 2009

Evan Light's Road Trip

Recently, Evan Light (blog)began what he calls his "software craftsmanship road trip." He is on the road for 2 weeks, stopping in Floyd, VA, and continuing on for a week in Chesapeake, VA.

His first stop in Floyd, VA, was Entry Way Software. I was very happy to see that he was stopping there, as I spent the first week of May there. My experience was wonderful, and I had the opportunity to film two great interviews, one with Jonathan Greenberg and the other with Gustin Prudner.

Evan has written a great blog post called 'Why you too should undertake a software craftsmanship road trip'. Evan's thoughts and ideas mirror a lot of what I experienced during my my last year on the road. I especially can relate to his comments about the introspection that comes upon you while on the road. I remember driving up from Champaign, IL, back to Chicago, IL, after spending a couple days with Brian Marick. I was a about 10 days, or so, into my first trip in December, 2008 (a whole world away). My head was so full of thoughts after the intense discussions with people; I just had to stop and record my very first road thoughts, "Tools vs Techniques."

Coming up this week, Evan is spending time in Chesapeake with Brennan Dunn and the 757.rb guys.

Evan is also taking a video camera and doing both interviews and road thoughts along the way. He says he will be posting them soon, so keep an eye out for them!

Thursday, October 15, 2009


I'm going to be writing a bit more about what the Katacasts series is, but the short story is that a few of us are going to be screencasting katas on a regular basis. To this end, we set up a blog and are looking to set up a regular podcast (itunes-ish) to provide a centralized place to access the videos.

I posted my first video, and I hope you enjoy it.

Number to LCD Kata

Saturday, October 3, 2009

Just some thoughts on the term 'Pragmatic'

Earlier this week, I started training for the RubyConf 5k. Based on the general suggestions, I'm doing the Couch25k training program, and I found the podrunner podcast that will help with the interval training. So, after the first run, I was feeling pretty good. I mean, the last couple intervals had me breathing pretty heavily, heart pumping, but I thought I handled it all pretty well. So, I was talking to Sarah and said, "Wow! I feel great. I know the program says to take a day off, but I think I might run tomorrow, as well." After all, I've been walking and using my legs for quite a while now; I know and understand the way my body works when moving. She just looked at me and asked if the program said I should take a day off. "Yeah, it does." As expected, she advised me to listen to the instructions; the people who developed the program have a lot more experience than I do with these things. I thought for a second, smiled, and said, "But, I'm pragmatic with my running. Don't hassle me with your 'program dogma.'" Well, we had a great laugh about it. I felt fine the next day, wondered if I should have run, and then, the second day after the run, oh the ache started. My legs definitely were burning, and I was glad that I hadn't over-worked them by running the next day. I guess it is true that it is often the second day after a workout when you feel the effects.

This is a common thing that I hear from software developers: they have a little bit of experience, think that they understand something to the point where they can make their own decisions on what it means to 'be pragmatic.' Often times, people use the term 'pragmatic' as a way to hide a lack of skill and experience. Or, sometimes, it is used in ignorance: someone doesn't realize that they don't understand something well enough. Usually, though, it is brought to play when someone is justifying cutting corners on something. Just like the second day pain I felt with running, this can come back later to bite you in the ass. Think your 9 months of trying TDD makes you an expert, someone who can suddenly decide when it is 'pragmatic' to not design your system with TDD. Or, don't even worry about designing your system with TDD, just talk about automated testing. Are you being 'pragmatic' about automated testing, skipping it things you don't know how to do or are hard? I wrote a blog post about being pragmatic with Uncle Bob around TDD-ing javascript.

It is pretty common knowledge that I'm not a big fan these days of those terms, 'pragmatic' and 'dogmatic.' (I even included a bit of my dislike in a talk I gave to the Chicago Software Craftsmanship group). Do they have value as terms? Yeah, they used to. Nowadays, though, they seem to be used more often as justification for decisions that are based on lack of skill or a desire to cut corners. Next time you are tempted to make a decision based on being 'pragmatic,' take a moment to pause, try not to use that term. Instead, ask yourself why you are making that decision to cut a corner. And be honest with yourself. It isn't shameful to explain that you are not doing something because you don't know how. After all, admitting you don't know how to do something is the first step to learning how to do it, no?

Tuesday, September 29, 2009

Upcoming Code Retreats

This year has seen a huge surge in practice-oriented events, and code retreats are definitely in the fore-front of these. We've seen them happen in several cities in the US, plus even retreats in Iceland and Romania. Most recently, I hosted one in Chicago, where we had some great people practicing the craft together.

I'm working on organizing a couple more (one more in Chicago, one in Durham, NC, plus one in Cleveland), but there are two coming up that I wanted to let people know about.

Chirag Dadia and Sebastian Hermida are hosting a code retreat on November 1st in Philadelphia, PA. If you are in the area, you definitely want to come. They will be doing it in traditional style, in Java, but don't think you can't get something out of it if you aren't a Java developer; the practice you gain comes in handy whatever language you are using. I will definitely be attending this code retreat.

Looking more into the future, Jeremy Anderson is organizing a code retreat on January 23rd, 2010(!), in Grand Rapids, MI. It is a few months away, but put it on your calendar. This is sponsored by Atomic Object. This code retreat is going to be done in Ruby, so sharpen up yours skills. Stepping outside the standard Java box makes it a bit more difficult for just anyone to show up (you need to have a basic skill-set with Ruby), but, if the Chicago Ruby Code Retreat was any indication (and it was), you are going to have a great time. I'm going to do my best to make my schedule work to get to this one.

Monday, September 21, 2009

Practice Features for Conway's Game of Life

At the Chicago Code Retreat last Saturday, I asked whether it would be helpful for people to have a set of Cucumber features for Conway's Game of Life. There seemed to be a general consensus that this would be a handy thing to have, so I've built them and put them up on github.

I created features for the basic rules of cell evolution, and I am adding features for some common multi-cell patterns.

I haven't added an step definitions, yet, although I expect to create a few that can be used to drive your development. Thanks to Aslak and the cucumber team's tireless efforts to get cucumber working for different languages than Ruby, you should be able to use these features to drive development in your favorite language.

Cucumber Features for Conway's Game of Life

I've put instructions in the readme for how to contribute your own features.

Sunday, September 20, 2009

Code Retreat Chicago - Wrap-up

Other thoughts:
John Yerhot has posted thoughts on his experience.
Jim Breen has posted thoughts on his experience.

My thoughts:

Yesterday was the first Code Retreat Chicago (initial announcement and description), sponsored by Thoughtworks, and it was absolutely fantastic. If you were in Chicago, and you didn't show up, you missed out on a fun day of coding and practice; I got there at 7.45am, and I think I finally left at 10.45pm.

About 16 people showed up, which was great, since that allowed us to have a pair for everyone. We did 6 45-minute sessions, with a final 7th session that ran for about 1.5 hours at the behest of all the participants. Between the sessions, we had around a 15 minute break for discussing what we did during the past session, swapping pairs, deleting code and running to the bathroom. :) And, of course, a little bit of looking out the window at the view.

The people who come to Code Retreat never cease to amaze me with their excitement and zest for coding and practicing new things. After all, if you are willing to get up and make it by 8.30am, you're already showing your hand a bit. After the final session, most people stayed for several more hours to talk and socialize. It helped that Thoughtworks provided some beer, too, for the after-retreat festivities.

As usual when working on Conway's Game of Life, the first couple sessions saw people really focused on building the data structure, normally a two-dimensional array. Over the course of the morning, after discussing ideas between sessions, more and more people experimented with new approaches, started at different areas of the problem and fooled around with completely odd ideas (one pair spent their session pretending they were in the 1970s, when running the application was expensive, so they really focused on analyzing the algorithm intensely). I also shared some ideas from previous code retreats on things to try.

For lunch, we had food catered from Haifa Cafe. I've never been to a code retreat where there was pizza, and, if I'm involved, there won't be. If you are crazy enough to get up early on a Saturday to come spend the day coding with strangers, then you deserve to have a good meal for lunch. In fact, we ended up with a ridiculous amount of food left, so a lot of people stayed and ate dinner. I told people to bring some containers to take left-overs home, and there definitely was enough.

I took a bunch of pictures, so, if you are interested in seeing what it looks like when a bunch of geeks get together to code, look no further.

If you were in Chicago, you really missed out. But, don't worry, I'm going to be organizing another one this winter. If you live in another city, keep watch for a code retreat coming to your area. If you would like to organize or host a code retreat in your town, feel free to contact me. If you are in the Philadelphia area, mark your calendars for November 1st.

Thanks again to Thoughtworks for sponsoring this Code Retreat. Also, thanks to Michael Norton and Patrick Sarnacke for helping out from the TW side.

Thursday, September 10, 2009

Speaking at Concept Camp

Sara Chipps wanted to spend the weekend talking geeky things while spending time outdoors camping. So, as any community-oriented person would do, she started a conference: Concept Camp. It is coming on September 25-27, 2009.

Concept Camp is a weekend camping trip, focused on a Saturday of hard-core discussion/presentations surrounding a theme. The structure sounds really cool: get some devs together from various walks of life, put them at a campground, organize a couple talks around a theme, make sure there is social stuff (read: music and drinks) and let the hilarity ensue. The conference is $40 to cover camp site and food.

This year, the theme is 'Design Patterns.' Sara was kind enough to invite me to deliver the morning keynote to get everyone ready for the day. The tentative title for my talk is 'Design Patterns are problems, not solutions.' You'll have to come to Concept Camp to see what that is all about. I'm very honored to be asked, and I am very excited to see what I have to say, but I'm sure that there will be a few mentions of software craftsmanship. :)

You know you want to come! If you want more information, contact Sara or me.

Thursday, September 3, 2009

Code Retreat Chicago

Are you in Chicago on Saturday, September 19th?

Want to have a fantastic time practicing your development skills in a stress-free, deadline-nowhere-to-be-seen environment?

Want a free lunch coupled with coding all day with awesome people?

Then, keep reading!

I'm pleased to invite you to come to the very first Chicago Ruby Code Retreat!

What's a code retreat? Here's a short summary:

A code retreat is a day of practice. It was initially conceived by Patrick Welsh and Nayan Hajratwala. The idea was to establish a stress-free environment for people to get together and practice the craft of development. Patrick wrote an overview of the idea back in January, 2009, which covers some of the original goals. Over the past year, after several successful code retreats, the format and benefits are pretty well established.

(note: I'm working on a longer blog post that will contain a better description, as well as links to blog posts by attendees at past retreats)

Note: I'm going to try to limit this to about 40 people for cost and coordination reasons, so please make sure to sign up on the coderetreat site and rsvp. I'll need to have a good head count next week to start making catering arrangements.

8.30am to 5pm
6 45-minute sessions
Coding is done in pairs
Each session, we work on Conway's Game of Life
At end of each session, we delete the code we wrote
At end of each session, we reflect a bit on what we did/practiced
At the end of the day, we go out for dinner and drinks, so we can discuss the day

The goal of the retreat is to provide sessions where people can practice doing things they wouldn't ordinarily do when working on something they need to get finished. Since the Game of Life is not a task that can be reasonable finished in an hour, the tension to finish goes away, and we can focus on different design / development techniques. Ever wanted to try to implement an algorithm with no 'if' statements? Go for it! Want to try the 'TDD as if you meant it' style? Knock yourself out! The world is open, and, since you are pairing, it makes for a fun time trying new things.

Ordinarily, we do the code retreats in Java, as the skills needed to code in it for this task are pretty common. However, this being Chicago, home of a very thriving Ruby community, we are going to try this one in Ruby. I've been to several retreats, and I'll be curious to see the differences with this new language.

Note: This code retreat will be done in Ruby. We won't be spending time getting Ruby set up on machines, nor learning Ruby. There is an assumption that you are at least familiar enough with the basics of Ruby that you can write classes, methods, etc.
If you are coming, please make sure that you have Ruby installed and working, as well as an editor of your choice. Any gems that you normally use (rspec, shoulda, cucumber, rails, etc.) should be already installed. Code Retreat is not intended to be a language learning day, rather a practicing/honing of what you know.

Wednesday, September 2, 2009

A Software Development School Idea

People who have talked to me (including late-night, heated discussions at Agile2009) know that I'm not a huge fan of the current training system, neither the computer science degree nor the way that new developers are brought into our industry. If you've been following me or spoken with me, then you've most likely heard how I prefer the mentor/apprenticeship model of training. I've had a lot of conversations with people along the way about apprenticeships, including some recorded ones. Ken Auer greatly impressed me with his sincerity and passion about the idea, and Jon Kern (video coming soon) also brought come concrete ideas to the forefront for me. These and others have convinced me that there could be a viable model for a hands-on, apprenticeship-style school for learning software development.

The basic structure would be a workshop doing custom software development for small businesses. The primary emphasis would be on the training of apprentices, much like a dental school. You know how you can go to a dental school and get your teeth cleaned for a less money than you would pay if you went to an experienced, graduated dentist. You are still going to get your teeth cleaned, although it might be a bit slower, perhaps a slightly lower quality (not always, though), but, in the end, you are going to have clean teeth.

I'd like to digress for a second to address the 'slightly lower quality' comment. I like JB Rainsberger's definition of quality: the marginal cost of adding features. This isn't about bugs or lack of functionality, this is more akin to the difference in quality between a Sam Adams Lager and a La Fin Du Monde; they are both good beers, but the La Fin Du Monde is a higher quality (in my opinion). Bugs are more like buying a beer and finding a mouse in it; unless you are Bob and Doug McKenzie, this is not a recipe for hilarity and success.

While the emphasis will be on hands-on development of real projects, there will also be a goal of making sure the apprentices learn the history of our industry, the names and contributions of those who have come before us. After all, it is hard to stand on the shoulders of giants, when you don't know who they are.

The main goal of the school would be have 2-year apprenticeship programs, where people can come and learn under the tutelage of experienced software developers while building real products for real clients. After they leave, companies that would hire them will know a certain something about their skills and experience. I emphasize that they will not leave as experts, more as developers with a solid understanding of certain development techniques.

There is more to the idea, and it is constantly evolving, as I meet and discuss this with more people, getting different perspectives and opinions. But, I wanted to put this up to share with everyone the thoughts, as well as perhaps get a bit of larger-scale discussion started.

I will be writing more about this as time goes on, but I wanted to get the ideas out there.


Wow. Thanks. It has been a very overwhelmingly emotional past couple of days.

While I've been on the road, I've heard from a lot of people, both in email and in person, about how they have really enjoyed following my travels. Many have told me that the video interviews and thoughts that I've had to opportunity to share have been inspirational. I know of a couple people who actually have taken some time off work to go pair with people in their area to try out the idea of journeyman-style learning and sharing. Many of these people have asked how they could help me out. Always, I would mention something about a "blog post that I've been putting off writing."

Well, I finally put the post up, and I have been overwhelmed by the positive feedback from the community. In 2 days, I was able to not only reach my goal, but surpass it by 22%, for a total today of $3660. As I stated in my previous post, half of everything above $3000 will go towards organizing code retreats in places that I visit (like this one coming up in Chicago). I will try to find company sponsorship of these events, but, in lieu of that, I'll have money to help fund food and other miscellaneous expenses that might come up while organizing them. I have some definite plans in place to create a stable form of support, while still being able to contribute to the community in this way.

So, I wanted to say thanks to everyone for the ongoing support, both emotionally and financially. I have some definite plans in place to create a stable form of support, while still being able to contribute to the community through sharing the ideas of the people that I have the opportunity to meet, and this money will help get me there. I also have a renewed fire in my belly for the future, as well as the beginnings of a crystallized goal: the eventual (perhaps around 5 years from now) founding of a software development school.

Thank you to everyone, this has been a tremendous couple of days, and it means more to me than I can really express in words (although that has never stopped me from trying).

Monday, August 31, 2009

Hat in Hand

Update: thanks to everyone who has and who continue to help.

Back in December, when I first left for a 3-week trip, pair-programming in exchange for room and board, I didn't expect to find myself in Chicago, 9 months later, looking to plan the next year of this. Since I started, I've been to a lot of places, paired with great people, shared some truly outstanding and insightful video interviews and both actively trained others and have been trained, myself. I've spoken at user groups and conferences and helped host code retreats. I've driven through almost every state that touches the Atlantic Ocean (Rhode Island, why do you taunt me?) and even made it up to Canada. This has been an incredible opportunity and a fantastic journey of growth for me. Over the past few months, ideas for the future have started to crystallize, including a long-term goal of starting a software development school. I'll be posting some entries over the next couple weeks about upcoming plans and ideas that I have.

Now, though, the time comes to own up a bit to reality.

One of the most frequent questions I get asked by people is "how do you support yourself?" Some people thought the startup I was at last year cashed in well (it didn't) or that I do billable work along the way (I don't) or that a load of sponsors send me money (they don't). No, this has been almost entirely a self-funded journey of discovery and sharing. Over the year, I've gone through steps to significantly decrease my recurring expenses (cut data plan on phone, etc), as well as did a short training (thanks, JB Rainsberger) and a short programming gig (thanks, Leandog). This has allowed my savings to last longer than I had expected. That being said, I've come to the point where I am down to the last reserves of money. I finally need to ask for some help from the community to make it over this hump, while I put plans in place to establish a more stable support base.

So, I'm starting a pledgie campaign and asking for help. How much do I need? Well, I'll be honest; I need about $3000 to stabilize a bit. I have some plans over the next few months (funding for visible metrics project, doing a short gig here and there) to make it through winter, then I plan on talking to some companies/organizations about further sponsorship. For now, though, I need to turn to all of you for help.

I'd like to ask you to support me with cold, hard, paypal-delivered cash. Have you enjoyed the videos? Have you met me or seen me speak and got something out of the conversation? Did you follow my latest 3-month, 6700-mile road trip along the east coast? If so, could you spare a bit? $20? $50? Please click the pledgie button below to contribute. Think about this: if 100 people contributed an average of $30, it would reach my goal of $3000.

Click here to lend your support to: Corey Haines Pair-Programming Tours and make a donation at !

The list of contributors will appear on the pledgie campaign site, and I will be linking to the list from both this blog and my homepage. If you would like to remain anonymous, make sure that you check the checkbox below the donate button on the campaign page. If you would like to donate money directly through paypal to me, rather than using pledgie, you can do that here and send to (that's llc, as in limited liability corporation).

While technically I am looking for a handout, I'm not trying to get a tremendous amount out of this, just enough to keep going for a bit longer. To that end, I will make the following pledge:
During the month of September, 2009, half of all money raised above $3000 will go towards organizing code retreats in places that I visit. Take that and combine it with company sponsorships of local code retreats, and it could mean a lot of events.

Are you someone that would like to contribute even more? Perhaps you are a company that is doing better than average in this difficult economy and want to help spread the ideas and ideals that I try to represent? Please contact me, and we can work out some sort of agreement for larger sponsorships. I can provide invoices from my LLC, as well.

Interested in also spreading the word about supporting me? Please link to this post from your blog, tweet about it, put the pledgie button on your site, etc.

And thanks for all your support. I'd especially like to thank those who have sponsored me already financially, especially the ones who did last winter.

Friday, August 14, 2009

Listen to me on Deep Fried Bytes

Back in May, when I was on the first night of the first week of the big 3-month summer tour, I sat on the porch of Gustin Prudner's house in Floyd, VA, and had a great skype conversation with Keith Elder and Chris Woodruff for their podcast, DeepFriedBytes.

Keith and I met at the 2008 Lansing Day of DotNet, where I gave an introductory talk on Rails, filling in for another speaker who had an emergency come up. I met Keith in the speakers' lounge, and, somehow or another, we immediately dove into a conversation on why comments are bad. He wasn't buying into my sweeping generalization that all comments are bad, but we (and other people) continued the conversation for another year, until we finally found the time to record a conversation for their podcast, DeepFriedBytes.

The conversation was very enjoyable, talking about commenting, software craftsmanship, pair-programming and other topics. Enjoy!

Wednesday, August 5, 2009

Come party with me

Are you going to be in the Cleveland, OH, area on August 11th? Leandog is hosting a party on the boat and you are invited. If you haven't been to the Leandog boat, you don't know what you are missing.

Here's the information:
Leandog software
1151 North Marginal
Cleveland, OH

Start: 7pm-ish
What to bring: feel free to bring some beer or drinks to share (or not).

Chad Fowler was kind enough to send a few copies of his book, 'The Passionate Programmer,' which we'll be giving away. This is a great book full of wonderful essays on not settling for the status quo in your life: be great!

I'll also be giving away some other books from my collection, too.
Update: here's the books I'm giving away:

Sunday, August 2, 2009

Testing Techniques with JB Rainsberger

While up at Prince Edward Island with JB Rainsberger, I had the opportunity to sit down and record some conversations about test-driven development. Here is a short (about 11 minutes) excerpt regarding the idea of moving specificity towards the tests and also evolutionary design.


Moving Specificity Towards the Tests with JB Rainsberger

While up at Prince Edward Island with JB Rainsberger, I had the opportunity to sit down and record some conversations about test-driven development. Here is a short (about 11 minutes) excerpt regarding the idea of moving specificity towards the tests and also evolutionary design.


Wednesday, July 29, 2009

Test-first and Test-driven conversation with JB Rainsberger

I had the incredible opportunity to spend a week up on Prince Edward Island with JB and Sarah Rainsberger. They are wonderful hosts, and it was a very welcome break after 2 months of pretty continuous time on the road.

JB has been around the XP community for a very long time, and he is one of the most experienced Test-Driven Development practitioners that I know. He is the author of the 2004 book, JUnit Recipes, which I found to be incredibly useful even while doing C#. He spends the majority of his time now traveling the world and doing agile coaching/training at companies.

JB's thoughts around programming have had a huge influence on me over the years, but the conversations that we've had about life, in general, have changed my thoughts and direction. I remember several times sitting with him and dreaming about traveling around, programming with people in exchange for room and board.

While up on PEI, JB and I had many conversations, and I asked if he'd be interested in recording some of them. One of the first was a conversation we had stimulated by Brian Marick's talk on "Artisinal Retro-Futurism crossed with Team-Scale Anarcho-Syndicalism." We had a conversation about the fact that the 'TDD is about testing vs TDD is about design" debate that keeps popping up, especially now in the Ruby community. As usual, he's a lot more diplomatic than I am; I guess that is what comes from having years more experience coaching than I do. :) Enjoy!

If you'd like to contact J.B., you can through his website.

Part 1

Part 2

Tuesday, July 21, 2009

Meetup in Philadelphia with Jon Kern!

Are you in the philadelphia area on July 31st? Would you like to hang out with me and Jon Kern? Well, here's your chance.

Jon is hosting a party at his place, and it is going to be a blast. We'll be talking Agile, drinking some beer, eating some food and just generally solving all of software development's problems. Come one, come all!


Wednesday, July 8, 2009

Conversation with Muness Alrubaie

I stayed with Muness Alrubaie for the 3 days I was at Relevance Software. From the first night we talked, through until the very last morning, I was fascinated by his thoughts on team dynamics, leadership and guidance. I made sure that I scheduled a bit of time to talk with him about his ideas, as I think people could definitely benefit a lot from what he has to say. He has a great amount of respect for Jerry Weinberg, so I'm eager to meet Jerry at BizConf this August.


Monday, July 6, 2009

The Wandering Book

Enrique Comba had a great idea not so long ago of buying a small notebook and sending around to the people interested in the Software Craftsmanship movement, capturing their thoughts at the beginning of the movement. He called it The Wandering Book: Zeitgeist of the Software Craftsmanship movement.
The way it works is that you receive the book in the mail, you fill in a page with your thoughts on software craftsmanship, upload a picture of the page to the website, then you receive the address of the next person in line. Now, just go mail it. I was the first person to receive it, and I've held it for about 3 weeks. Today, though, I finally mailed it off to Jason Gorman.
The uploaded pictures of the filled-in pages can be viewed on the 'view the book' page (mine can be seen there, as well). It is a great idea, and I can't wait to see what other people write.

Saturday, July 4, 2009

Updated Calendar and Map

If you are interested in where I've been this trip, where I'm at and where I'm going, you can always track me at my calendar/map page.

Friday, July 3, 2009

Conversation with Stuart Halloway

While in Durham, NC, I had the extreme pleasure to spend 3 days at Relevance Software. I got to pair with some great people, including a day of Clojure coding with Stuart Halloway, author of Programming Clojure and co-owner of Relevance.

We spoke about Relevance's model as a lifestyle company, working with Clojure, and, of course, random other things.


Part I

Part II

Friday, June 26, 2009

Road Thoughts - Visible Metrics

I've been thinking about the use of metrics a lot lately, as well as a project that I think could be useful when grouped with some other ideas for community self-regulation. We've had discussion on the software craftsmanship google group about it, so I thought I would stop by the side of the road and do a video about my thoughts on it. Plus, bonus dogs!

I'm using my new camera to record this instead of the flip, as I think I will have better luck with the sound. It seems like it works pretty well.

I think this is the longest road thoughts that I've done, so I apologize for the 18-minute length. I was going to edit stuff out, but, well, that's a lot of work. I think I just talked more slowly.

If you have comments, feel free to post them here, but it might be more effective to reply on the software craftsmanship list to this thread, so everyone can take part.

Update: Matt Heusser has an overview/response to the ideas. It is encouraging to see he gets the gist of what I'm talking about. :)


Tuesday, June 23, 2009

Conversation with Ken Auer

Ken Auer is the founder of Role Model Software. Ken's work through the past decade with apprenticeships and his thoughts on software development have been a big inspiration to people I know in the Software Craftsmanship movement. I was fortunate enough to get an introduction after meeting Nathaniel Talbott, and I stayed with Ken for two days in his beautiful, newly-built house/workshop. I had a great time there, enjoying not only some great conversations and code, but also an inspiring time with his family.

Ken was kind enough to not only sit down with me to talk about his thoughts on development, but he also allowed me to video a "How I Got Started In Programming" video with him. That video isn't up yet, as there are a few people in the queue ahead of him, but it is fantastic.


Part I

Friday, June 12, 2009

Conversation with Ivan Acosta-Rubio and Bellatrix Martinez

Ivan and Bellatrix, owners of BakedWeb, hosted me in Miami for a week, and we had a great time writing some fun code: lots of cucumber and rspec! They were a lot of fun, and I got some great insights into the dynamics of a small business from them. We sat down and talked about their thoughts on breaking off onto your own.

Plus, he really got me thinking about going to Venezuela. :)


Wednesday, June 3, 2009

Conversation with Steven Bristol

Steven Bristol (blog) is a co-owner of Less Everything. They pride themselves on writing applications that undercut their competition, focusing on writing good and useful features, not bloating up with more features. Definitely a 'build half, not half-assed' attitude. I had the opportunity to spend some time with him, and he was kind enough to sit down and talk about their philosophy on software development.

I'm using their product, Less Accounting, to keep track of my expenses/mileage/business stuff for the tour, and I'm loving it; it has just enough stuff for me to manage the essential information.


Conversation with Steven Bristol from Corey Haines on Vimeo.

Sunday, May 31, 2009

Road Thoughts - History

While driving last Friday from Miami to Orlando, I stopped and recorded a road thoughts video. I was planning to talk about something else, but the location inspired me to talk about history.

Here is the link to Michael Feathers' 10 Papers Every Programmer Should Read (At Least Twice).

I'll also be collecting links to people to read about, as well as important topics after the embedded video. If you have other people that are worth reading about, please leave links in the comments, and I'll promote them up to this post.

At the end of the 4th week of this tour, and with this week marking the 6 month mark since I first got on the road, I wanted to take a moment to thank everyone who has supported me through it, both hosting me and sponsoring me financially. Also, to all of you who have been following my videos, commenting, blogging about my tour, coming up and talking to me when I am out, I want to thank you, too. It has been a sincerely amazing time for me, and I look forward to what the future holds. My current plans have me returning to Cleveland around the 3rd of August; it is still a long ways to go.

Enjoy the road thoughts! As usual, I love to read comments, emails, read blog post with responses to some of what I talk about.

Road Thoughts - History from Corey Haines on Vimeo.

Here's some links to people to read about:

In the comments, Bil Kleb mentioned my plug for the Thomas Jefferson Hour podcast. I'm a big fan of Jefferson, and I love this podcast. You really should start listening to it. Unless you hate America, of course.

Saturday, May 30, 2009

Intro To Ruby slides from Day of Ruby

I was invited to give an Intro To Ruby talk at the Tampa and Orlando Day of Ruby events organized by Cory Foy. It was a lot of fun, and, of course, I love sharing the love of Ruby. Here's the slides:

Thursday, May 28, 2009

Journeyman Calendar Up!

Interested in finding out where and when I am and who I'm with?

I'm keeping a calendar and map updated with my schedule. You can always find the link off my homepage at, but here's a direct link:

Journeyman Tour Calendar

Wednesday, May 27, 2009

Open Agile Romania

Last week, I had the incredible opportunity to speak at the first Romanian Open Agile conference. Maria Diaconu invited me to come over and talk to their conference about Software Craftsmanship, including how it relates to Agile. I gave two talks: on the role of a tester through the agile lifecycle (slides); and, how Software Craftsmanship relates to the inherent problems with Scrum and XP (slides).

All-in-all, I had a great time, and I'm honored that Maria invited me to talk. The Romanian development community is lucky to have someone like her. I look forward to seeing where things lead. The conversations I had with the people there really sparked a lot of thoughts in my head, and I look forward to exploring them further with people.

Maria, with help from her husband, Alex, is putting a lot of effort into organizing the Romanian agile community, starting 3 different user groups in Bucharest, Brasov and Cluj. She also organized this conference and is starting to talk about the next event. We talked briefly about possible getting sponsorship enough to bring a couple people over to organize a Code Retreat over there, as well as other possible events to further solidify the community there.

I arrived on Tuesday, May 19th, after a rather uncomfortable Air France flight (somewhere between purchasing the ticket and getting on the plane, the 'vegetarian' request for my meal got lost). From the airport to Maria's house was possibly the most...ahem...interesting taxi ride I've ever had; while there are definite lane markers on the road, the drivers in Bucharest don't seem to actually know what they are for. Someone told me that this was because they didn't have lane markers for so long, they just ignored them when people finally put them down.

On Wednesday, I had the pleasure of speaking to the Bucharest agile user group, then going out for a beer, or two, with them. We had some great conversations with topics ranging from agile all the way to the American education system.

On Thursday night, we had a speaker dinner, where I met the fellow speakers: Ovidiu Negrean, Jurgen Appelo, Lucian Parvu, Razvan Gliga. Mihnea Giurgea and Mircea Pasoi couldn't show up, but I met them on Saturday. The speaker dinner was very nice, and I got the opportunity to argue with Jurgen about Scrum and its adoption patterns. I can say that this discussion was very enlightening, because it sounded exactly like the one I had with Cory Foy less than a week earlier. The idea is that Scrum makes an implicit assumption that developers are responsible enough to change their practices to fit into the iterative, incremental model. I really enjoyed talking to Jurgen, and I'm eager to catch up with him again at the Agile 2009 conference.

The conference was at a university and part of a larger open-source-oriented one called eLiberatica. I had definite flashbacks of being in school.

Friday went well, with just a few hiccups. Sadly, one of the hiccups was poor bandwidth during Ken Schwaber's video conference/presentation. At times, it was a bit difficult to hear what he was saying, but enough came through to get the main points of his talk. One main point that rang true with me, and also segued really nicely into my own talk, was that a major surprise to them was that developers didn't handle incremental delivery very well. This realization has led to the development of the Scrum Certified Developer program. Talking to Cory and a couple other people, this 'certification' sounds like the developer side of an XP training.

My talk on Friday was about the role of a tester on an agile team. I based it a lot on person experiences mapped through Lisa Crispin and Janet Gregory's Agile Testing book. Lisa was kind enough to send me 2 copies of the book to take to the conference, so we handed one out at the end of each day during the panel session.

On Friday night, we all went to a restaurant to continue our conversations from the day. Maria's friend, Paula, had come up from Brasov to the conference (she's a developer at Siemens), and, being a native Hungarian speaker, she was kind enough to let me spend some time speaking it again. I haven't spoken Hungarian that much for many years now, and it was great to switch over into it for a while.

My talk on Saturday was about 'How Agile Can Fail.' The main point of the talk is that Scrum alone leads to crappy code bases (Ken Schwaber's point was re-iterated), while XP has the practices but can kill productivity in the short- to medium-term while the developers learn to use them effectively. And, of course, in swoops Software Craftsmanship as a way to minimize the effect of learning on the organization through a focus on directed practice. I thought the talk went fairly well, although I could feel my energy level a bit low, having only slept around 4.5 hours the night before (no, it wasn't because of drinking).

I was leaving early Sunday morning, so I decided just to go to the airport at midnight and spend the night there. Ugh! That was a bad move. Bucharest has an incredibly uncomfortable airport. Plus, when I finally was able to checkin, they told me that they didn't have my ticket marked as vegetarian, and they couldn't change it. GRRR!!! I was tired, uncomfortable, hungry and a bit sad about leaving. I bought a small sandwich with the last of my money, and watched Jim Weirich's talk from Scotland on Rails, which cheered me up a bit. I was settling in for an unpleasant 14 hour, or so, trip back to Miami.

Whoa! The flight back was really nice. The flight from Bucharest to Paris was uneventful, but Paris to Miami was a dream. We were flying a 747, which meant that there was an upper deck. Somehow, I ended up there (no, not business class, or anything, just kind of overflow). The seats were more comfortable, the place was less crowded, the stewardesses were cute. I drank whiskey and watched movies (read: slept through movies) the whole way home. The meal was a very tasty spinach lasagna, and did I mention the free whiskey?

Two great things from the movie, Nick and Norah's Infinite Playlist:
- You guys are one arm short of a Def Lepard cover band
- The Beatles had it right. Most bands sing about sex, but the Beatles just sang 'I want to hold your hand.' In the end, we just want to someone we can spend the rest of our lives holding hands with.

Monday, May 18, 2009

Road Thoughts - Time to Learn

Kent Beck recently wrote a blog post entitled 'To Test or Not?' There has been some discussion on both the XP list and the Software Craftsmanship list. On the SC list, after some discussion, we made the point that it was really the 'no time to LEARN to test a certain thing' not 'no time to test.' The culture you reside in is important, your goals and values will dictate what you do and what you value. I stopped on my way from Tampa, FL, to Miami, FL, to record some thoughts about it.


And, yeah, the audio on this one is one of the lowest in the bunch. Sorry about that; I still stink at audio editing.

Road Thoughts - Time To Learn from Corey Haines on Vimeo.

Sunday, May 17, 2009

Map of route at end of week 2

Well, it is the end of Week 2 of 12 on this pair-programming tour. I've been to a lot of great places, and, while I'm going to be building a more permanent map to track where I'm at, here's a google map to show my route so far! You can zoom out, or click on the 'Larger Map' link to see more information. I'm going to be building two more pages to link off that include the running "where's corey?" map and the complete planned map for this trip.

My odometer has me currently at 1376.4 miles.

(note: if anyone knows how to embed a google map zoomed out to show the whole route, instead of just the final destination, please email me)

View Larger Map

Saturday, May 16, 2009

First 1000 Miles

As outlined in the skeleton post for my May through August road trip/programming tour, I've got a lot of miles over the next three months that I'll be putting on my car, around 6000, as well. In December, on the first tour, it took me 2 weeks to make it to 1000 miles.

Well, this time, it only took a week. This happened on Sunday, May 10th, on the way from Aiken, SC, to Jacksonville, FL.

I believe I have about 5 more of these over the next 10 weeks.

First 1000 Miles of 2009 Summer Tour from Corey Haines on Vimeo.

Wednesday, May 13, 2009

Conversation with Gustin Prudner

Gustin Prudner, owner of Entryway Software, was kind enough to sit down with me and talk about the philosophy of his company, life in a small town and his ideas on success. I had a great time in Floyd, VA, with Entryway, and I really appreciate his willingness to host me. Entryway is where Jonathan Greenberg works; if you haven't watched that conversation, I highly recommend it.


Conversation with Gustin Prudner from Corey Haines on Vimeo.

Tuesday, May 12, 2009

Road Thoughts - Frameworks (and Honesty)

While back in Cleveland for what seemed like an eternity, I had the opportunity to pair with some local companies, as well as have some great conversations with people. Some of those conversations spurred some thoughts in my head, so I'm slowly moving my notes into road thoughts videos.

Honesty about one's skills is an important part of craftsmanship, and I think that it is nowhere more obvious than in the decision to build frameworks. Here's some thoughts of mine.

Road Thoughts - Frameworks from Corey Haines on Vimeo.

Sunday, May 10, 2009

Conversation with Jonathan Greenberg

While at Entryway Software, I had the opportunity and pleasure to pair with Jonathan Greenberg for several days. We spent the majority of the team fixing some failing acceptance tests (using Cucumber) and specs (using RSpec), which set us up for the last day, when we were able to build a great set of Cucumber features for some new functionality that we started implementing in one of their applications.

Jonathan and I had some fascinating conversations, as he is an experienced gardener, and he has some great insights on commonalities between gardening and programming.

Floyd, VA, was amazing. I really enjoyed the atmosphere in the town, the people I got to meet (including the Entryway folks and other people in the area), the work I got to do, and the jamming (trying to keep up with the bluegrass players) and dancing (not caring about keeping up with the flat-footers) I got to do on Friday night!

Enjoy this conversation with Jonathan Greenberg; I had a great time talking to him.

Conversation with Jonathan Greenberg from Corey Haines on Vimeo.

Thursday, April 30, 2009

Back on the Road

After a seemingly endless stay in Cleveland, I'm setting out for the road again. This time, I'm taking the big leap, heading out for 3 months, leaving on May 3nd and traveling along the east coast until the beginning of August. I'll be posting again regarding tour plans for August and beyond (hint: Chicago, Arizona, Arkansas, perhaps Hawaii), but I wanted to fill everyone in on the plans for the upcoming three months.

Where to this time? After talking to some people, looking at availability, here is the list of places:

Wow, that's a lot of driving, a bit more than 6000 miles, according to google maps. I'll be continuing doing the video interviews with the people hosting me, stopping in places and doing road thoughts videos, as well as speaking at conferences and user groups along the way.

What the heck is my pairing tour? Well, the basic premise is that I spend between 1-5 days with people, usually around 2-3, pair-programming on whatever they want to work on. What do I get out of it? Room and Board! Yup, they provide me with a place to sleep and food while I'm with them. That's it, a very simple exchange.

Interested in following my schedule via google calendar? You can by watching the Journeyman Tour public calendar. Feel free to attach it to your own calendar, or just periodically take a look. I keep it updated with where I'm at and whom I am pairing with. If you notice me at a location without a person scheduled, and you are interested in hosting me, feel free to send me an email. If the day truly is free, I'll most likely take you up on your offer.

I want to thank all of the people who are hosting me on this trip, my longest one, yet. The opportunity to work with so many excellent people, both learning and sharing my experiences, is a true blessing from the community, and I appreciate it.

I'd like to point out a couple of really cool events going on during my travels:

  • (Tampa and Orlando) Day of Ruby: these are great one-day events focused on introductory Ruby and Ruby on Rails (RoR) topics. The sessions are intended to build, from the ground up, a basic understanding of Ruby and RoR, for people interested in this fun and productive language. Oh, did I mention they are free! You can find more information at

  • Bucharest OpenAgile Conference: This is the first agile conference in Romania, and I've had the extreme honor of being invited to speak. It looks like a good line-up of speakers, including Ken Schweber over video link. Me, I'll be flying in to give two talks at the conference: a talk on developer practices in an agile environment (read: so you are doing agile, eh? how did your development practices change?); and, a talk on the role of testers in an agile team, based on Lisa Crispin and Janet Gregory's fantastic book 'Agile Testing' and experiences of my own with testing in an agile environment.
  • Apprenticeship Patterns Seminar at Nexwerk office: I'll be video conferencing in to talk about apprenticeship and journeyman stuff.

Monday, March 30, 2009

Road Thoughts - Just Do It

One of the most common bits of feedback I get from people after hearing me talk is the idea of 'just do it.' It isn't a crazy, innovative idea of mine, just something that people often like to hear from an external source.

So, you want to start doing something? You would like to start pair-programming or TDD or use continuous integration or quit your job or start up a worm-farm business? Okay, come ask me how to get started. Here's the answer: 'just do it.'

On the way back from the Philly Emerging Tech conference (great conference, by the way!), I stopped at the Laurel Hill Cemetery and did a quick road thoughts where I talk briefly about this.


Road Thoughts - Just Do It from Corey Haines on Vimeo.

Road Thoughts - Hailstorm!

Well, I just got back from Philadelphia, where I spoke at the Philadelphia Emerging Technology conference, as well as being on a panel discussion hosted by the Agile Philly user group. I had a great time, and I'll write a bit more later. I recorded a road thoughts on the way home, but I also recorded this very special road thoughts direct from the road on the way back to Cleveland. Yikes!


Road Thoughts - Hailstorm Holy Crapality! from Corey Haines on Vimeo.

Thursday, March 19, 2009

Talk at Chicago Software Craftsmanship Group

While I was in Chicago, I was invited to talk at the Software Craftsmanship Group. I spoke for a while on thoughts I have surrounding the concepts of practice. This was a really fun time, and I appreciate 8th Light for hosting these meetings.


Practice - Corey Haines from 8th Light on Vimeo.

Time to Green Graphs with Gary Bernhardt

At Code Retreat 2, Gary Bernhardt did a presentation on a new thing he's been thinking about: Time to Green Graphs. This is a really cool idea that I think would be an awesome plugin for IDEs, as well as a hook for autospec.

Kudos for LeanDog for hosting. And, yes, we were on a boat!


Time To Green Graph by Gary Bernhardt from Corey Haines on Vimeo.

Monday, March 16, 2009

Road Thoughts - Apprenticeship

I stopped at the wildwood reservation metro park in Toledo on the way back from Lansing, MI, and put some thoughts down on the Software Craftsmanship Manifesto and its use as a beacon for developers to find a similar-minded community. I focus on my thoughts behind apprenticeship as an effective means to fix what I call the broken 'inherited knowledge model' we currently have.


Road Thoughts - Apprenticeship from Corey Haines on Vimeo.

Wednesday, March 11, 2009

Conversation with Paul Pagel

Paul Pagel, one of the owners of 8th Light, was kind enough to host me for a couple days during my most recent trip to Chicago. I'm always happy to be in Chicago, as it is such a great hub for the Software Craftsmanship movement. Paul was the organizer of the Craftsmanship Summit in December, as well as been a driving force on the mailing list.

We recorded this video on Saturday morning, the day after we released the "Software Craftsmanship Manifesto." Paul talks about the motivation behind both the manifesto and also his views on the Software Craftsmanship movement.


Conversation with Paul Pagel from Corey Haines on Vimeo.

Jay Fields on Pairing

Jay Fields has a great article in InfoQ about adopting pair-programming. I've done a lot of pairing in my time, both with experienced pair-programmers and not-so-experienced ones. I've talked to many companies and people about the ideas behind it. Jay really does a great job of explaining these concepts, and I plan on pointing people to his article in the future. Well worth the read, for sure.

Tuesday, March 10, 2009

Lunch Discussion with Hashrocket

While I was down in Florida at Hashrocket, Stephen Caudill organized a lunch discussion with me and the Hashrocket employees. Among other things, I gave an explanation of my views of Software Craftsmanship, the XP principles and techniques and also made a totally sweet A-Team reference!

Also, one of their customers, David Cohn of Spot.Us, gives some insight into why he chose Hashrocket.

(While down at Hashrocket, I had the pleasure of doing a video interview with Stephen Caudill. If you haven't watched it, yet, make sure you do; he's got some great ideas.)

Yeah, it is long, but you can just put it on in the background and listen; Pretend it is an audio-only podcast!


Craftsmanship Lunch 'n' Learn with Corey Haines from Hashrocket on Vimeo.

Sunday, March 8, 2009

Conversation with David Chelimsky

During my second tour through Chicago, I got the opportunity again to spend a couple days with David Chelimsky. Due to some timing issues with his project, we didn't have a tremendous amount of time to pair on work stuff, but we wrote some great stuff for RSpec (custom matcher DSL rocks). We finally had time to sit down and have a brief conversation on the morning I left. David had some ideas on open source projects and in-person pair-programming. It is early, before our first coffee, so you can tell we are a bit tired. David has some very interesting insights into his work on maintaining the open-source BDD framework, RSpec.

David's book, The RSpec Book, is in beta at The Pragmatic Bookshelf. I'm working my way through it, so I can say that it is a great tutorial on using RSpec and Cucumber (and other tools) to develop software.

In case you missed it, here is the first discussion we had back in December. We talked about testing, spec-first development and some other thoughts.


Talk with David Chelimsky (February 2009) from Corey Haines on Vimeo.

Monday, March 2, 2009

A story about 'getting it done'

I had a great time pairing for a day with Uncle Bob, getting a treeview integrated in FitNesse for navigating the pages. We were using the YUI Treeview widget, and ran into an interesting situation. I've related it to a couple people now, and the story always takes the same turn towards 'pragmatism', so I thought I would write it here.

Uncle Bob and I spent a bit of time spiking out the treeview integration, trying to understand what divs were required, how the dynamic loading worked, etc. Once we had a feel for it, we looked at each knowingly: we are at the point where we need to start having tests for this.

Neither Uncle Bob nor I had much experience unit testing javascript, much less test-driving it. I've done a lot of javascript in the past, but I've never taken the time to learn any of the testing frameworks (yes, horrible, gaping deficiency in my skillset, which I am working on improving through practice). Add to that the fact that I'm more familiar with Prototype than JQuery, and the situation gets even more complicated. As is the case, my first inclination is to go find a testing framework. I did a quick google search, saw QUnit was the jquery framework and decided to take a look at it. We set a timebox for investigation (I think it was 15 minutes) and started reading about it. Hmmm.... It seemed complicated enough that it was going to take us more than 15 minutes to get it set up for the first time and start using it. We got to the end of the spike with not much better of an understanding. Since I was only there for a day, we didn't want to spend it just trying to get a testing framework set up. We just wanted to get it done with a minimal of fuss.

This is the point in the story when everyone's ears perk up, since I'm always ranting about what you do when you have to 'get it done.' After all, this is the defining moment for your skills. What you do at this moment is fall back on your techniques. This is when I see a lot of people start throwing around 'pragmatism' to make excuses for themselves. For me, this is the moment when you look at the situation and figure out how to stick to your principles with what you have.

So, instead of just throwing our hands up and hacking away, we took a second to think about what we really needed. For our simple situation, all we really needed was assertEquals(). So, I wrote the following javascript function:

After all, the very basics of testing is checking that two things are the same. Now, there comes a time when you might need a slightly more robust situation (checking floats, for example), but we didn't have this requirement. This took me less than a minute to write. Then I wrote the supporting html:

So, as we wrote new tests, we added them to the list. We weren't able to run them all in a suite, instead having to refresh the page each time and click the next one. But, since what we were doing was fairly simple (we only ended up with 6 or 7 tests), this wasn't a huge problem.

The half hour that we spent investigating QUnit and then writing this small utility saved us much more time than that over the course of the day, as we were experimenting with features later on. And, yes, we even wrote tests for the AJAX calls (stubbing out the jquery ajax request).

Moral of the story? For me, this was a great example of what happens when you spend a little bit of time to dig into what your fundamental problem is and work towards that. Rather than make excuses for our deficiencies (lack of experience with a js testing framework), we figured out the simplest thing that we needed and ran with that. For us, the simplest thing was not just hacking away in an environment we weren't familiar with (jquery ajax stuff, yui treeview). In the end, we got the treeview integrated and working, exactly what our goal for the day was.

Figuring out the simplest thing that you need isn't a skill that comes for free, though; it takes practice.