Earlier this year I started an open source game "company," Dancing Vikings, to help me learn more about code and programming for the web and I thought it would be good to do a post on the things I have learned and experienced so far. I'm planning on doing this at least quarterly to recap recent things with the project. This way I can share all of the things going well, not going well, I'm learning, and what I need help on. Plus, commiting to writing about it will help me to keep at the project as well since if I don't do it i won't have anything to write about. :)
Firstly, I want to say that it has been a lot of fun and I have gotten some great responses from people who have thought about doing the same thing and use making games as a way to learn to program. I think there is this stigma that if the application isn't about something serious then you aren't serious about being a developer and that's just ridiculous. Just because you are making a game doesn't mean you aren't solving real problems that take real skill to get done. If having a fun project makes you more excited about working on it then you are absolutely going to learn more and remember it than if you were building a todo list that gives you weather based on the location of where you made the todo with an admin panel. Also, making a game takes a lot of the soft skills you need to be successful in any career. You are going to get feedback from the people who play your game and you are going to have to work with that feedback just like you would in any job.
Starting an open source project has also shown me all of the work that goes into just getting it off the ground. Holy moly there is a lot to consider! I'm not surprised by this and it is a good thing to go through this experience, but it still is a lot. It gives me a new appreciation for anyone working in open source as a maintainer of a project. I have never made a CONTRIBUTING doc or implemented a CODE_OF_CONDUCT before. Either of these alone involves a lot and it took me awhile just to get those going for the first game. You have to ask yourself a lot of questions.
- How will pull requests be handled?
- Is that how someone will contribute new code?
- How will you validate them and what are your commitments to them?
- How long will you take to respond to them?* Do you have tests for your project? If so, how does one run them?
- How will someone report issues? How will those be handled?
- How will someone report inappropriate conduct?
- How will you respond and handle the report?
- What are your commitments to those that report conduct issues?
- What is the right license for the project?
I could probably go on and this doesn't really cover everything, but what I'm trying to say is that there is A LOT to think about if you are looking to start an open source project, specifically one where you will be working with others. You owe it to yourself and the people who could join you to have this stuff thought out, so that you are ready when the time comes, especially if the eventual issue happens where you have someone treating others in the project inappropriately. You don't want to fail those people who are being hurt by someone being shitty.
Working on the first project has helped to change my perspective on writing code. I no longer think about projects as just something I am doing, but instead something I am doing as part of a team. I'm used to working on the master branch because I am the only one working on the project. Now, I am making branches for the features I am working on so that if someone joins me they can start their own fork and work without me getting in the way. I am getting a much more real world experience for a git workflow and that is super exciting.
This project has also helped me to stay on task and remain committed to what I'm doing to get the game completed while also reminding me that it is okay to not work on things. I am trying to keep work moving forward and make progress, but I also have learned to forgive myself about not working on this project. I want to learn more about code and make games, but I also want to be a good father, husband, friend, and human being to those in my life. Sometimes that means not sitting down in front of my computer and being okay with that.
The project has hit some cool milestones in the first three months.
- The project has gotten its first pull requests! Yay! They were both on the website for making sure the footer uses the correct year for the copyright date. Fun fact, the pull request was done by someone who had never contributed to open source before and it was their first pull request ever! I felt very honored to have my project be the first place for them to contribute to open source.
- Development of the first game was begun! It is called Monster Dungeon Danger Quest and is a text based monster fighting game that uses a chatbot.
Here is a lit of a few things that I came across which helped me to get started working on this open source project.
- opensource.guide - a site made by Github with a ton of resources to getting started in open source, including starting a project.
- opensource.dev - a similar site as above made by Google with their thoughts and perspective on open source.
- The Definitive Guide to Contributing to Open Source - a freeCodeCamp article on open source contribution.
- Contributor Covenant - great resource on creating a code of conduct for your open source project. It even has links to an npm package to help you generate one.
- Choose a License - awesome site to help you choose a license for your project. Not sure if your project needs a license? They have info on why, but the simple answer is yes, yes it does.
Have you worked on an open source project this year? I'd love to hear your thoughts on being a maintainer, a contributor, or however you are being part of a project. Do you want to join my project? Let me know and we can find somewhere for you to get started.