I’ve been involved in various open source software communities since I first discovered Linux back in 1998. Back then it was Red Hat Linux, v5.1 that I first experimented with as an intriguing alternative to Microsoft Windows 95. Using Red Hat Linux quickly turned into all kinds of involvement in projects like Ubuntu, GNOME, Abiword, and various libraries that other software made use of.

I started the GNOME Journal, a now defunct monthly newsletter and community dedicated to deeper articles covering the exciting world of the GNOME desktop project. And it was from relationships made in this community that I eventually landed my dream developer role working full time on Ubuntu at Canonical.

Using and participating in open source software projects literally changed my life and set my career in motion long before I had any formal engineering education or job. I would be a different person today without these amazing free and open community projects.

Now let me turn the focus to you: do you intentionally use any open source software in your daily life? Do you have an open source community that you regularly participate in? Do you have a group of people from around the world who are all passionate about building great software together working on solving a specific problem? Do you have a place where you can learn from a group of very experienced software developers? If not, why not – what’s stopping you? Maybe you’ve never known how to find such a community, or you’ve never really given it much thought until now. Maybe it all feels overwhelming and you don’t know where to begin? I can empathize with that – there are so many options out there and it certainly feels like choice overload. In this post, I’ll explore this and other ideas and provide you with some practical ideas of why you should get involved, how to start and where you might begin.

First, a little history…

What is open source software and why does it exist? Open source software, or OSS, has been around for a while now dating back to as early as the 1970s primarily in academic circles, mostly because personal computing wasn’t quite an accessible thing yet for the majority of people. Back then the term open source wasn’t even an official thing, it was simply called free software. For a while, commercial and proprietary software dominated the scene until the 1990s with the advent of important projects like the Linux kernel, the Apache web server, Netscape Navigator (after converting from closed source to open). These are specific pieces of software that groups of individuals and developers at various companies work on collaboratively in order to solve certain problems, all while releasing and maintaining the source code out in the open for anyone to see, contribute to, or even build something new on top of. Read this fascinating Wikipedia page for more on the history on OSS.

Many companies and individuals have increasingly realized that solving common computing problems out in the open is not only good for whoever originates a particular software project, but is also very good for many others, including a company’s financial bottom line. Not only that, but many developers are also self-motivated to solve certain problems in various domains while working with certain programming languages or tech stacks that they otherwise likely never get an opportunity to solve or work with. How many individuals can create an enterprise-grade web server like the Apache HTTP server or Nginx, or a computer operating system kernel like Linux? The answer is, almost nobody because these problem domains are expansive and complex by their very nature. As open projects they provide millions of people with incredible value every single day for an incredibly wide array of applications.

Why it’s critical to be part of an open source community

So why do you even need to join an open source community project (or two, or three)? I alluded to some of the reasons earlier in this post, but there are several reasons that I’ll list out starting with the most important reason:

  1. You need a fun and low-stress place to practice your software development craft outside of your day job and the pressures of schedules
  2. You need a place where you can easily try new things – working with different languages, tech stacks, developer workflows, tools, project structures, etc
  3. You need a community of people who can “challenge” you to be better at your craft and to learn from, but without the politics so common on workplace teams (this is not to say that open source projects & teams are free from politics, just different)
  4. It sounds simple and maybe even a bit silly, but it’s an important one – you need a software project where you actually have fun working on it with other project members

Let’s look at these four reasons more closely:

You need a low-stress place to practice your software development craft outside of your day job and the pressures of schedules

If you don’t ever take the time to practice software development outside of your day job, especially outside of the constant compromises being made to deliver on a commercial software project schedule, it’s going to be challenging to become better at software development especially in the specific ways you want to grow. Why? I don’t mean to say you haven’t/can’t/won’t improve on your development skills at work, but it’s a very different growth journey than one where you’re fully in control of what you do, when you do it and at what pace.

At work you’re generally at the whim of the organization’s product roadmap or client project delivery schedule, using a specific set of languages, tech stacks, tools and processes. Working on an open source project puts you fully in control of what you work on and what skills you practice. Don’t want to work with Java using object oriented structure? No problem – join a project that uses a functional language like Elixir, Erlang, Haskell, etc. Not really passionate about creating truck shipping logistics software, or maintaining legacy software from many years ago in your day job? Again, no problem – find a project that sounds exciting to you using a language, a tech stack or solving a problem that you find yourself pondering about without even trying (more on this in the next section).

And as an added bonus, participating in an open source project becomes an open portfolio for you to reference as your real experience for any future developer job interviews. Thanks to commands like git blame, your name is literally attached to your work.

You need a place where you can easily try new things – working with different languages, tech stacks, developer workflows, tools, project structures, etc

I touched on this a little bit in the last reason, but I’ll touch on it a little deeper here. If you don’t care about what language, tech stack or software tools that you use, fine – skip this one. But I’ll also challenge you. My experience in many developer roles shows that it’s important to care about the tools you work with and that you absolutely enjoy them. This would be like a master woodcarver not caring about what chisel or saw or mallet or even wood that they use.

You don’t have to obsessively care about all of these things in your software development world, but you will want to know which ones make you excited and make your daily life easier, more productive and more enjoyable. If you’ve only worked with one language, one tech stack, one code editor or one way of organizing a software project in your career, you owe it to yourself to find an open source community project that looks interesting to you and gives you an opportunity to explore and learn from new ways of solving problems. I promise that you’ll be glad you did.

You need a community of people who can “challenge” you to be better at your craft and to learn from, but without the politics so common on workplace teams (this is not to say that open source projects & teams are free from politics, just different)

