Contributions from the community are one of the main driving factors of innovations and progress in the software development arena. The languages and tools would never flourish in the same speed without people contributing just from a sheer passion for software and satisfaction of giving something back. In this article, we will take a closer look at one of the most direct ways of helping fellow developers. StackOverflow (SO) offers that option as well as keeping the win-win situation, where the contributor benefits tangibly as well. This is in the form of reputation points and badges that you gain as you answer more questions. It is always nice to be able to keep track of your impact.
In this article, we will take a closer look at how SO is one of the best ways you can contribute to the community.
The Contribution Options
The most basic way you can start contributing to the community is by acquiring knowledge using the most traditional sources. That is books, courses and certifications. Where is the actual contribution in these actions you might ask? There is a lot, in fact. It is implicit, though. Software Developers are team-based creatures (if some are not, they better start having that mindset). Every time you gain additional knowledge and raise your skill level, you are going to pass it to your teammates in some shape or form. Whether it's through code reviews, during pair programming sessions, internal tech-talks or simply during coffee break chit-chats. By the way, do not fall into the mindset that it is a nerdy thing to do. It is not. Doctors talk about those latest medical discoveries that can revolutionise the treatment of certain diseases, lawyers are discussing those newest government regulations that will impact their cases. We, Software Developers, also talk about our craft and are proud of it. Just as all other professionals are. Case closed.
Global knowledge-sharing options that are indirect include blogging and vlogging. They are great for the creator as well, as writing a blog post or a YouTube video requires a bit of research, and naturally, we expand our knowledge on a given subject. They are also a massive benefit to the community. Your take on some niche subject may shed some light on a problem, that a team on the other side of the globe is facing.
Open-source software contributions are more towards direct help, but still not fully. You do not help an individual developer or a team directly. By contributing you enhance the current experience of working with a particular library as well as extend its longevity by making it more adapted to the current needs and standards.
SO contributions are as direct as you can get them. Questioner, explains her problem, ideally shows their failed attempt on solving the problem and asks kindly for some help. Help is the keyword here, not the reputation and badges that I have mentioned in the introduction. If you focus on the help part and simply have fun solving those (sometimes hard) problems, then you are on the path to becoming an established and fulfilled SO contributor and software craftsperson!.
The SO Do’s
Pick your niche and stick to it… for a while
There are thousands and thousands of technologies, libraries and frameworks for which the questions are asked. It is impossible to get to any reasonable level of mastery in even a fraction of them. You have to pick your weapons smartly.
In my opinion, the process starts with a sort of discovery phase. Try to select around ten tags that you are familiar with and another ten that you would want to get better at or simply explore. Then get into it. After some time, you will figure out a combination of them for which you are delivering quality answers and on which you simply enjoy working on. You should end up with five to ten tags that would be the core of your filter. I would advise though on replacing a tag, every couple of months with a different (or related) one. Thanks to that you will always have some new questions, which you have not seen before. For example, my current stack is the following:
[unit-testing] or [junit] or [jpa] or [spring-boot] or [hibernate] or [angular] or [spring-data] or [spring-data-jpa]
Just a final tip on this one. Try not to add top-ten tags in your filters like java or jquery. You will get flooded with too many questions. On top of that, non-detailed tags like these are very competitive and hunted for from my experience. They are answered very fast a lot of the time, so the time frame for you to react would be tiny.
After contributing for a while and staying within the boundaries of those five-ten specialized tags, you will start to notice that there are a bunch of questions that are repeatedly asked. You will be tempted, mostly by laziness, to hunt for these questions only. They are easy prey and a source of reputation, so why not, you might think to yourself. Although tempting, try to get out of that mindset. It would be similar to beating a game on god mode. There is simply no fulfilment, no source of achievement. Why bother doing it again? There is no incentive, and before you know it, you go back to being just a “reader” on SO. Changing your tag filter slightly every couple of months, will give you the steady torrent of new and challenging questions and problems. The boredom will not overwhelm you that easily, and you will keep on helping other fellow developers.
Keep on setting those challenging goals
This is an optional one, but it helped me to keep going many times. As with any other life endeavour, it is advisable to set specific goals for yourself. Tangible goals which are ideally written down somewhere. Not too many and tough ones as you will get discouraged pretty quickly, but also not too easy as you might lose interest and abandon whatever you decided to do in the end. In my opinion, the best option is to continually keep on setting those challenging but approachable goals. For a start, 1000 reputation points seem like a good target to aim at. Once you achieve that, you should set another goal immediately. An excellent option would be to try and obtain a bronze medal tag, for example (100+ up-votes). On SO, there is always something to achieve. Either it is directly related to reputation, or something completely unique, like the Necromancer Badge (answer a question 60 days later with a score of 5 or more). SO creators have figured it out pretty nicely. The questioners receive direct help from all over the world, and you receive fulfilment, a confidence boost and a bit of glory.
There is no such thing as a perfect answer
If you look at any popular question on SO, it never has a one and only answer. Of course, there is that highest up-voted and accepted answer somewhere on the top. It is usually followed though, by a dozen of, as well, highly up-voted answers. They may not be on point as the accepted answer, but remember that not only the questioner reads the answers. Developers around the world are going through them, and for some, a different flavour of the answer might be more adequate and valuable.
My point with this paragraph is that when you find an interesting question but it already has an answer (might be even up-voted), then do not get discouraged. Do not settle for the thought that this post is a closed case already. If you think your answer might add something beneficial on top of what has been already said, then put it out there. A helpful answer will always be found at some point by some developers. They will thank you for that with an up-vote or a comment.
Be smart about the bounties
If you read Robert Stevenson’s “Treasure Island”, most likely you had those great dreams about finding that chest of gold yourself and never having to work again. And most likely, just like me, you discovered later in life, that it is better to build foundations of your future on something more tangible and certain. SO gives you an opportunity though, to restore those dreams a bit and put on those pirate clothes every now and then. Bounties are a feature of SO that allows the questioner or other user to “upgrade” or “promote” a particular question by sacrificing their own reputation. If your answer gets accepted, you will get an additional 50 to 500 reputation points. I know there is a small subset of users who hunt specifically for them, but I was never in that group. Personally, I was never interested in bounties to any significant degree. I always found the questions to be regarding some rare edge cases. A lot of the times I found that I had to set up a local environment, similar to the one the questioner was working on, to even reproduce the problem and get some sort of idea what is going on. If you are fine with that sort of thing, then go ahead and become a bounty hunter. They can get you a lot of reputation, but it might take a long time to get one. Also, a lot of people are hunting for them as well. My advice would be to go for them as a way to additionally challenge yourself every now and then. Do not make them a means to an end, though. Otherwise, before you know it, you might end up on a pirate ship somewhere in the middle of the Caribbean, repeatedly singing the same old song under the Jolly Roger with the Treasure Island being the only thing occupying your mind: “Fifteen men on the dead man's chest— ...Yo-ho-ho, and a bottle of rum! ”
The SO Don'ts
Forget about the chat
A lot of times, the questioner will simply not “get” the intention and idea behind your answer. In the comment section, s/he will start asking questions or maybe even questioning your solution. That is fine, as long as it does not overflow into a full-blown conversation. The whole idea behind SO, in my opinion, are concise and detailed questions followed by direct, clear and to-the-point answers. If the questioner offers to open a chat with you, then most likely:
a) The problem was not detailed enough, or some vital information was not included b) The questioner wants you to help him/her adapt your answer to his exact code that s/he is working with.
In case of a), suggest to the questioner to add more details to the question. They can always edit it later on. If the question looks detailed already, then possibly it would be advisable to split the complicated problem into more than one post. Suggest them that. In the case of b), do not go that route. We are not there to take the questioner by hand and walk them all the way through the implementation. It is their job, after getting hints from our answers.
Do not create entire solutions for people
This is kind of a follow up to the previous point. The emphasis is more on the audacious questioners though. I am talking about these ones who might ask questions similar to this: ... These are a lot of the times, kids or students that are simply too lazy to do their homework assignments. Even too lazy to search for a similar solution. They bluntly post verbatim the task they were given and expect a ready-made solution. Flag these people out. There is no place for them on SO. The rule is: put some effort into figuring out the problem yourself. If you get stuck, post on SO your efforts and why they do not work (stack traces). People will be more than welcome to help you out.
Do not hunt for quick glory
If you look at the most popular questions/answers for a particular tag, you will notice that they are regarding the most essential areas and core concepts. Therefore a lot of people are looking for these, and they get up-voted more often than the rest. The number of up-votes for a particular tag follows the textbook example of the Pareto distribution, where only a handful of questions/answers are up-voted daily (or even multiple times a day) and become the “golden standards” for that particular area. While 95%+ being in the one to two up-votes area.
It is doubtful though that any of your answers will reach that mythical “1000+ up-votes” status. At least I would not count on it. The worst thing that you can do is to “hunt” only for questions with that kind of potential (universal, fundamental problem). First of all that is not the point of being a contributor on SO, you are just selfish and glory-seeking. Second of all, you are most likely wasting your precious time, that could be spent on answering, concrete, complex problems that other developers stumble upon (which is the vast majority). Finally, if someone asks this kind of question, most likely, it already has an answer, and it will get closed as a duplicate before you manage to submit yours.
Do not overdo it.
I have made that error myself, and I hope you will not fall into the same trap. The beginnings are always challenging in any kind of endeavour. This applies, of course, to SO as well. After the initial stage of being a contributor, you start to get more confident and bold with your answers. That is great. There is another feeling that comes with it which is not that healthy. It is associated with a chemical in your body called dopamine. Believe me, the up-votes you get for your quality answers, and those green pop-ups with the increase of your reputation are the perfect stimulus for dopamine. This chemical has its place but definitely not in the long run. A few weeks down the road and you might end up like a reputation-seeking junky, lurking during the weekends and in the shadows of the night in search for more questions that can be answered and up-voted. Just to see one more of these green notification pop-ups. I have been there for a month or so, and trust me on this one.. get out of that habit as soon as possible. Being a contributor to SO is great, but there are a lot more important things in life besides that. Keep it under control, once you reach mastery in certain areas.
Please keep in mind that even though it is cool to follow your progress via different stats breakdowns, you should really focus on just answering questions, being a contributor and gaining a lot of joy and knowledge from that. Look at these every now and then, but definitely do not make checking them out every day a habit. It is a bad one, indeed.
One of the main stats that you want to follow is the percentage of the accepted answers. It will be low, even very low at the beginning. That is expected actually, as you are just getting to know your new environment which is SO. Over time this percentage will grow steadily, do not worry about it. When it reaches 30-35%, you can be sure that you are getting that expert level for the tags you have chosen to answer. How 30% is an expert level, you think? Please keep in mind that a lot of times, questioners will simply forget / neglect to accept your answer. On top of that, usually, there will be two to four answers given by different users, and even though yours is correct, on of the others may include something that is just a bit more specific and on point regarding the questioners particular scenario.
Another fun statistic to check every now and then is the scores breakdown graph. It is quite uplifting to finally see some double digits at the end of the X-axis. After some time, most of these breakdowns look almost similar regardless of the user. Most of your answers will be in the 0 to 2 score range (unless you are John Skeet).
Finally, it is worthwhile to check every now and then your actual place in the overall rankings. Just do not get fixated by it. The most important thing is that you keep progressing. It will boost your morale and encourage you to continue contributing. My small advice on this one is this.. do not aim at top 1000. These guys are simply on a different level. I want you to be ambitious, but I do not want SO to replace your life, that is for sure.
Giving back to the community is one of the attributes of a complete software craftsperson. If you decided to contribute on SO, then answering questions in the best and most comprehensive way should be your primary purpose there. Reputation, medals and stats are just a tangible measurement of your contribution. They simply grow and pop up at some point as a natural consequence of your activity.
From my experience, most people you help are really grateful for your efforts and that's the coolest part.