Writing Software With the Grain

My JavaWorld article, Writing Software With the Grain: Exploring the Humanity of Agile Methods, is up! This is my first publication in anything bigger than a blog.* Dorky as it is, I’m pretty pumped!

The article explores several common Agile practices—to wit: user stories, lightweight documentation, and iterations—that happen to align well with normal human behavior given the kinds of creatures that we are. There is, you might be thinking, a host of philosophical assumptions that underlie this sort of reasoning, which I would be only too pleased to discuss over drinks sometime if you’re local.

I had to pick a limited number of Agile practices for analysis in the article, but I think there is more to the story than the three I’ve identified. A good example would be Extreme Programming’s Sustainable Pace. The opposite of Sustainable Pace is the discipline of death-marching developers just hard enough that they don’t quit, but hard enough that we squeeze maximum productivity out of them. If developers were impersonal units of software production akin to machines, this would be the right way to manage them.

The most obvious objection to this is the law of diminishing returns, or the idea that each marginal hour worked is an increasingly fatigued, and correspondingly less productive, hour. While there is certainly some truth to this, I think we’re forced to grant that we actually do make more progress when we work more hours. Everybody knows crunch time, and every honest developer is forced to admit that the crazy schedule of the final push to the finish actually make a difference—at least up until the time the hallucinations start, which in itself can be kind of fun, as long as it’s your coworkers doing the hallucinating.

The best objection to overwork isn’t a utilitarian one; rather, I would argue that the notion of Sustainable Pace is grounded in the right relationship between work and the other activities in human life given the kinds of creatures that human beings are. It is good and right for us to spend a certain amount of our time following some kind of economically productive vocation out in the commonwealth. It is also good and right for us to spend some amount of time with friends or family, some amount of time sleeping and eating, some amount of time standing in line at the DMV, some amount of time inside, some amount of time out-of-doors, etc. For most people, work might take up a plurality of the pie, but it should not be a significant majority. It is in our nature to spend our time in a variety of roles activities, of which work is but one part.

“The Humanity of Sustainable Pace” could definitely use a more detailed treatment than I’ve given it here, but my point is to illustrate that there is more to the topic than my article covers. I’d love to see the community do some more thinking along these lines. The trick is to realize that human beings are a particular kind of thing—we implement a common base class, if you will—so the practices and methods we develop in our vocation should respect that class’s semantics. The notion that we are uniform production units that can be squeezed into whatever organizational structure and management schema we choose is destructive not just to the ontology of the human person, but also to the well-being of the people on our teams—people who may well be our friends, and people whose healthy vocational context is certainly our responsibility.

So let’s think some more along these lines. Agile is doing great things, and hopefully more great ideas can follow from it.

Top Ten Recession Survival Tips for Developers

Well, with the Dow making its biggest single-day point gain ever today, maybe things aren’t going to be so bad after all. However, the economy is still on everyone’s mind these days, especially us independent consultants. Will shrinking demand for development services cause our business to decline, or will hiring freezes and tight budgets cause IT managers to look to variable-cost options like consultants and small development firms to keep key projects alive? Time will tell.

In case it’s the former, I’ve put together my predicted top ten growth industries for 2009, so we can all focus our limited resources wisely:

  1. Brisk trade in gold, guns
  2. Generating electricity for Bartertown
  3. Foraging for nuts and berries
  4. Being a Democrat in elected office/Not being a Republican (tie)
  5. Repurposing credit default swaps into lightweight, waterproof shelters
  6. Issuing public guarantees of underperforming bank assets/nationalizing the banks (tie)
  7. Innovative financing methods to enable less-creditworthy borrowers to participate in the dream of home ownership, only in this case the dream is a blood-chilling national nightmare
  8. Law practice specializing the the raft of rushed and poorly thought-out regulations about to be imposed on the financial industry
  9. Fix and flip!
  10. Providing Agile training and coaching at recession-sensitive prices to give businesses the tools they need to remain competitive in the face of shrinking budgets and to position themselves for success in the recovery, following Tim Bray’s recent suggestion

With so many options to choose from, 2009 could still really be an exciting year. As for me, though, I think I’m going to go with #10. Who’s with me?

Complex Workshops in a Conference Setting

The typical conference session is a 50- or 60-minute lecture backed by slides. No Fluff Just Stuff, where I do most of my speaking, extends that to 90 minutes. Some creative speakers think of group activities to supplement the otherwise-non-stop bloviating, but those are generally limited to soft skills and process-oriented sessions. If you want to talk about code, getting people to get their hands on a keyboard at a conference is a tough problem. I’ve been wanting to solve it.

Two weeks ago in Raleigh, I retooled my open source business intelligence talks to include a hands-on workshop. The talks had been two 90-minute lecture sessions covering the basics of ETL, reporting, and analytics on a conceptual basis with a brief demo of relevant tooling, including some elaboration on using the Pentaho Analytics Platform. The retooled version is comprised of one part lecture covering the basic concepts, plus a 90-minute, hands-on training session building an ETL job in Talend Open Studio.

A working Talend installation has a few moving parts: a Java runtime, a database, sample application data, a sample data warehouse schema, and Talend itself. Asking 15 or 20 people to install all these things by themselves and get them talking is at least an hour of work by itself, and my goal is to provide a valuable workshop experience in 90 minutes. I tried the install-your-own approach at ÜberConf in June, and it wasn’t a terrible experience, but it was clear that it could be improved.

My new approach is to create a VM and distribute it to attendees before the session. So far this is working much, much better. There are some frustrations in the first few minutes of the session, but I’m able to get people’s hands on a tool that requires a fairly complex runtime environment. Here are some lessons I’ve learned and problems I’m still working on:

  • Try to keep the VM as small as possible. Right now I’ve got one that takes just over 8GB while running, but zips up to just under 2GB. This seems like an easily achievable minimum.
  • When creating the VM (using VMWare), be sure to check the box that splits the disk image files into 2GB chunks. Chunks greater than 2GB will not unzip on Windows machines, seemingly no matter what client you use. Windows users will not remember you in song (at least not the kind of songs you want).
  • Find some way to distribute the VM image ahead of time. Otherwise it will take several minutes to copy and unzip, burning up valuable workshop time. In my case, the workshop follows a 90-minute lecture session which is but required as a prerequisite, so I pass around thumb drives during that session. Attendees can copy the image and unzip it while they listen to the dulcet tones of my voice. It’s a win-win.
  • Note that your more enterprisey attendees may have laptops whose thumb drive capability has been crippled by their corporate masters. I have yet to devise a fallback plan for this. Perhaps I could burn a DVD with the requisite files on it; I will be thinking about this and other options. (I’ve chosen thumb drives to make it easy to update the image and other support files on a regular basis, as the talk evolves.)
  • Distribute a player with the VM image. No, seriously. Twice now I’ve asked attendees to download the VMware player at the start of the session, since I’m not formally allowed to distribute it myself. This is a big fail. I may switch to VirtualBox to get around this problem.
  • When distributing an operating system image with a database installed on it, be sure to document the usernames and passwords of all OS and database accounts. I’ve made the decision to use a single, simple password for all accounts, favoring user experience over security in this sandbox OS.
  • When providing instruction on a visual tool like Talend, distribute screenshots of each step of the procedure you want attendees to do. That way, if someone gets behind, he or she has a shot at getting caught up by following the slides.

So far I’m getting positive feedback on the session. People really enjoy getting their hands on a tool and are mostly ending up with the satisfied feeling of having learned and done something new. I’m still working out the kinks, but I think this is going to become a staple of my stable of talks. I’d love to hear your ideas on how to improve it.