We’ve all benefited from open source or publicly available code in an immeasurable way. It’s hard to even imagine a programming world without freely available libraries, code snippets, and tutorials today. So why are developers so afraid of putting their code out there?
The answers to this question are largely unfounded, and I’d like to offer reasoning to combat the common responses.
Answer #1) My code might not be good enough
This has to be the most common response. Everyone who has opened their code to the public has felt this way. Software is a deeply personal form of expression. There are endless solutions to a problem and the way you chose to solve it can speak volumes about you and your skill level. It’s natural to be nervous about your approach.
Think of it from the other side though. How often have you accepted someone elses work without so much as looking at the underlying code? Probably the vast majority of the time. Even beyond that, when you’ve discovered a problem or found an inefficient solution in their code, how often have you thought poorly of the developer or been mad? More likely you were grateful that you were saved a bunch of time along the way and maybe you checked in the improved code for them as a thank you. It will be the same with your code. Do your best, obviously, but put your work out there for others to benefit from and to improve upon. They’ll be grateful you did.
Answer #2) I don’t want my software criticized
This is another natural answer given to the problem. It’s true, the internet is filled with terrible people who hide behind anonymity and behave like animals. Developers in particular can be real jerks as everything turns into one giant pissing contest around different approaches. That’s the nature of software engineers however. They’re defensive, egotistical, and at the same time, self-conscious.
Here’s the thing though, you need to be able to take criticism. At the same time, you need to recognize a trolling jerk and be able to brush them off. Constructive criticism is something that can help you grow as a person and a developer more than almost anything else save experience. Gain insight and perspective from others when they’re contributing. Ignore needless jabs along the way.
Answer #3) It’s a security concern
Well, potentially. You should be careful not to publicize anything that exposes sensitive information or access protocols of course. If we’re talking about securing or encrypting sensitive data however, I’d argue that you’re better off making the code public as early in the development as possible. By doing so, you open your methods up to scrutiny by folks who may have more expertise. Someone may point out a gaping hole in your strategy early on that may have gone unnoticed. In the end, you’ll end up with a more secure product, not a less secure one. Any security that can be broken simply by knowing the coding is not secure anyhow. Think about OAuth 2.0 security. Its open design and coding is coupled with a thought out and secure methodology.
Answer #4) Someone will steal my idea
The general public overestimates this point to an absurd degree. I can’t tell you how many times someone has approached me saying they have the next big idea, but refuses to discuss it without an NDA. Nobody is going to steal your idea, in fact, you’re probably doing something that’s already been done (and maybe even open-sourced) anyway.
I’m not suggesting you open-source your entire ground up solution and your whole business model. I’m suggesting you open-source reusable components and libraries that can be shared and made better. Take Square for example. They’re a fast growing and valuable company who has opened up a vast library of code to the public. They hold back their core business logic of course, but chances are that particular code isn’t reusable anyway. What they have released has improved the quality of Android and iOS software for millions, and in return, developers from all over the world have contributed and improved Square’s libraries - for free.
It seems scary. Putting yourself out there like that can be anxiety inducing. The fact of the matter is that you have far more to gain than to lose. Your code will be better, your ability to take criticism will be improved, and you’ll gain satisfaction from the knowledge that others are benefiting from your creation. You can start out small too. Put some code snippets up on Gist, build a library of helpful functions there. After a while, put your first project up on Git, anything that you’ve found useful, and go from there. You won’t regret it and it will soon become second nature.