Working with a diverse set of people on an open source project is an amazingly effective way to grow in your development skills and learn from talented people that you might not have access to in your workplace. Not only that, but when you remove the competitive pressures of the workplace that come automatically with commercial software and client project deadlines, performance reviews, promotions, cultural pressures to work long hours to “appear ultra productive,” etc, software development drastically feel different.

If you used to love developing software but have struggled for a while to find that same energy you once had, joining an open source community is a fantastic way of reclaiming it. You’ll discover new people who have tremendous energy and passion for software development and you’ll discover many are also passionate about mentoring others like yourself to become better developers. Not only this, you can take your time and dive into any aspect of software development that you want to examine and practice more deliberately with others who are working on the same code.

It sounds simple and maybe even a bit silly, but it’s an important one – you need a software project where you actually have fun working on it with other project members

Even though this is the last reason I listed, it’s certainly an important one. Life is too short to not have fun and enjoy doing what you’re choosing to do. If you’re not having fun developing software today, being part of an open source community project is a great way to restore it. Again, find a problem area that you can’t help but think of anyway, something you’d want to spend your time on no matter if someone pays you or not. This is a good first sign that you’re having fun and your energy and actions can align.

Another good reason is that having a community that you want to be part of is also fun. Find people you feel comfortable talking with who treat you well – you’re more likely to find fun in this! Get to know them, ask them about their lives. We’re all starving for better human connection these days and the people already in open source communities are no exception.

Getting clear on what you’re looking for

Are you convinced yet that it’s critically important to be a part of an open source community project? Then it’s time to get clear on what you’re looking for and is the first and most important step towards finding one that works well for you.

Do you want to try out some new programming languages, tech stacks, software tools, problem types, etc?

Maybe the pandemic lockdowns and remote work have taken a social toll on you and you’d like to connect with a group of people while having fun writing software to solve an interesting problem?

Or maybe you want a chance to learn and master specific skills that are interesting to you, useful for your day job, or simply fun?

I can’t overstate this point – spend some time reflecting on what you want and make sure you can deeply resonate with these reasons. If you’re struggling to get clear on this, there’s no need to worry about it. Try some things, take some action – it’s one of the best ways to figure out what you want.

Finding a good open source project to join

Finding a good open source project isn’t as hard as it sounds once you know what you’re looking for. If you’d like to work on a project solving a particular problem using a specific programming language, start by searching for keywords related to it. For example:

rust driver temperature sensor

or:

elixir http client

or even:

blockchain open source community

This last example is a particularly good one that covers a more broad interest area. Again, make sure you’re clear on what you’re looking for and that you’ve written it down somewhere.

Other places where you can also search for a good project is to ask in relevant subreddits like this one on r/opensource, or search/browse sites like GitHub or GitLab, or even search Stack Overflow. Once you find a project that looks interesting to you, the next thing is to get involved in that project which is what I cover next.

Websites like opensource.com, itsfoss.com, OMG Ubuntu, or even newsletters focused on specific programming languages like This Week in Rust are all great places to become aware of exciting open source projects.

Getting started with a project

With a project in mind it’s time to dive in. But where should you begin? Start by returning to what you are most interested in. If you want to learn a new programming language and you’ve found a project that makes use of it, start by looking for an issue to solve from the project’s issue tracker. As a tangible example, I’ll use the open source community that I created as a place for my coaching clients to practice what we’re learning in our coaching sessions.

Let’s say up through this point in your software development career you’ve focused primarily on building web applications, but you’d really like to try learning about embedded/IoT application development because you love the idea of software interacting with the physical world. You also want to learn an exciting new language, maybe one like Rust. In my coaching community project, we have a development focus that fits this description and is called Edge.

A GitHub project space for my open source coaching community

At the time of writing there are two main source code repositories to point out:

Edge-rs is an embedded application that implements a client for sensing the surrounding physical environment, for example temperature, pressure, humidity, air quality, etc.

The other repository is a temporary one and is a primary focus for the community right now. It’s a proof-of-concept meant to help us practice embedded Rust while implementing a Rust-based ESP32 WiFi driver for the Raspberry Pi Pico. Eventually, we’ll turn this into a more formal and reusable Rust library (i.e. crate).

Take a look at the two sources trees in each master branch. Look at the current issues or project milestones on the wiki.

Or maybe you want to get into web-based development working to become an amazing full stack cloud application developer? Take a look at our community project called Ambi which pairs with Edge to form a complete IoT stack. Here’s some of what we’re focusing on developing right now.

Do you see anything you’re interested in? If you don’t or it feels overwhelming to you, go back to your reasons for joining a project and keep it simple at the beginning. There’s no rush – you’ll learn what you need to learn step-by-step.

Look for ways to get in touch with a real person from a community project you’re interested in. Does the community have some kind of chat server like a Discourse forum, Matrix server, Slack instance, etc? If you don’t see one listed on the project’s website or source code project site, is there an email address or other kind of form to follow up with? For my coaching community projects I use a Slack server. If you’re interested in joining the community let me know.

Now what?

Just get started, try some things and try not to let perfectionism prevent you from trying some things. Be open to searching for a good community for a period of time – you’ll be glad you experimented. If you’re struggling on your own, find someone like a colleague or a friend and ask if they’ve ever participated in (or still do) an open source community project and what their experience has been like.

I welcome your thoughts and questions you might have after reading this post. Please feel free to put a comment below and I or another reader can help you find a great project to join.

As always, thanks for reading and passing this along to anyone else that would find value from reading the Relational Technologist Substack.

Jim Hodapp is a technologist, creator, leader and strongly advocating for the relational perspective.

The views and opinions expressed are those of the authors and do not necessarily reflect the official policy or position of It’s FOSS.