The problem with doing one thing well

You’ve probably heard the tech startup aphorism “do one thing well”, or a variant on it. “Don’t try to do too many things”. “Focus.” Whatever.

I’m not very good at following it, as is pretty apparent from what I’m working on. Growstuff has several things it’s trying to do (crops database, garden journal, seed sharing, community building), all interlinked.

Every so often someone points me at a website that does just one thing of the set of things we’re trying to do. For instance, the other day I got an email from a Transition Town contact, suggesting I look at RipeNearMe, which offers produce sharing/trading. If you’ve got extra lemons or zucchini or eggs, you can offer them for sale to people nearby. Great! The website looks fantastic, and they’re starting to get people listing stuff. (If you want to see some examples of what they’ve got available for trade, check this neighbourhood near me, which has a few things listed, though it’s sometimes slow to load.)

The Transition contact went on to say that maybe Growstuff should “join forces” with RipeNearMe, so as to avoid duplicating effort.

The problem is, we can’t. RipeNearMe doesn’t have any way for us to integrate with their data. There’s no API, and their terms of use are restrictive and prevent us from using their data in any way. (There’s also no open development community we could join, but that’s not what I’m discussing in this post.)

There are a lot of gardening sites out there that do one thing, often very well indeed: a Q&A forum, a seed swap site, a database of planting times, garden layout tools. But when we talked to people who used them, they said “I used this site for a while, and it was useful for that one thing, but I really wanted $other_thing as well.” Usually there is another site that offers the desired feature, but it doesn’t integrate with the first one. As a gardener, you need to use a dozen disparate sites, re-entering your garden data in each one, and having to check in on each of them regularly to keep them updated. It’s no wonder that so many gardening sites, flourishing at first, start to die down after a season. Before long you can see weeds growing everywhere.

That’s not to say that open data and APIs solve everything — I’ve written before about how importing data is hard — but without them it’s impossible to integrate anything.

I’m reminded of Anil Dash talking about the web we lost: heavily interlinked, easily syndicated, less silo-ed. I’m also reminded of the Unix philosophy and especially of pipelines. Unix commands “do one thing well” — sort a series of lines, count words, spit out the contents of a file — but they don’t work alone. You can chain them together to say things like “show me the wordcounts of all these files in descending order”, or express even more complex ideas, as if building a tower from blocks.

Now think of that in terms of gardening websites. How awesome would it be if you could say “take my garden layout from SmartGardener and import it into my to-do list on Growstuff, then cross-reference it with the planting dates on Gardenate and the weather feed from the Bureau of Meteorology, and tell me when to plant things. Then when I harvest the results, let me post my excess across to RipeNearMe and, heck, why not CraigsList too?”

That’s pretty unlikely to happen, but until it does, I feel pretty justified in not doing “just one thing” with Growstuff. “Just one thing” only works if you can integrate with other things. If you build one amazing feature and put a fence around it so nothing can get in or out, what’s the point?

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.

GUADEC talk: done! And a new project.

I gave my keynote at GUADEC today, on the subject of “From Open Source to Open Everything”, loosely based on this blog post from last year. I think it went pretty well, except that I ran badly overtime into the lunch break, for which I can only apologise and blame myself for hitting the wrong option on my laptop and not getting a timer on-screen, realising too late, then thinking I could muddle through without it rather than stop to fiddle with my laptop once I’d started talking. Ah well!

Sadly, after lunch, I was so wiped from the nasty head-cold I picked up somewhere in my travels, that I came straight back to the residence and slept all afternoon. If anyone was looking for me to chat about my talk, please hunt me down tomorrow.

I need to clean up my notes and post them, but stay tuned for a blog post version of my talk here sometime in the next couple of days.

In my talk I touched on a whole range of “open” communities including some in the green/eco/sustainability space. This morning I also attended a talk about “Gnome and the Systems of Free Infrastructure” by Federico Mena Quintero, from Mexico, who touched on similar topics. Federico and I have been talking about this stuff a bit over the last few weeks, to see what similarities we had in our talks. The other day we had lunch together and somehow the subject of open data for food crops came up: Federico asked me whether I knew of a free source of information telling you what crops grow in what climate regions at what times of year, and I said I didn’t know one, but that you’d have to look at information published (usually) by the agricultural departments in various places.

Or, of course, you could crowdsource it. Thinking about that idea, I realised it was in some ways similar to Ravelry, the awesome knitting community and database of all things knit-related. Nobody used to have a huge collection of all the knitting patterns in the world til Rav came along. Then, by each individual knitter putting in their own projects and notes, the aggregate of all of it became a useful general resource. Now you can do a complex search/filter for exactly the knitting pattern or yarn you’re interested in, based not on a centralised authority, but on each person adding their own small part to the whole.

If we wanted to, people growing food in their gardens and allotments and on their balconies in containers could do the same. 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.

So, consider this a launch announcement. If this is something you’re interested in, here’s where you can sign up to be part of it: mailing list, Dreamwidth community. If you’re interested on any level please do join — we will need all kinds of people from coders to gardening experts to people willing to try out early versions of the site as we build it. As I talked about in my keynote today, I would really like this to be the sort of project where we don’t have false barriers between developers and users, but where every person who’s involved can be part of the process of building this thing together. And again inspired by Dreamwidth, I’d love to help anyone who wants to learn to code as part of this, regardless of prior experience. Heck, I’ll probably be picking up a newish-to-me language/platform for this, so we’ll probably all learn together. (That said, if you’re a Ruby or Python person with solid experience of medium-size-and-complexity web apps, and want to be part of this, let’s talk!)

Oh, also, a quick note… “harvest project” is my working title for this thing, but I guess we’ll need a real name and a domain to match at some point; if you have any bright ideas let me know. (ETA: we decided on “Growstuff”.)