
A couple of cool going-ons over the next several weeks:
In my overview post on this series, I used the term discipline, and still believe in that term. Some people commented that it may be confusing, since there are so many ways we think of and talk about discipline. The easiest way to explain it is with this awesome quote from The Fifth Discipline:
The way to begin developing a sense of personal mastery is to approach it as a discipline, as a series of practices and principles that must be applied to be useful1
Peter then goes on to talk about discipline being an activity we integrate into our lives. I think this captures the exact spirit of this series and of the research into this. The goal of this is not some checklist of practices that one can do a couple of times and feel good about themselves. Rather, this aims to be a list of embodied activities that we continually practice, learn and improve upon.
The katas we’ll be developing play a large role in this. In the book Scaling Lean and Agile, Craig and Bas say:
Many good American companies have respect for individuals, and practice kaizen and other tools. But what is important is having all the elements together as a system. It must be practiced every day in a very consistent manner2
Practice. Consistency. Thinking of the whole instead of individual practices. These are what define the disciplines we’ll be exploring. Two more quotes from The Fifth Discipline sum it up:
To practice a discipline is to be a lifelong learner. You “never arrive”; you spend your life mastering disciplines3
Practicing a discipline is different from emulating “a model”. All too often, new management innovations are described in terms of the “best practices” of so-called leading firms…I do not believe great organizations have ever been built by trying to emulate one another, any more than individual greatness is achieved by trying to copy another “great person”3
In my last post on discipline, I discuss disciplines as being the thing that kicks in when motivation fails you. More importantly, I state that there are specific disciplines which I believe apply across software developers wishing to be better at what they do.
In doing research for this topic, I came across many references to this same concept in the martial arts world. Some interesting ideas have come from an initial scan through the book Budo Mind and Body by Nicklaus Suino. These are:
But while these are nice concepts, they are, to me, guidelines, not disciplines. I’ve found a nice summary of some disciplines in another book called Kungfu Basics by Paul Eng. In it, he describes basic, universal principles that apply across the martial arts. They can be split into two categories:
Over the next several weeks, I’m going to be examining these disciplines and showing how we can benefit from understanding them in the software world. There are 13 disciplines Eng discusses in his book, and I’m sure that as my research continues I’ll find more, or make tweaks. The culmination of this work will be going into a talk Corey Haines and I will be giving at Agile 2009 entitled Disciplines of a Software Developer. But, at a high level, here are the 13 disciplines so far:
I’ll update this list with the links to the individual posts as I finish them. And, as always, I’d love your feedback!
On Friday, I got the opportunity to attend the excellent acts_as_conference right here in Florida (over in Orlando). The conference is a one-track Ruby conference that had about 130 attendees show up. I was excited by both the schedule and the attendees, and though I was only able to attend on Friday, I wasn’t disappointed.
The conference opened up with the Rails Envy guys doing a talk on Rails Innovations. Some of the ones they listed included:
They then went into a talk about Scaling Rails. I found this extremely interesting because anyone whose ever had to deal with deploying Rails Apps may ask themselves Can Rails Scale? The answer now is a resounding yes with a combination of caching and deployment strategies, and the excellent Passenger deployment.
They finished up their talk by announcing a series of free screencasts that are being sponsored by the great guys at New Relic on Scaling Rails. It’s available right now at http://railslab.newrelic.com/scaling-rails. Go get ya some!
Next up was a live Q&A; Session with the man himself, DHH. I think that out of all the things from the conference, this stood out as being the cornerstone of how awesome the Ruby community is. No question was off-limit, and unlike other conferences where people can get into details for whatever silly secret thing it is (or worse, get into details that never get shipped), everyone seemed to feel comfortable talking about, well, whatever. Some example questions:
Ok, so things got a little goofy. And DHH did look like a giant blue smurf on the screen because his white balance was all out-of-whack. But it was still a great talk, and I highly enjoyed it.
In the afternoon, we got to hear from the guys at Hashrocket (choice quote: “If you don’t have a company that lets you test, try to get fired for testing” from Jon Larkowski). It was refreshing to hear them talking about all of the agile stuff they do – pairing, test-first, acceptance tests, stories – and not talking about it being “agile” but just “how they do it”. Professionalism FTW!
We then got to hear Jim Weirich start to talk about Fixtures, but instead lead us down the Grand Unified Theory of Software Development. His talk ended up focused around coupling and a term called Connascence. He focused on three areas: Connascense of Name, Connascense of Position and Connascense of Meaning. I quite enjoyed his talk, and talking with him throughout the conference.
The last sessions were on building Multi-Tenant Systems in Rails, Merb and the integration to Rails 3.0 (Key takeaway: The Merb team did have to give up their test framework and use the one from Rails) and a keynote on overcoming fear.
Of course, during and between the conference were all the great side conversations. My big takeaway is thinking about putting together a Ruby and Rails Firestarter event akin to the TDD Firestarter we recently did. But in general, I was quite happy to be at a product-specific conference having to remind myself that this wasn’t an agile conference – agility and openness are just a way of life with Ruby.