It’s also, roughly, a year since I released the first prototype of KeystoneJS, the open source Node.js CMS / web application framework I created.
I was totally new to Open Source, and with no profile, followers or momentum I decided that committing to working on it every day (regardless of what I was doing commercially or personally) would be a great way to establish trust with other developers interested in using it. It was my way of saying “this isn’t just a throwaway project from someone you haven’t heard of that could be abandoned next month”.
It turned out to be so much more, and has been an amazing experience — definitely one of the best things I’ve ever done.
In the last year, Keystone has gained over 1,700 stars on GitHub, 260 forks, over 50 contributors, nearly a thousand followers on Twitter (@KeystoneJS), and is downloaded over 4,000 times a month.
We have used it to power websites and apps with hundreds of thousands of users in production, and other companies large and small are adopting it as a base for their own projects.
But the real surprise has been the impact that maintaining my streak has had on my life.
Most days its easy; I’ve got lots to do on Keystone, and love working on it.
Some days its hard; I’ve worked all-nighters, gone on a family holiday to China, or had nothing I can think of doing in the time I’ve got to do it.
But I’ve made a commitment so I do it anyway. And looking back, the hard days are the ones that have made the experience great.
When I’m not inspired, I’ll go through issues and find something minor that I can fix. Or I’ll write some tests. Or I’ll add something simple that’s been requested that I haven’t gotten around to while working on larger issues. This happens every day. And the great thing is the sum of all these little things.
This story wouldn’t be complete without explaining my wife’s support. About a week in, I told her what I was doing, and she was on board.
She’s seen the excitement when I think I’ve done something cool. And the joy when someone I don’t know submits a great PR. And the pain when I’m flat out and stressed and tired and need to do something in the next 30 minutes because otherwise I’ll break my streak.
Earlier this year, when we landed in China on holiday (and I thought I’d take a break) my wife challenged me about why I’m doing this, and encouraged me not to break my streak. She made me realise:
I’m no longer doing this to prove something and I’m not doing it for anyone else. I’m doing it for myself.
I’ve learned the power of sharing your work with others and becoming part of a community. I’ve had the opportunity to solve interesting and challenging problems. I’ve had the opportunity to give talks and workshops at meetups and conferences. And I’ve had the opportunity to meet (and collaborate with) amazing people from all over the world.
And now, almost every day, something happens with Keystone that just makes me happy. All because of something I created, and my commitment to it.
About a hundred days in, I found out I wasn’t alone. John Resig (@jeresig, author of jQuery) wrote an excellent post on his commitment to code every day and the impacts it has had (he is currently at 280 consecutive days).
These ideas aren’t actually specific to open source or even programming. If you have anything you’re passionate about — whether it’s writing, music, learning, or anything — committing to doing something every day is a powerful way to achieve it.
And it’s surprisingly easy. You get used to it. It becomes part of your rhythm. You get over the hard parts, and enjoy the result.
My streak won’t continue forever; I’ll have a proper day off again when I’m ready. But the experience has changed my life for the better, and KeystoneJS has taken on a life of its own with new core contributors, and major improvements in the works.
To celebrate, and to acknowledge that KeystoneJS is now the sum of many developers, community members and users, I’ve graduated it out of my personal profile and into its own organisation on GitHub.
We’ve got big plans for what to do with it from here. We’re rebuilding the Admin UI in React to enable developers to rapidly build web apps more effectively, and creating a whole plugin / customisation system. We’re abstracting common (or what should be common) functionality into separate packages. We’re going to enable model-based API creation with much less work, and a whole lot more.
I’m so excited about what we can do to make node.js so much more streamlined to develop apps with, as well as the teaching aspect of what we’re doing, that my wish for KeystoneJS on its first birthday is just that I can spend more time working on it.
In the meantime, it’s been a great first year!