What is a spike?

There was some discussion on the Growstuff IRC channel last night, while I was asleep, about the term “spike”. I use it a bit on the Growstuff project but I don’t think everyone knows what I’m getting at, possibly because I picked it up by osmosis from the Extreme Programming community over a decade ago, and the term’s fallen out of favour since then. So here’s a quick definition as I use it:

  • A spike is experimental. It’s for writing something you’ve never written before, and don’t quite know how to start.
  • A spike is a learning exercise. The goal isn’t to write a new feature. The goal is to get enough knowledge to know that you can write that feature.
  • A spike is a conversation-starter. It moves abstract “maybe we could…” conversations into the concrete.
  • A spike may not follow coding standards. You don’t even know this thing is possible. It’s pretty hard to write tests first in that situation.
  • A spike is thrown away when you’re done. It gives you enough to say “okay, we know this is possible”, and then go and write it properly.

Growing stuff (vegies, open source projects, communities…)

The other week I posted from GUADEC, saying I’d been inspired to start an open source project to build a gardening website.

If I posted, “I planted tomatoes in my garden in Melbourne on the 1st of November” and everyone else did likewise, we’d wind up with an extensive database of food plants, including things like heirloom varieties and where to source them from. We could also build a histogram of the distributions of planting times for every location. Eventually, we could build in tools for sharing your harvest with your local community, saying eg. “I have a tree full of lemons, does anyone want them?” or facilitating seed-sharing and other community gardening activities.

I couldn’t stop thinking about this over the next day or so, and I realised it’s something I really want. Really really want. I want a resource that’s like Ravelry, but with a focus on food gardening, especially the sustainable/organic/heirloom end of that scene. My perfect site would have a strong community committed to sustainability both in the green sense and in the sense of a successful online community. I’m also thinking of Dreamwidth as inspiration, especially with regard to its ethics and the way its developer community works. I’d definitely want this whole thing to be open source and community-built.

This project is now up and running, and has been active for about a month, so I thought it was about time to post an update.

What we have so far:

  • Github — this is where our source code lives, along with most of our project management. Take a look at our dev branch for active development, also our wiki (note: moving to self-hosted soon) and issue tracker, especially this iteration’s stories (see notes below on development process).
  • Mailing list — most of our interaction happens here, strongly recommended to join if you want to take part in the development of the site. We need technical and non-technical people, coders and gardeners. If you’re interested in having input into what Growstuff will be, you should probably be on this.
  • Dreamwidth community/project blog — Dreamwidth and its inclusive development community are inspirations for Growstuff, and many of our contributors already have accounts there. The Dreamwidth community operates, to some extent, as the project’s blog, and has an RSS feed you can follow if you don’t already use Dreamwidth. It’s low-traffic and often gets highlights and important points crossposted from the mailing list. Note that if you don’t have a DW account you can still comment anonymously or using OpenID.
  • IRC channel – realtime chat room for anyone interested in the project. If you are already familiar with IRC, it’s #growstuff on irc.freenode.net, otherwise see the linked page for more information on connecting.
  • Twitter — if you want to follow us for occasional updates on that platform.
  • Server hosting with a provider that uses 100% renewable energy — geothermal, actually, as they’re based in Iceland. This is part of our commitment to sustainability.
  • Placeholder website on growstuff.org — there’s nothing much there, but I link this so that if you want to tell people about it, it’s somewhere to send them.
  • License (AGPL3+) — Growstuff is free, open source software. Our license choice allows anyone to use or build on our work, but they must use the same license for what they do. Our data about crops, once we have the site up and running, will be under the roughly equivalent CC-BY-SA.
  • Community guidelines — we wanted to get this in place from the start so everyone would know the groundrules. These apply to all project-related forums.

Most importantly, we already have a team of people who are working on building this thing. I wanted to talk briefly about our development process, because I think it’s unusual. We’re using an agile development methodology called Extreme Programming. XP consists of a collection of practices including:

  • sustainable pace
  • constant involvement of the customer (in our case, gardeners)
  • simple design focused on present needs
  • pair programming
  • test-driven development
  • continuous integration
  • short release cycles

XP isn’t often used by remote teams or by open source projects, but we’re taking a shot at it because it’s such a good fit with our community’s goals. It’s been a bit rocky trying to get things going at first, but we are currently in our second iteration, and as I am travelling around Europe (currently in London) I’ve had the opportunity to meet and pair-program with a few of our developers on different tasks. It’s amazing how much more productive, and more fun, it’s been to work on stuff with other people, especially as we’re learning the development stack. This is my first “real” Rails project, though I’ve played with it before. If it weren’t for pair programming, I would have been spending a lot of time pounding my head on my keyboard in frustration as I tried to figure out how everything fits together. For other contributors, it’s their first open source project, or first time sysadmining, or first time writing unit tests, but since we have people who know all these things, we can use pair programming to help spread that knowledge around. For those who can’t pair face to face, we make sure that the two people assigned to each story can work together online, co-ordinating via email and/or using tools like tmux and voice chat to share their work.

Right now, we’d love to more people to join us. If you have Rails experience (and experience with all the related technologies, like RSpec and Capistrano and so on) that would be great, but we’ll also welcome inexperienced developers who are keen and want to learn, or non-developers who’d like to be involved by sharing their gardening knowledge and helping us understand what you’d want from a site like this.

If you’d like to help us build Growstuff.org, please join our mailing list.