My first contact with open-source was the same as it is for most people: using open-source projects. I’m too curious to stop at that. I wanted to know how these projects I’ve been using were written and which architecture and patterns they use. I wanted to debug its code so I could both use them better and learn to write my own software better. Open-source software allows me to legally look under the hood and read its source. In fact, it actively encourages doing so. It encourages people to contribute, implementing new features which matter to them, filing bugs, fixing bugs, writing documentation, helping other users, and so on.
That’s exactly what I did almost ten years ago. I started learning and using a Java Web framework, Apache Tapestry, in my free time, and then pushing its use at the company I was working at that time. I fell in love. I routinely read different parts of its source code and learned an awful lot from it. At the same time, I started participating in the project’s users mailing list. It’s part of my nature to try to help by sharing what know with others (at one point I was a part-time university professor), so soon I was not just posting questions, I was also answering questions and joining discussions about the project. To date I’ve posted 6624 times.
I started being a known name in the Tapestry world (small though it is). It was noticed by the Tapestry team. In 2009, they invited me to be a committer despite having contributed no code yet. As defined by the ASF’s internal process, there was a vote done by e-mail and I was approved. In the same year, I was also invited and approved to Tapestry’s project management commitee. In 2015, I was nominated and approved to be an ASF member.
Participating in open-source projects, whether the project is yours or not, is a very good way of advertising your own work and skills. Participation can include code, documentation, discussions and help for other people in mailing lists, forums and question-and-answer sites like StackOverflow. It helps growing your professional network to beyond the people you know in person and expands it to the whole planet, creating more opportunities. I call my own open-source projects “runnable CVs”.
This all led to . . .
Unexpected rewards, part 1
In the beginning of 2010 I was without a job and almost broke after a failed startup attempt. Looking at the Tapestry’s user mailing list, as usual, I noticed a job announcement post looking for a software engineer to work with Tapestry in Boston. I live in Belo Horizonte, Minas Gerais state, Brazil, with no plans to relocate, but I’d lose nothing but some minutes applying to work remotely, so that’s what I did.
The job was posted by Dan Adams, who’s also an Apache Tapestry committer and then one of the lead architects of PubFactory, at that time owned by iFactory and later acquired by Safari Books Online in 2013. This is not a coincidence: PubFactory uses Tapestry heavily in both its Web and business logic layers. I’d learn later that the only code contribution I had done to Tapestry for a long time, the URL rewriting support, is used by PubFactory itself. He answered my application asking for code samples. I provided him a link to my open-source projects in SourceForge (later moved to GitHub).
The interview was giving me access to PubFactory’s code repository and issue tracker and giving me a small but real bug to fix. I had to set up my environment, including checking out the source, creating an SSH tunnel for the database, fixing an XSLT snippet and writing an automated test with Selenium. I had almost no previous experience with many of those technologies but they’re all important for the work. In a field in which hiring is frequently done based on puzzles and other brain-teasers, the decision to hire me was based on work on a real project using the skills needed by it. It cannot get any more hands-on than that. I was approved and I’ve been part of the PubFactory team since then, having worked on projects for almost all PubFactory customers so far.
This also shows how much trust Dan had in me for knowing me from the Tapestry community. Some of my teammates got really surprised when they learned how my job interview was carried out. This trust was also crucial for . . .
Unexpected rewards, part 2
I’ve been working as a remote contractor in the PubFactory team since March 2010. Any contractor should know that the amount of work and earnings aren’t constant and you should be prepared for that. In 2012, I was informed that I’d have a very light load of work to the end of that year.
I always wanted to contribute more to the Tapestry code, but I could only do that in my scarce free time. I had just learned my free time wouldn’t be scarce for some time, so I had the idea of creating a crowdfunding campaign so I could work on Tapestry for one month (160 hours) instead of trying to find paid work to pay my bills. After asking the ASF community to check whether it wouldn’t break any Foundation bylaws and principles and receiving lots of very useful feedback, the A Month of Apache Tapestry 5 IndieGogo campaign was born.
To be honest, I didn’t have much hope to get the funding goal met. The deadline was at around 1AM. Before having dinner, few hours before the deadline, I checked the campaign funding progress and it was still far from the goal. I told Cristilene, my wife, the campaign wouldn’t be a success, but it was worth the effort because of all the positive feedback I got from the Tapestry community. A couple hours later, when I again checked the campaign status, I got a happy surprise: It had reached its goal! In the meantime, people in the mailing list donated and rallied others to do the same.
I believe the funding campaign success was the consequence of a couple factors. One was a very clear description of what I’d do, in the form of a list of tasks, each one being a bug, improvement, or new feature, so people could find one or more wishes to be satisfied. The other one, the most important, was a sense and opportunity of contribution, of giving back to someone who helped a project and its community. The campaign had perks including free hours, but few were redeemed. I’m very flattered and honored by the outcomes of this crowdsourcing campaign. I’m very grateful to everyone who helped in a way or another.
In the end, I worked 182 hours instead of 160 because an old pet peeve of mine, TAP5-2029 (Copy annotations from service implementation to proxy) took 8 attempts to get it working and the numerous corner cases covered. But I don’t mind. I had a lot of fun. I hope I have another chance to spend a month working on the open-source project I love.
What’s your life with open-source?
I’ve just made a summary of my life with open-source, so now I’d like to see a summary of your open-source experience in the comments. If you don’t have it yet, I urge you to experience it. Find the open-source projects that cover subjects in which you’re interested, learn them, help with documentation (which is an overlooked but very important aspect of any software), discuss them with other people around the world, read the source, find bugs, create patches, be a committer, and someday create your own projects. In other words, get involved. The ASF pages about this are a very good starting point, even for non-ASF projects. And, of course, Safari Books Online has an abundance of books and videos about open-source software.