This post won’t talk about the technical side of contributing to Gutenberg, you can find many resources online about Gutenberg or Open source in general, it will talk about my personal experience contributing to Gutenberg.
Contributing to Open source
I usually do small volunteering workshops, teaching high school & college students about web development & design, most of the people attending them want to get into freelance as I did, the golden rule I always give is to actually apply what you learn, but doing work for free for other people is no bueno for me, so how do you find work to learn and make yourself visible without working for free, well there are three ways:
- Teaching people.
- Personal Projects.
Seven years ago, when I started learning, all of my time went into teaching people in technical forums & social media, it seemed to me like taking abstract ideas & breaking them down was very easy, and that’s how I started and got my first project from.
There is also Open source, there, you can teach people (answering issues) and write code (pull request) and learn how other people solve complex & specific problems that a 1000 tutorial won’t teach you (reviewing pull requests), and that’s the best way to learn, so my new Golden rule to while getting experience is:
Contributing is not straightforward from the get-go, and contributing to large projects is very intimidating, there are a lot of moving parts, at the time of writing, Gutenberg has over 10k commit and around 7000 closed pull request and 7000 closed issue and Gutenberg is 2.5 years old only, as one guide described it: “contributing to open source is like walking up to a group of strangers at a party”.
But I would still argue that going small in large projects is much easier & beneficial than going big in small projects, there are some reasons:
Large projects have:
- Better testing around.
- A contributing guide.
- much more activity and the likelihood of getting an answer (debatable from project to project).
- Strict coding standard.
- Easier entry points (good first issues & good first reviews).
The list can go on, the point is, you will learn a lot of complex things in large open source projects, problems that you might find in your professional life, bugs that big companies already have or might have, deeper understanding of the tool/project, and much more understanding of collaborative work.
Starting my Contribution
It all started when Riad Benguella, a core & lead developer at Gutenberg & Automattic, neighboured me in the coworking space I work from, the coworking was new so it was just the two of us talking in that area, I was familiar with Riad since he’s a famous developer in Algeria (despite him denying that 😅). I was intrigued by the concept of working in open source full time so we talked a lot, my experience in contributing was mainly answering questions in help forums & slack channels and translating WordPress core & plugins to Arabic, I’ve never done any code contributions, so I asked him if there’s something I can do, he told those steps:
1. fork Gutenberg
2. install it
3. Search for Good first issues
4. Select one
5. Fix it.
I should note that he outright refused to help me face to face, the only interaction about that pull request is what you see in it, and I’m very thankful for that, because by putting there alone, with other people, is the only way I can get comfortable (also, no special treatment like that)
Asking For Help
While Large projects like Gutenberg have very detailed documentation, not every line is documented, and you can’t know every possible standard from the get-go, so asking for help is very common, as @shaunagm said:
If you go to an issue tracker and things seem confusing, it’s not just you. These tools require a lot of implicit knowledge, but people can help you navigate it and you can ask them questions.
I’ve already made a decision to only ask Riad as a last resort (sometimes I slip), it’s quite easy to ask someone who can reference components & PRs by heart, and is a couple of feets away from you, but there is no learning in that, and besides, this has given me the chance to actually meet some wonderful people, asking for help is done via #core-editor, #core-js & #design in Making WordPress slack group.
As for getting feedback on something you’re working on, your best bet for maximum feedback as @paaljoachim said is to wait for the weekly #core-editor meeting held every Wednesday, 02:00 PM GMT+1, I managed to get some amazing feedback on each occasion, showcase what I was working on, and get some really great words of encouragements.
Learning New Things
Before starting with Gutenberg, I felt really confident about my abilities, I was comfortable with React and was used to working with it, I was more than comfortable working with WordPress, years of building plugins and third party integrations give me some confidence, but that confidence went away the moment I started, everything was new to me; if you’re going to contribute directly to Gutenberg core, then it has a steep learning curve (at least in my case), while you can easily solve small bugs, once you get to complex or large stuff, there is a lot to learn before you can start, so many abstractions to get your head around, and the data model, while built directly on top of redux, is not strictly redux, initially, those stuff seemed hard to me, but with some playing around, fantastic articles about
withSelect from Riad and its follow-up by Darren about
useSelect I managed to wrap my head around it, now I found those abstractions a real game changer, they give a huge productivity boost while being confident that everything will work right, the data layer also made playing with global state an easy thing to do.
The state in which you find yourself between so many developers that are way smarter than you, and who are so willingly open to help, is both intimidating & wonderful. Every time I feel like I started to understand things, I discover that I’m way behind, but to have the chance to be around such people is also a goldmine, I learned in a couple of weeks what I couldn’t learn in months while working solo.
My favorite thing to do is reading pull request discussions, you wouldn’t believe the amount of information you can find in a simple PR, I admit that I kinda avoid monstrous PRs with hundreds, sometimes thousands of line changes (even though I should read them), I mostly target medium to small PRs, sometimes I review them myself, just to have another core member point out so many things that I forget, and that’s basically free learning.
I’m Actually happy
I left my work as a freelancer two months ago after 6 years, one week before starting contributing, I left it because I get burned out so much that I couldn’t continue anymore, I was unhappy, feeling unmotivated, with clients that didn’t pay, and generally depressed. I would wake up every day, go to the office, and be unable to do anything for the whole day, sometimes I can work for 15 minutes or half an hour, but that’s it. Today, while writing this article, I just realized that I’m happy now, I feel more productive, I started working for almost full time on Gutenberg, I can get to my desk at 8 am and work all day, I’m still getting around the codebase so my output is not big, but I’m still proud of what I’m doing, when I built the snapping to grid prototype I stayed working on it till 3am, and you wouldn’t believe my immense happiness when Matt showed it on WordCamp EU, joining the weekly meeting and having people being excited about what I’m currently working on, it’s small things like a simple emoji reaction on slack, or being listed on the release changelog that made my week. I might be broke & running out of savings, but I’m definitely happy.