Skip to main content


Showing posts from 2010

Feedback on "craftsman" activities at work...

Got some good feedback from one of the people at the office on the idea of doing after-hours randori sessions, topics to choose and the last "Craft Day" we did.
The JQuery session at craft day was his favorite.  Hands-on technical stuff for specific technologies is king.  More academic problems cause him to lose interest quickly.40-and-out is very important to him.  Doesn't want to do any after-hours stuff because he works very hard while he's here, and is committed to his family.He was unpleasantly surprised that so few people understood the fundamentals of agile development, specifically of TDD.Real-world stories in a lunch & learn, not contrived.  He's thinking along lines of micro-patterns for mocking portlet behavior - problems with specific technologies that we use every day.All of these came from one person, but were worth writing down because they're a distillation of what I have heard from other people around the office.  Great food for thought.

The results are in: In-house software craftsmanship day

On Friday Nov 12, we hosted an in-house "software craftsmanship day".  The format was similar to many of the software conferences I have attended, with multiple tracks, some more technical than others.
The schedule and session notes are in my previous blog post.
The raw retrospective notes are on the learning group's google site.
The event was an unqualified success, based on feedback from the participants.  Some of the most valuable things we found:
Relationships: getting everyone talking to (and pairing with) people on other sub-teams is an end worth pursuing by itself.Sharing knowledge: having different people pair on hands-on exercies spread out some of the micro-patterns that people follow in their day-to-day work.The feedback was entirely positive and constructive.  In my experience, people here are not at all shy about sharing criticism, so I took that at face value.
I believe the two main keys to success were...
Preparation: most of the people who hosted sessions …

Software Craftsmanship Day at my workplace

Well, we finally pulled together a schedule and planned out all of our sessions for a Software Craftsmanship day at my workplace. 
The coolest part?  I didn't have to beg anyone to make it happen.  One of the VP's suggested that we could devote a day per month to honing our development skills.  How many organizations do that?  Very few, I think.
Since I was already leading a craftsmanship group, my boss asked me to lead the effort to put this together.  I just asked for volunteers, called a weekly meeting to work out what we wanted to do, and we did it!
I'll be sure to report what I learned once the first one is over.  I expect this to be a very useful and interesting day, but I won't know for sure until after Friday, Nov 12.
The best way to describe what we're doing is to paste the invitation I just sent to all of the agile teams here (about 120 people are invited, I expect around 100 to attend).
Craftsmanship Day (a.k.a. "Craft Day") takes place all day th…

At SCNA: Part 4

This is the last post in a multi-part series about the Software Craftsmanship North America conference in Chicago.
Combinator-based design in functional programming: Michael Feathers
I'll be honest - I didn't really pick up a central theme on this one.  It was interesting and I took some ideas from it, but I can't really summarize it well..
My take-aways: We have a settled idea of OO, but not yet one of functional programming - the "best practices" are still evolving.Haskell is a good functional language to learn with - it forces you to be functional.Duplicating objects at runtime is no longer evil.  Duplicating code still is.OO increases encapsulation and understandability.  Functional increases immutability and reduces the number of moving parts.
Panel Discussion: Bob Martin, Michael Feathers, Chad Fowler and Enrique Comba Riepenhausen
This was my favorite session of the conference.  Instead of my interpretation of what the presenter was trying to say, here are my fa…

At SCNA: Part 3

This is the third post in a multi-part series.  The conference covered two days, with many presentations, lightning talks, and conversations about software craftsmanship.

Chad Fowler: McDonalds, Six Sigma and Saxaphone
Fowler, like many other people at SCNA is a "musician/developer" - he chose software development as a career after trying to make his way as a musician.  Exactly how much that influences his craft is hard to say, but it seems to happen often enough to take note of it.
He described what we do as in the middle of a continuum with "Art" on one end and "Commodity" on the other.  A parallel is that art is about form, while commodity is about function.
My take-aways: Treating your work as "art" means that you can talk about it subjectively, which is a cop-out.Internal quality is irrelevant.  Customers don't care about "form", only "function".We can't make software better than McDonald's sells burgers.  Hav…

Software Craftsmanship North America

Hands-down, the best conference I have been to so far.  It was a two day event that focused on "Software Craftsmanship" - the idea that writing software is somewhere between "art" and "science", and should pay attention to what both of those disciplines have to say.

If you read nothing else, be sure to check out the quotes from the panel discussion in part 2 of day 2.

I'm going to post this in several parts, so this post will serve as a guide to what I write about it.

Day 1 - part 1: Kickoff, and a mixed bag
Bob Martin, Doug Bradbury and Michael Norton.

Day 1 - part 2: Lunch and some great afternoon sessions
Lightning talks, Apprenticeship Panel, Randori with the Stars and Ken Auer

Day 2 - part 1: A slow start, then momentum
Chad Fowler, Keavy McMinn, Lightning talks and Enrique Comba Riepenhausen

Day 2 - part 2: The best part of the conference
Michael Feathers, Panel discussion and Corey Haines wrap-up.

Thanks to Enrique Comba Riepenhausen for the photo.…

At SCNA: Part 2

This is the second post in a multi-part series.  The conference covered two days, with many presentations, lightning talks, and conversations about software craftsmanship.
Lightning talks The one that stood out most for me was by a group of developers from Boston.  They talked about their software craftsmanship meet-up group.  Interesting because it intersects somewhat with my plans for adding a craftsmanship group at my workplace. 
Take-away: (in their opinion) it doesn't matter how big the group is, and smaller is better.

