Spree, Ruby on Rails Guides, Rboard, Forem, Discourse, by_star, Summer, Helpa Bot, Logs, Paranoia, Twist
What project or projects do you maintain and what was your motivation for creating those projects and releasing them as open source software?
I stopped officially maintaining any open-source projects back in November last year (2015) because it was taking up quite a lot of my free time on weeknights / weekends and I wanted to spend time with my friends / family.
So, currently, I don’t maintain anything!
I’m probably best known for maintaining Spree for a few years (2011-2014), my Stack Overflow addiction and my extensive contributions to the Rails documentation: re-writing the Getting Started guide and writing from scratch a few other guides like the Getting Started with Engines guide, and the Active Record Querying guide.
I also wrote The Asset Pipeline Guide after David Heinemeier Hansson (DHH) asked me to “put on my big boy pants” and also “what had I ever contributed to Rails?”. This was after I had made several hundred commits to Rails’ documentation! DHH is a funny guy.
The first open source project I created was called rboard, which was a forum system written in Rails. I saw there wasn’t an open-source forum system for Rails and so I thought I’d create one and share it with the world. The project is so old that it was originally hosted on Google Code! I resurrected an older version of the code from Google Code before it shut down and it’s now on GitHub.
Rboard was my first ever “serious” Rails project and the code definitely shows that. I figured if people were to use it or contribute to it then they would improve the code. It didn’t really take off the way that I expected it to, but it was a fun hobby project and taught me a lot about Rails.
Later on I went on to rewrite this project as a Rails engine called forem. I really think Discourse has a much better developed system, and so both rboard and forem are really only good for proof-of-concept demonstrations… not production usage!
Forem was also where I worked on a lot of the concepts that I put back into the Getting Started with Engines Rails guide.
The next big open source thing I worked on after rboard was by_star. by_star was originally designed to make it easy to find records for a given year, month, day, range of dates, etc. The intention of that project was to reduce the ugly SQL syntax for finding records between a given range of timestamps into something more Ruby-ish. That particular project is now maintained by johnnyshields.
This project has definitely taken off and would be one of my more successful projects.
I also created summer, which is a tiny bot framework for IRC. With this framework I run the helpa bot for the #rubyonrails channel on Freenode, which logs to another project of mine called logs. That logs project was originally a Rails app, but I rewrote it in Elixir+Phoenix as a part of my learning process for Phoenix. Interestingly, the Phoenix application is about 10x faster than the Rails app at rendering the messages. It’s online at logs.ryanbigg.com.
I’m also responsible for paranoia, a gem that handles soft-delete for Active Record. I wrote it because I felt
acts_as_paranoid was over-engineered. I have since come to realise it was over-engineered with good intentions :)
On the non-gem front, I’ve also written Twist, which is an open-source book-review project built specificially for Leanpub’s Markdown. It was originally written to support Manning’s Docbook, but since I write books exclusively on Leanpub now, it only supports their Markdown.
The purpose of the application is to garner quick feedback from beta readers of the book. Readers leave comments on “elements” (paragraphs/images/etc) of the book, and I can then quickly read through those comments and attend to whatever typos/mistakes/inconsistencies users have pointed out.
I’ve considered making it a Software-as-a-Service offering, but it’s really a niche-of-a-niche: Leanpub authors who want quick feedback from their readers! So it’s probably not worth starting it up.
I’ve also written some of my own guides which are on my guides repo. These cover things like gem development, using Warden in a Rails app, and so on.
If you created any of those projects, were they meant to solve a specific problem you faced, or were they born out of a larger opportunity you saw?
I think I answered this above, so I’m not going to answer it here as well.
How has the project evolved since you first got involved or first released it?
Depends on which project you’re asking about! I’m going to talk just about Spree here, since it’s the biggest one I’ve worked on, and the one I worked on for the longest time.
Spree’s evolved from a Rails application that you’d clone and then build on-top-of, to a combination engines that hang together on top of your Rails application. The community was growing at a rate of 1.5x-2x during my tenure, but I don’t know if that rate of growth is still happening, as I don’t follow it as closely these days. The community around Spree was very strong. We even had conferences all around the world!
We had a ton of contributions from users in the form of GitHub issues / PRs, and user group discussions. It wasn’t uncommon for me to go to bed and then wake up with 200+ new emails from Spree related projects / mailing lists in my inbox.
During my time there, Spree was picked up by some larger companies, including one that has this ginormous surf clothing / associated goods warehouse in London, and another which sells fancy matresses.
There’s also shop.abc.net.au which is the app that I worked on that got me involved with Spree in the first place. ABC is the Australian equivalent of the BBC over in the UK, it’s a very popular public broadcaster.
It’s nice to think that software that I wrote and maintained is powering all these different stores across the world.
I parted with Spree (the Company) in 2014, and shortly after that Spree was bought by First Data. Spree (the Project) fell into disrepair, but then was picked up by the community as Solidus. That looks to still be actively maintained and there’s a very healthy community around it.
How do you spend your time on those projects? (i.e. Developing, managing the community, triaging issues, etc.)
When I was working at Spree, it was definitely this order:
- Managing the community
- Managing the community
- Managing the community
- Triaging issues
Managing the community takes up a huge amount of time, as the community always has questions that need answering, and you need to take great care to ensure that they’re looked after. If you don’t do that, then they’ll go somewhere else that can provide that level of attention that they need.
Triaging issues comes next, because those issues often show the bugs of the system or how people are struggling with using it, and that can highlight some places that need documentation. Triaging issues in a timely manner shows to the community that it’s worth their effort to file the issues in the first place!
Development definitely comes last, as it’s much more important to keep the community happy than to endlessly develop in your ivory tower. What I used to do at Spree was prioritise community management and triaging for a few days a week, and then 1-2 days of that week I’d focus on development. It felt like a good way to separate out my time and it meant that I didn’t need to context switch between “Ryan the Community Manager” and “Ryan the Developer” very often.
For the smaller OSS projects, it’s flipped:
- Triaging issues
- Managing the community
Newer OSS library need those features to attract users in the first place. Then when you’ve got those users, they’ll almost certainly use your library in a way you didn’t think of, or they’ll encounter a bug. Again, triaging these issues in a timely manner is important.
Triaging is a separate thing from actually dealing with the issues. My typical triage process is:
- Verify that the issue posted is actually an issue, and not a mis-use of the library.
- Ask the user for a pull request to fix that issue.
- Attend to it myself in due time if the user hasn’t submitted a PR (which may be weeks or months later).
I intentionally push back the work of the OSS project back to the user, as trying to do all the work myself is not maintainable over the long term. In doing so, I’ve actually learned some tricks in Ruby that I would’ve never thought of myself, so that’s nice too.
How would you describe the community around projects you participate in? What are your favorite and least favorite aspects?
Spree/Solidus has a massive community around it. Thousands of stores all around the world using it, and so many developers who needed support in building their stores. The community was often very good at supporting itself, and I enjoyed that aspect of it. Everyone is nice to everyone else, and it’s a very welcoming community. It’s exactly what you’d expect of a niche-of-Ruby project; the MINASWAN ethos in practice. That would have to be my favourite aspect.
My least favourite aspect is the raw entitlement of some users, as well as their irrational anger that your software could contain a bug.
The entitlement goes like this:
- I have an issue
- Here’s some steps that might reproduce it
- I expect you to fix it, quickly
- I will hound you if you do not fix it
This entitlement can burn out lots of OSS developers. On projects that I maintain, I try to keep a level of niceness in my replies. However, the entitlement and the irrational aggression of other people does get to me.
One day, I got so annoyed at one very entitled Spree user to the point where I got called out by Sean (the CEO of Spree Commerce) for being too aggressive with this guy. He kept it up for half a day, and I just gave up. Closed my computer and decided to go for a ride on that beautiful sunny day.
5 minutes into my ride, a car turned in front of me when it shouldn’t have and I superman’d over the handlebars of my bike, breaking my left arm just below the elbow in the process. I was in a sling for four weeks. I couldn’t type for two days, but then worked out a way around that.
Breaking my arm was definitely one of my least favourite aspects of maintaining Spree ;)
Despite the entitled/angry users, the thankful/happy users make it so worthwhile. When you go out to a conference and find out that someone is using software you built/maintain and they’re happy with it… that’s a pretty great feeling.
What keeps you involved in those projects? Do you have long term plans for maintaining your involvement?
Well, I’ve officially quit all open source projects and the maintainence of those falls to whoever wishes to maintain them. I’ve posted on all my projects asking for volunteers if anyone wants to maintain them, and some of them like by_star and paranoia are still being actively maintained by others.
My ideal long term plan is that I don’t have to maintain any open source projects during my free-time. It’s a time sink, and very often other people are benefiting off my hard work. Previously, it was a good way to build up a reputation in the community, but I have one of those already and do not need another. I would rather do work that I could benefit from.
This is how bad FOSS abandonment is right now:
I get where he’s coming from, but it’s a bit crap that he felt he had the time to tweet that, but no time at all to help triage some of the issues. So to prove a point, I’m helping Sven triage the i18n issues with the idea of doing a 0.8.0 release early next year.
I’ve also recently released chronic, which is an Elixir port of the chronic gem, and that gets some issues too which require triaging. In that same basket is elastic, a lightweight ElasticSearch package for Elixir that I’m using at work.
What would keep me involved long-term in maintaining open-source projects is being paid for that work, like what I was doing at Spree.
What is the most important thing someone submitting an issue or patch should know?
Steps to reproduce your issue is seriously the most valuable thing you can give a maintainer. A patch to fix the issue is a close second, but steps to verify that the issue actually exists is absolutely important.
What’s your development environment right now?
I use a Mac because everything Just Works™. Most of the things I use are installed through the Mac App Store, or Homebrew.
Although just yesterday I found out about
brew bundle dump which will generate a
Brewfile which lists all the things you’ve installed in Homebrew. If you get a new machine, you can
brew bundle and it’ll re-install all the things listed in the
I develop and write in Sublime Text 3 exclusively. I tried Vim (through MacVim) but I found the UI too clunky, and it would hang at unreasonable times. ST3 doesn’t do any such thing and it supports all the Vim shortcuts that I know of. Best of both worlds!
Coding is typically done in Elixir these days, but it’s been very heavily weighted to Ruby for about the past 10 years. Both Elixir and Ruby have wonderful tooling for developing in. I developed in Go (while I worked at LIFX), but found the tooling around package management difficult to work with. I did enjoy that it compiles down into a binary that runs across systems though!
Terminal’s iTerm2, browser is Chrome. I use Slack to communicate with my teammates and friends. Airmail3 is the app I use to ignore all my emails and build up a lot of anxiety around replying to them.
Wunderlist is very helpful in organising all aspects of my life, including development. For dev, I have a TODO list there that I write things into so I don’t forget them or set reminders about.
I wouldn’t get any work done if it wasn’t for Spotify and its massive collection of music. My Audio Technica M50x headphones help with that too.
What was your first development environment? Do you miss anything from it?
Ruby support on Windows is dreadful. Command Prompt is as it was in the 90s. I haven’t used a Windows computer for serious development in over 10 years. Nothing about them appeals to me.
I used Ubuntu for a time, but after it asked me to recompile my kernel for the 252nd time after my graphics drivers were updated (automatically), I went and bought a Mac.
Where do you see the open source software community headed?
The thing with future predictions is that they’re often envisioning a magical fantastical utopia, whereas in reality it’s more like “things carry on as they always have, but a smidge better”.
So the magical fantastical utopia scenario first: open source developers are fairly compensated for their time by the companies that use their software and/or the companies they work for. hahahaha it’ll never happen. Why pay for it if it’s already free?
So now onto the “things carry on as they always have, but a smidge better” scenario. OSS communites, in the grand scheme of human society, are fairly new and so they’ve only had one BDFL for their lives. See: Linux with Linus, Ruby with Matz, Rails with DHH (bless), Python with Guido, PHP with Rasmus, etc. Who will hold the keys after these people move on? Who will be the new BDFLs? That’ll be interesting to see how the communities carry on.
More people are coming to realise that the maintainers of OSS projects today, may possibly not be the maintainers of those projects tomorrow. I’m looking forward to there being more discussion around how these OSS projects are maintained for the long-term.
Also looking forward to the compensating-open-source-developers-for-their-time discussion too :)