stickies - v

stickies - v

Bitcoin Core Contributor, Host Of London BitDevs

Who are you, what do you work on, and how are you funded?

I'm stickies-v, funded by Brink to work on Bitcoin Core and related projects. My main focus is the bitcoinkernel project as well as general code review, and besides that I also try to help out with education and awareness, which currently mostly manifests by hosting the London BitDevs Socratic meetups.

What areas do you specialize in and what is your day-to-day like?

Most of my work revolves around contributing to Bitcoin Core and related projects. The bitcoinkernel project is currently my main focus, but I also contribute more generally to Bitcoin Core, mostly through PR review. I try to focus on projects that make Bitcoin Core more robust, safe, modular, and easy to maintain, but there is a continuous stream of interesting stuff that comes up and takes my interest too.

bitcoinkernel is a project in Bitcoin Core that extracts the consensus engine into a library so that it can be used outside of Bitcoin Core. The current work focuses on improving the interface so it is safe, ergonomic, and maximally exposes functionality that users would need. I'm involved with both authoring and reviewing relevant PRs, and I also maintain Python language bindings for bitcoinkernel.

My day generally starts by looking at my GitHub inbox, to quickly address comments received since the previous day, re-review updated PRs, and make sure momentum is kept on actively developed projects. Once the quick action items are out of the way, I'll have time to focus on more complex work. I often take a longer chunk of time (usually hours, sometimes days) to just dive deeper into understanding all the relevant/changed code or to study yet another C++ std-lib feature I'm not familiar with. With AI tooling being in the highly usable state it's in, it's also become really interesting and useful to quickly prototype multiple (sometimes radically different) approaches to solving a problem.

On some days (e.g. before a BitDevs socratic), I put the code review on hold and instead browse the internet (with usual suspects Delving Bitcoin, Bitcoin Development Mailing List, Bitcoin Optech) for interesting new developments, research, and releases to try and keep up with everything that's happening.

What was your entrypoint into bitcoin open-source software (BOSS)? What is your background and how did you get started?

Reading "Mastering Bitcoin" while on a long-haul flight really got me hooked on understanding the protocol better, and made me want to start contributing to Bitcoin Core. As a self-taught Python programmer, I had quite some upskilling to do.

I took a month to familiarize myself with the essentials of modern C++ and related concepts (like pointers) that still held a lot of mysteries for me. Once I had those basic comprehension skills down, I started attending the (then weekly) Bitcoin Core Review Club to slowly build my understanding of the codebase, and how the development process works. I also signed up for a couple of online Chaincode Seminars, with weekly discussion groups to cover protocol and philosophy. Besides a helpful place to learn, having this social component to it was a big push in keeping things exciting and fun, and to start building a bit of a network.

What has the journey been like to get to where you are now? How did you get funded for the first time?

About 9 months after I started (gently) contributing to Bitcoin Core, my BOSS "career" started when I was offered the chance to help with teaching and mentoring the first Qala (now BTrust Builders) cohorts, and then shortly there-after was offered a full-time grant by Brink to start contributing to Bitcoin Core, which I've been doing since mid-2022.

Each funding organization has different criteria and priorities. In my case, I think the most important drivers behind getting a grant despite not yet having a meaningful OSS track record were that I kept showing up consistently for multiple months, and that I tried focusing on being helpful rather than on being visible.

In my first months, I attended a lot of review clubs, and usually showed up with a decent amount of preparatory work so that I could meaningfully contribute to the conversation. My contributions weren't always correct, but it was clear that I did my best. Similarly, I made it a point to be reactive on GitHub: quickly responding to/ addressing comments, and following-up on and/or incorporating changes when suggested.

What is your favorite thing about working in BOSS (bitcoin open-source software)?

The freedom to work on whatever I think is important and interesting. While I generally try to help out with less fun work that just needs to be done, there is never a moment where I have to work on something that I believe should not be done in the first place.

I think it's quite unique to be able to contribute to a project that is serving such an important role, and still getting ample opportunity to learn along the way. Bitcoin Core's long-term focus and priority for correctness can sometimes make progress slower than what developers are used to, but I find it incredibly interesting to feel encouraged to understand changes in extreme detail, and to investigate alternative approaches - rather than just getting things done quickly and maybe fixing them later.

In my first months, I attended a lot of review clubs, and usually showed up with a decent amount of preparatory work so that I could meaningfully contribute to the conversation. My contributions weren't always correct, but it was clear that I did my best. Similarly, I made it a point to be reactive on GitHub: quickly responding to/ addressing comments, and following-up on and/or incorporating changes when suggested.

What are some of the unique challenges of working in BOSS? What are things that may sound unexpected to people outside of the ecosystem?

Always being responsible for setting your own priorities, goals, deadlines can be mentally exhausting, and overwhelming in the beginning. You're also largely responsible to be your own cheerleader. You might get a rocket emoji or a "nice work!" here and there, but generally speaking you're in charge of celebrating your wins (and learning from your losses). More autonomy has lots of upsides, but comes with its own set of challenges.

Because there is no roadmap or central planning, contributors cannot just be code-producing machines. Code gets merged when it is sufficiently reviewed, but because there is no one telling people what to review, it is your responsibility to facilitate and socialize the changes you're proposing. This generally comes down to 1) making review as easy as possible (e.g. adding helpful documentation, tests, good commit and PR hygiene, ...) and 2) helping people understand why your change is worth the effort, when they might not yet have all the context that you have.

The Bitcoin Core development process is slower than most other projects. It's crucial to not couple your own self worth to the progress of your project(s) too much. It's possible to do everything right, and still get stuck. When things don't progress as expected, analyze if there's anything you can do better, and if not - just shift your efforts to another important project that has more momentum.

How is this different from other jobs you have had?

I already had a high degree of autonomy in my previous job, but being a Bitcoin Core contributor at Brink has really taken that to a new level. It comes with many advantages, but also some inherent difficulties, as discussed in earlier questions.

The way I think about and look at code is radically different, too. The risk appetite in Bitcoin Core is very low. Every line of code (and its interactions) needs to be inspected in detail and fully understood. "Looks good" is not acceptable. In practice, this means I now spend an order of magnitude more time on building context, and a lot less on writing or looking at code changes. When I feel unsure, I'll let things sit to revisit them later with a fresh perspective.