“Add a pom to my toy Scala project so I can build it with Maven” sounds simple. It is, if you do it every day. I can look it up, yet again. And get it wrong, yet again. And consult an expert with “Why doesn’t it see my Scala sources! This works fine from the IDE.” And get the answer, and then forget it again.
This time I encoded the answer into a Rug. Now I can run this program to add the pom.xml to toy Scala projects. While I was at it, I encoded how to add Scalatest, so I can stop looking that up over and over.
These rugs aren’t published. To use them, clone the repository and run
rug in local mode. That repository has collected three related Rugs now; it seems worthwhile to publish them as a group. Then nobody else would have to look this up again either! I might do this … after I create an Atomist executor to move Rugs from one repository to another. (I have a feeling I’m going to do a lot of this while working on Atomist. Automate all the things!!)
That good feeling that I get from encoding this knowledge so that I don’t have to look it up again is deceptive. Version numbers increment, practices evolve. This carefully encoded knowledge grows stale.
Publishing the Rugs is a responsibility of ownership, of keeping them up to date. Only then do they shine with enduring value to the community. Am I ready to accept that obligation? Not today, because I’m waiting until I can automate that too. This day will come.
For now, I’m happy with making my near-future-self more productive — when it’s a step toward making oodles of developers more productive someday.