Apprenticeship panel
The concept of apprenticeship is really taking off in software development shops.  This was a group of "apprentices" describing their experience.

My take-aways:
Apprenticeship is very effective, and lasts somewhere between 6-12 months.You need an understanding customer, since the apprentice must work side-by-side with masters on a client site.Randori with the stars
A laugh fest.  It was done in Code Dojo (by my definition) format using …

At SCNA: Part 1

This is the first post in a multi-part series.  The conference covered two days, with many presentations, lightning talks, and conversations about software craftsmanship.

This may have been the best conference I have attended.  I found nearly all of the speakers interesting, and the conversations I had between sessions were at least as valuable as the sessions themselves.  It has provided me with a lot of food for thought, that I will comment more on later.
Here is a summary of Day 1, and what I took away from it.  Note that the topics may differ from what the presenters actually put on the screen.
"Uncle" Bob Martin: The Failure of State Uncle Bob's talk centered on the need for functional programming.  The thrust of it was that most (and perhaps all) OO languages are all about state.  You can modify the state of an object externally through public methods.  You check the state to determine what operations have already been performed, etc.
Functional languages are different.…

Too much testing, too little clue

A couple of interesting things shook out of today's retrospective.  It turns out that we're well behind on our targets for the current project, and two of the culprits seem to be:

Too much Selenium testingNo card wall
The evils of Selenium

The right way to do Selenium testing is pretty well covered in Patrick Welsh's blog and in other places.  Talk about great timing - Patrick was at the office today to give a lunchtime talk on this very subject.

The team decided to handle the Selenium problem by writing tests for only the things that we absolutely had to test through the UI.  Most of us (we'll have to revisit this) also agreed that we would keep the Se tests as small as we could get away, with while still retaining a reasonable level of test protection.

VersionOne or card wall?

The second item is something I should have brought up before, but I wasn't sure of it until I had been on the project for a month.  We have been using VersionOne as our story management syste…

Safari Crashes & Firefox Issues

Looks like Safari is having a lot of problems lately: Fanbois howl over 'hang a lot' Safari 5 • The Register
I find that Firefox crashes on a regular basis - to the point where I use Chrome almost exclusively. Best bet is that it is a bad plugin, and once Firefox "Lorentz" is out of beta, I may be able to tell which one is dying and taking my browser with it.

Transhumanism RSS feeds

I'm interested in the subject of Transhumanism. I suspect that most of my fellow technologists are also interested in the concepts it embodies, even if they're unfamiliar with the term.

"Transhumanism" is a catch-all term for enhancing our abilities as human beings. It is related to Posthumanism,which is more about what human beings will transform themselves into and/or AI that we may create that will surpass our abilities.

There are plenty of blogs and online magazines on the subject, but many of them either have no RSS feed ("and you call yourself a transhumanist!").  Many others only have a feed that delivers a couple of sentences with a link, which is to my mind both hypocritical and self-defeating (it drives almost no traffic, but does irritate potential readers like me). 

I haven't found anyplace that aggregates full RSS feeds, so I made a tentative start.  Here is a Google Reader bundle.  If you see anything you really like in there, I'd sug…

Content is King

Recently the content team at my employer showed us a presentation about the whys, hows and challenges that they face in organizing content for our products (mainly graduate-level research applications, but some general-use software as well).

Their problems differ somewhat from what most people thing of as "content" in that they don't create the vast majority of what we publish.  Instead, the company purchases or licenses large chunks of information in various forms, and then transforms it into something that you can search and read through a web app. 

What struck me as most relevant were the challenges they face in becoming "agile".  This seems like an area ripe for a better process and cultural changes to accompany it.  It is also far more important than the software development process ("pretty" web apps may engage people up-front, but you have to have something authoritative and useful behind it if you want end-users to want to keep coming back.)

Cross-Browser Control of the Back Button

Update:  (3/30/2010) We ended up going with an Ajax solution instead.  Although the code below works, it is really annoying in IE, since you see the page redraw twice.

Here is a very brief how-to on forcing a reload of a page when the back button is clicked.  In my current project, I needed to do this because the header portion of the screen contains some status information that could be confusing to our users if the latest updates don't show up.

We're using JBoss Portal server, which is why I put the code in two  different places.

Using JQuery, the JQuery(document).ready function handles this just fine for IE, but not at all for Firefox.  Here is the IE code, which I placed in the header jsp that appears on all portal pages:

<input type="hidden" id="refreshed" value="no">
<script type="text/javascript">
        var e=document.getElementById("refreshed");

Retrospective: The First Coding Dojo

After attending OneDevDay and CodeRetreat, I was gung-ho to get some regular nerdly fun going at my place of business. Accordingly, I pulled together a Wiki site, scheduled a meeting, and "just did it".
It went better than I had hoped it would. I got some great positive feedback from the attendees in our brief retrospective. I got a good vibe from everyone as we were going through the exercise.
I wanted to keep things as informal as possible, but we did follow this minimal schedule: 5:30 - 5:45Food & Conversation 5:45 - 6:00Description of Dojo Format. Choose topic & Codebase 6:00 - 7:20Coding! 7:20 - 7:30Retrospective
The team came up with the following in our retrospective:

What went wellWhat could have gone better
Taking the initiative to do this.
Logistics / room / projector.
Welcoming atmosphere helped everyone dig in.
Small problem domain made it easy to focus on skill.
Everyone wrote code - even the managers!

More QA people should attend
Next time, have someone availabl…