You want to contribute to FAF but you're unsure? You think you lack the skills? Well then read on, todays blog is for you! Even though it's a story about developers, it applies to all contributors! (Also watch my YouTube tutorial on how to start contributing).
I want to tell you 2 independent stories about 2 very different developers:
I once met a Java developer at a party in his late twenties who was working in a software consultancy for a few years. From a trustworthy source I knew he was quite talented and he was very unhappy about his salary. Back then my company was looking for developers, so I approached him and asked him about his skills. So he was doing mostly Java frontend (ugh, not so modern) and regular backend stuff. I told him that my company was hiring. Of course he was interested, so I handed in his application.
I met him again before the interview and talked to him. I said "Dude, I saw in your application that you have no experience in software development in the cloud with Kubernetes and Docker and all the fancy shit. I have this open source project called FAForever. I could show it to you and explain you a lot of stuff before the interview." He declined and I asked why. "Well, I spend so much time at work, I don't want to drag it into my own personal life, but of course I will say I'm eager to learn it on the job." He was not hired.
Why am I sharing this story? First of all, I'm not criticizing here. It's an absolute fair point to strictly separate your personal life from your work life. I'm sharing this story because it shows, that not every developer has the same mindset about learning in his free time. It's also obvious that it's not the skillset alone that makes a developer suitable for FAF.
Let's take another example. A few years ago there was a dude lurking in the FAF Slack offering help. He knew FAF for quite some time as a player, but recently stumbled over the open source project. He had a vision of bringing back Galactic War, but he had only basic programming experience. But was experienced in database queries as he was working as a consultant for ERP systems. He offered some help on administrative tasks on the server, e.g. running manualy queries (a lot of work was done directly in the database back then), helping on patch days or keeping an eye on the less-important software like the website.
Over time he gained more and more responsibilities and even started more and more on development. But man, did he fuck up things. One day he wanted to backup the website before an upgrade and gzipped all files, not knowing that the gzip command deletes the files afterwards, which resulted in afew hours downtime of the website. Or when he tried to fix some server permissions and locked out the MySQL database from its own files. But he learned. And read docs. And improved stuff. Step by step. He didn't do it all on his own of course. He was mentored by one of the reigning DevOps councilors back then.
After hundreds of hours spent on writing code and scripts, analyzing bugs, dockerizing aps, migrating servers, building/replacing/configuring software he became well sufficient with the way of software development, that he applied for a software developer job. Even though he had no commercial track record, his knowledge on software development and the cloud related technologies (e.g. Docker) was good enough, that he got the job anyway. In the same year, the dude became DevOps councilor. Some of you might have figured it out already: That guy is me. Hello!
So why am I sharing "my FAF life story" with you? Because I wanna show off? Well... maybe a little bit But moooore important in my opinion there are some key learnings that I want to share with you:
I hope you didn't get the impression that you need to spend hundreds of hours to get into FAF. You don't need to, if you want to contribute in one area. And nobody expects you to.
The most important thing is, that you have fun. I have seen many people leave because they lost fun by overacting. For me it was worth it and it was fun to spend the amount of time. Since I have a kid I have to make more and more cuts in my FAF time. That's also one of the reasons why I am trying to motivate you to become the next generation of FAF developers. The one day will come when I want to pass the baton.
Some people claim that FAF is just a playground for developers, so that they have some cool technology to play with for their resume, while breaking important features for the playerbase. While I can't deny that we use our result for resumes (well I wouldn't have gotten job without it), I can assure you, that we do no play around in terms of "resume driven development".
I am playing Forged Alliance for a long time. I bought the game when I was 12 or 13 I guess. I was always interested in Informatics and programming. I think it did some first programming when I was 14 etc. but really only small things. I think often I was just missing a goal right? It is often easier if you have a concrete goal you wanna reach. I was 16 or 17 when I learned what GitHub and Open Source was. Suddenly I wondered if FAF was Open Source. So I just went ahead and searched for FAF on GitHib and who knew all the project where there.
So I looked at the client and it was python and that would have been fine cause I knew some python. But I discovered Downlord's-FAF-Client on GitHub. I had never heard of it before cause I was not really to invested into FAF. I just liked playing FAF, I did not engage into chat/forum or whatever there was. And I was shocked, it looked really good and worked, even if I need to admit it used to break a lot cause of external changes that did not consider it. And Java was maybe even better than Python I just liked it more. I really did not know much Java, I made one or two little things and knew the very basics. The thing that was different from before was I had a goal. My goal was to part of this awesome thing. Also this client seemed really major and this kind of made me want to spread the word about it.
@Downlord also had some wiki pages about the project. He had a list of technologies and also one to a chat with contributors. Also he offered some help to newbies.
Was a lot of work to get going cause the Java client is quite well engineered and uses a lot of technologies. But I made some Pull Requests(suggested changes) even if it took like 5 rounds of @Downlord requesting changes it worked out in the end. Over the years I contributed quite a bit.
I learned so much from @Downlord and others like @Brutus5000 , which I am really thankful for. Meanwhile I started studying Informatics at university and I am almost through. My plan was studying Math for some time but my positive experience at FAF made me study Informatics.
This year I have been the main contributor to the faf client.
My experience(not only FAF but mainly FAF) gives a huge advantage over other students, who in parts don't really know programming or software development looks like. I also had 3 jobs in software development besides my studies which I might not have had if it was not for FAF.
No skill is required to start doing stuff at FAF. The only thing you need is passion, motivation and dedication.
Thank you both for sharing. These were both verry insightfull on how you got to where you are are in faf and in IRL. With me hopefully feting back to uni in September next year in computer science I will have more of a understanding on how faf work on the software side and be able to lent more of a helping hand with the code rather than just saying this is not working in zulip
Thanks for sharing, I have been poking around on the GitHub page to see where I can contribute (mostly with the Python client and database help) I don't have a lot of free time between full time work, University and family but want to contribute where I can. This community I feel is pretty good. One thing I am struggling with though is understanding the architecture (physical and software) of FAF I haven't been able to find much in the way of documentation, is anyone able to point me in the right direction as for me this would be really useful in getting started with contributing.
The hardware is not that relevant as it is exchangeable. All applications are run with a large docker-compose. The related repository is faf-stack